명령어 파이프라인

명령어 파이프라인(instruction pipeline)은 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술로, 한 번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 여러 개의 명령어를 실행하는 기법이다.

하나의 명령어는 여러 개의 단계로 나눌 수 있는데, 이때 하나의 명령어를 처리할 때까지 다음 명령어가 처리되지 않고 기다린다면, 명령어의 특정 단계를 처리하는 동안 다른 단계를 처리하는 부분은 아무 작업도 하지 않게 된다. 이때 파이프라인을 사용하면 한 명령어의 특정 단계를 처리하는 동안 다른 부분에서는 다른 명령어의 다른 단계를 처리할 수가 있게 되므로 속도가 향상될 수 있다.

파이프라인의 효율은 브랜치나 서브루틴 콜이 많아질수록 떨어진다. 그 이유는, 브랜치나 서브루틴 콜이 이루어지면, 파이프라인에서 처리되던 명령어들이 다 취소되고 새로 브랜치나 서브루틴의 명령어를 처리해야하기 때문이다. 최신 아키텍처는 분기 예측 등의 기법을 통해 이런 문제를 회피한다.

RISC 프로세서의 경우 CISC 프로세서보다 파이프라인 효율이 좋다. RISC는 명령어가 한 클록에 처리되므로, 한 명령어를 오래 처리해서 다음 명령어의 처리가 늦어지지 않기 때문이다. 또한, 메모리에 접근하는 경우, 매우 오랜 처리시간이 걸리는데, RISC는 LOAD나 STORE 명령어만으로 메모리에 접근하므로 비효율적인 접근이 CISC보다 적기 때문이다.

파이프라인 붕괴 
명령어 수행과정중에 분기가 발생할 경우 분기전에 명령 수행과정에 있던 명령어들(파이프라인의 5단계를 진행중인)은 버려지게되므로 분기종료후 예외처리 복귀명령을 통해 복구시켜야한다.
버려지게되는 명령어의 기준은 예외상황마다 다르다.

해저드(Hazard) 
파이프라인이 속도가 느려지는 경우를 해저드라고 한다. 데이터 해저드는 예상된 시각에 연산자가 사용 불가능할 경우에 일어난다. 예를 들어, 나눗셈 연산을 처리 중이라면 그 다음 명령어는 처리할 수 있는 연산자가 없기 때문에 실행이 연기될 수밖에 없다.
컨트롤 해저드 또는 명령어 해저드는 명령어를 당장 사용할 수 없을 때 일어난다. 캐시에 명령어가 저장되어 있을 경우 빠르게 명령어를 실행할 수 있지만, 해당 명령어가 없을 경우에 메모리로부터 가져와야 하기 때문에 오랜 시간이 걸리고 결국 파이프라인의 속도가 떨어진다.
구조적 해저드는 두 명령어가 동시에 어떤 하드웨어에 접근해야할 때 일어난다. 예를 들어서, 어떤 명령어가 실행이나 쓰기를 위해서 메모리에 접근해야할 때, 다른 명령어가 메모리에서 읽혀지는 경우 이런 해저드가 발생한다.

같이 보기 
 대기 상태
 유닉스 명령어

외부 링크 
 텀즈 - pipeline and pipelining ; 파이프라인

명령어 처리
슈퍼스칼라 마이크로프로세서