스톨(stall)은 CPU가 명령어를 처리하는 과정에서 특정 이유로 인해 일시적으로 멈추거나 지연되는 현상입니다. CPU는 파이프라인 방식으로 여러 단계에 걸쳐 명령어를 처리하는데, 스톨이 발생하면 파이프라인의 일부 단계가 진행되지 못하고 멈추게 됩니다.
스톨이 발생하는 주요 이유는 다음과 같습니다:
데이터 의존성(Data Hazard): 한 명령어가 이전 명령어의 결과를 필요로 할 때 발생합니다. 예를 들어, 두 번째 명령어가 첫 번째 명령어의 결과값을 사용해야 하는데, 첫 번째 명령어가 아직 완료되지 않았을 경우 CPU는 대기해야 합니다.
메모리 접근 지연: 캐시 미스나 메모리 접근 지연으로 인해 필요한 데이터가 늦게 도착할 때도 스톨이 발생합니다. CPU는 데이터를 기다리는 동안 작업을 잠시 멈춥니다.
제어 의존성(Control Hazard): 분기 명령어(조건문 등)로 인해 발생하는 스톨입니다. 분기 예측이 실패하여 잘못된 경로로 명령어를 처리하게 되면, CPU는 잘못된 명령어를 버리고 다시 올바른 명령어를 처리해야 하는데, 이 과정에서 스톨이 발생할 수 있습니다.
구조적 의존성(Structural Hazard): 하드웨어 자원(레지스터, 메모리, 버스 등)이 부족해서 두 개 이상의 명령어가 동시에 같은 자원을 요구할 때 발생합니다. 이 경우 자원 충돌을 방지하기 위해 하나의 명령어가 대기해야 합니다.
스톨을 줄이기 위해 파이프라인 기술, 분기 예측, 캐시 메모리 등을 사용하여 CPU의 성능을 최적화하려는 노력이 있습니다.