파이프 라이닝
- 명령어의 데이터 경로를 세분화, 각기 다른 세부 단계를 동시에 수행 -> 여러 명령어 중첩 수행 가능
해저드(결과가 틀림)
-구조적 해저드(하드웨어 동시요구 -> 충돌)
-데이터 해저드(다음단계에 필요한 데이터 준비 X)
-RAR(Read After Read): 문제 없음
-RAW(Read After Write): 선행명령어가 쓰기전에 읽는 문제
-WAR(Write After Read), WAW(Write After Write): 선행명령어가 읽거나 쓰기전에 갱신하는 문제
-명령어 해저드(주로 분기 명령어)
해저드 해결방법
-구조적 해저드
-명령어/데이터 메모리(캐쉬)를 분리하드웨어 추가/분할, 예약표, 입출력포트의 다중화
-데이터 헤저드
-포워딩(forwarding): ALU 출력이 다시 입력으로 들어가는 Feedback 데이터 경로 생성, MUX로 선택가능
-컴파일러에서 독립적인 명령어 재배치
-명령어 해저드
-분기를 예측(골키퍼 알고리즘)
공격적 파이프 라이닝
-슈퍼파이프라이닝
-각 단계의 클럭 주기를 줄여 깊이를 깊게함
-수퍼스칼라(Superscalar): 현대 컴퓨터
-파이프 라인 여러개 -> 병렬적으로 여러 명령어 동시 수행(하드웨어 지원)
-VLIW(Very Long Instruction Word): GPU
-여러개의 ALU를 통해 실행단계에서 별도의 실행 장치 -> 병렬성 높임