파이프라인
하나의 프로세서를 서러 다른 기능의 여러 서브 프로세서로 나누어 각 프로세서가 동시에 서로다른 데이터를 취급하게 하는 기법
클럭사이클 시간 = Tp, 세그먼트 = k, 태스크 = n개
- 클럭사이클 : 클록펄스에 따른 시간
- 세그먼트 : 정해진 부연산을 수행하는 조합회로
- 태스크(task) : 파이프라인의 모든 세그먼트를 지나쳐 수행되는 전체동작

속도 향상
파이프 라인 처리로 인한 속도 향상
(k+n−1)∗Tpn∗Tp=파이프라인비파이프라인
태스크 수의 증가시, k+n−1≒n
이때의속도증가율=TpTn
파이프라인 회로가 비파이프라인 회로에서 한 태스크를 수행하는데 걸리는 시간이 같다고 가정시
Tpk∗Tp=k
즉, 이론적 최대 속도 증가율은 세그먼트의 수(k)
실제 파이프라인이 이론적인 최대속도가 안나오는 이유
- 각 세크먼트들이 부연산을 수행하는 시간이 서로 다름
- 파이프라인 회로와 비파이프라인 회로에서 지연시간이 언제나 동일하지는 않음
- IF(명령어인출), OF(오퍼랜드인출) 단계 기억장치 충돌 시 지연 발생
- 모든 명령어들이 파이프라인 단계를 모드 거치지 않을 수도 있음
- 분기, 인터럽트 등이 실행시 미리 처리되던 명령어들이 무효화 될 수 있음
명령어 파이프라인
명령어 파이프라인의 비정상 동작의 원인
자원충돌
두 세그먼트가 동일한 메모리를 접근시
- 해결법 : 명령어 메모리와 데이터 메모리를 분리
데이터 의존성
어떤 명령어가 이전 명령어의 결과에 의존해 수행하는데, 그 값이 준비되지 않은 경우
- 주소 의존성 : 필요로 하는 주소값이 준비되지 않아 유효주소 계산이 지연되는 경우
- 해결법
- 하드웨어 인터락 : 어떤 명령어의 피연산자가 파이프라인에서 앞서간 명령어의 목적어와 일치하는지 검사하는 회로
상황 감지시 충분한 클럭 사이클 동안 지연됨
- 오퍼랜드 포워딩 : 특별한 하드웨어를 사용해 충돌감지
- 컴파일러 : 컴파일러로 데이터 충돌 감지
무동작 명령어 삽입 또는 명령어 재비치 등
분기곤란
분기명령어와 같이 PC값 변경시
- 해결법
- 분기예측 : 분기를 예측해 명령어 순서 결정
- 지연된 분기 : 무동작 명령어 삽입 또는 재배치
파이프라인 해저드
파이프라인이 특정 상황에 지연되는 것
데이터해저드
첫번째 명령어가 새 값을 저장하기전에 두번째 명령어가 예전값을 읽어 잘못된 주소 값 사용
분기해저드
CPU가 실행되선 안될 때 명령어를 실행시킴