2018년 12월 5일
파이프라인 해저드 및 해결방안
I. 파이프라인 지연 현상, 파이프라인 해저드
가. 파이프라인 해저드의 개념
- 명령어 실행 지속이 불가하여 지정된 클럭에서 수행되는 파이프라인이 지연, 중지되는 현상
나. 파이프라인 해저드의 유형
해저드 | 발생 이유 |
---|---|
구조적 | – 자원 충돌로 여러 명령의 동시 수행 시 발생 |
데이터 | – 미수행된 명령의 결과값 참조 시도 발생 |
제어 | – 순차적 명령어가 분기에 의해 버려지는 경우 |
II. 구조적 해저드 상세설명 및 발생 시 해결 방안
가. 구조적 해저드 상세설명
– 프로세서가 하나의 Write port를 가지는 경우 동시 수행이 불가
나. 구조적 해저드 발생 시 해결 방안
구분 | 해결 방안 | 세부 방안 |
---|---|---|
자원 추가 | 가산기 추가 | – 페치 단계의 PC값 증가는 ALU 가산기가 아닌 별도 가산기 추가 |
전용 연산기 추가 | – 곱셈기, 나눗셈기 등 ALU 내 다수 작업위한 별도 연산장치 추가 | |
저장장소 활용 | Cache 메모리 분리 | – 메모리 충돌 방지 위한 Cache – Instruction/Data용 L1 Cache 분리 |
Register 사용 | – 시분할 Read/Write 접근 – 멀티 포트 레지스터 사용 |
III. 데이터 해저드 상세설명 및 발생 시 해결방안
가. 데이터 해저드 상세설명
– 명령어들의 결과값 의존성에 의해 이전 명령 수행 완료 시까지 다음 명령어의 실행 연기
세부 유형 | 발생 이유 | 발생 사례 |
---|---|---|
쓰기 후 읽기 (RAW) | – 기억장치에 쓰기 동작이 완료되기 전에 다음 명령어의 읽기 수행 시 발생 | ① add $1, $2, $3 ② sub $4, $1, $5 $1 읽기 먼저 수행 |
읽기 후 쓰기 (WAR) | – 기억장치에서 읽기 동작이 완료되기 전에 다음 명령어가 쓰기 수행 시 발생 | ① add $1, $2, $3 ② store $2, 0 $2 쓰기 먼저 수행 |
쓰기 후 쓰기 (WAW) | – 두 명령어가 같은 위치에 쓰기 시 동작 순서 변경 시 해저드 발생 | ① add $1, $2, $3 ② stor $1, 0 ②번 먼저 수행 |
나. 데이터 해저드 발생 시 해결방안
해결 방안 | 세부 방안 |
---|---|
전방 전달 (Forwarding) | – MUX를 추가하여 정상적으로 획득 불가 값을 내부 자원으로부터 획득 |
Change Clock Cycle | – Clock을 분할하여, 1/2에 쓰기, 2/2에 읽기 |
명령어 재배치 | – 전체 프로그램 실행에 영향이 없으나, 데이터 의존 발생 시 실행 순서 변경 |
interlocking/NOP | – 파이프라인 중단을 막기 위해 하위 파이프라인 실행 중단, NOP(No Operation) 추가 |
IV. 제어 해저드 상세설명 및 발생 시 해결방안
가. 제어 해저드 상세설명
– 명령어의 실행 순서를 변경하는 Branch, Jump 등 분기 명령에 의해 발생하여 처리된 명령 무효화
나. 제어 해저드 발생 시 해결방안
해결 방안 | 구성요소 |
---|---|
Delayed Decision | – 손실되는 클럭 동안 프로그램에 영향이 없는 다른 명령 수행 |
Predict Taken / Not Taken | – 명령어 분기 시 예측하여 명령어 수행 – 명령어 분기 시 명령 취소 |
Stall | – 분기 방향이 결정될 때 까지 지연 |
– 분기 명령에 의해 명령 취소 시 캐시에 남아 있는 데이터로 인해 멜트다운 버그가 발생하므로 캐시 사용 시 주의 필요
4 Comments
기술사 서브노트 정리하는데 이 내용 긁어가도 될까요?
네 학습하실때 도움이 되셨으면 좋겠습니다.
이걸 보니까 이제서야 이 부분을 확실히 알겠네요! 정말로 좋은 자료 감사합니다.
잘 정리해주셔서 감사합니다 🙂