비교 연산 (cmp)으로 인한 Blocking 문제는 프로그램이 실행 중 특정 조건을 비교할 때, CPU 파이프 라인의 효율성이 저하되거나 병렬 처리가 비효율적으로 이루어지는 상황을 의미합니다.
이 문제는 현대 프로세서에서 **분기 예측 실패(branch misprediction)**와 **메모리 동기화(memory synchronization)**에서 주로 발생합니다.
비교 연산(cmp)은 분기 명령(jmp, je, jg 등)과 결합되어 사용됩니다.
비교 결과에 따라 코드 실행 경로가 나뉘는 경우, CPU는 어떤 경로를 실행해야 할지 분기 예측을 수행합니다.
분기 예측 실패 (branch misprediction)
je가 실행되기 전에 branch predictor을 이용하여 분기 경로를 예측하고 미리 명령어를 로드합니다.파이프라인 중단(Pipeline Stall)의 비용
다중 코어 환경에서 비교 연산(cmp)이 공유 메모리에 있는 데이터를 참조하려면 캐시 동기화가 필요합니다.
이때 동기화 비용으로 인해 cmp 연산이 지연될 수 있습니다.
MESI 프로토콜의 동작
if (shared_var == 0) {
// critical section
}
shared_var를 읽어 캐시에 로드합니다.shared_var를 변경하면, 기존 코어의 캐시는 shared_var를 Invalid 상태로 표시합니다.cmp)을 실행하기 전에 캐시 라인을 갱신합니다.**메모리 대기 시간(latency)**으로 인해 cmp 연산 지연
→ 성능 저하와 전체 프로그램의 동작 속도 감소