파이프라이닝 개관
 파이프라이닝은 여러 개의 명령어가 중첩해 실행되는 구현기술이다.
 파이프라이닝은 명령어 처리량을 증가시킴으로써 성능을 향상시킨다.


명령어 실행 단계
1. 명령어를 메모리부터 가져온다.
2. 명령어롤 해독하는 동시에 레지스터를 읽는다.
3. 연산을 수행하거나 주소를 계산한다.
4. 데이터 메모리에 있는 피연산자를 접근한다.
5. 결과값을 레지스터에 쓴다.


파이프라인 해저드
 구조적 해저드, 데이터 해저드, 제어 해저드

 구조적 해저드 - 같은 클럭 사이클에 실행하기를 원하는 명령어의 조합을 하드웨어가 지원할 수 없는 경우. 가령 메모리부터 명령어를 가져옴과 동시에 메모리로부터 데이터를 가져와야 하는 명령어를 수행해야 하는 경우 메모리가 하나만 있다면 도시에 메모리로부터 데이터를 가져 올 수 없기에 하드웨어의 구조적 문제에 직면한다.

 데이터 해저드 - 한 단계가 다른 단계가 끝나기를 기다리기 때문에 파이프라인이 지연되어야만 하는 경우 일어난다.  이는 한 명령어가 파이프라인 상에 있는 앞선 명령어에 종속성을 가질 때 데이터 해저드가 일어난다. 가령 add 명령어 뒤어 바로 sub 명령어가 있다면 add는 명령어 실행 단계 중에서 3,4,5를 수행한 이후에야 결과값을 레지스터에 쓴다. 그렇다면 3 단계의 파이프라인을 포기해야 함을 의미한다. 이런 경우 전방전달(forwarding 또는 bypassing)을 이용해 해결한다.

 제어 해저드 - 다른 명령어들이 실행중에 한 명령어의 결과값에 기반을 둔 결정을 할 필요가 있을때 발생한다. 즉 분기 명령어가 이에 해당한다.

지연분기 : 이는 분기 명령어 다음에 나오는 명령어는 분기조건이 참인지 거짓인지 상관없이 항상 실행된다는 것을 의미한다. 조건이 거짓이면 보통의 분기처럼 실행된다. 조건이 참이면 지연분기는 분기 명령어 바로 다음 명령어를 먼저 실행하고 명시된 분기목적지 주소로 건너뛴다.

분기예측 : 어떤 경우는 분기한다 혹은 분기하지 않는다고 가정하는 것이다. 각 분기가 일어났는지, 안 일어났는지 이력을 기록하고 미래를 예측하기 위해 최근의 과거 이력을 사용한다.

Posted by initproc
,