파이프라인 해저드 및 해결방안

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

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^