시간을 알뜰하게 쓰며 CPU의 명령어들을 처리할 수 있는 방법이 있을까?
명령어 파이프 라인
- 명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면?
- 1. 명령어 인출
- 2. 명령어 해석
- 3. 명령어 실행
- 4. 결과 저장
- 같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있다.
⚠️ 파이프라인 위험
- 데이터 위험
- 명령어 간의 의존성에 의해 생기는 문제
- 제어 위험
- 프로그램 카운터의 갑작스러운 변화
- 구조적 위험
- 서로 다른 명령어가 같은 CPU부품(ALU,레지스터)를 쓰려고 할 때
슈퍼스칼라
- CPU내부에 여러개의 명령어 파이프라인을 포함한 구조(오늘날의 멀티 멀티스레드 프로세서)
- 이론적으로는 파이프라인 개수에 비례하여 처리 속도가 올라가지만 파이프라인 위험도의 증가로 인해, 파이프라인 개수에 비례하여 처리 속도가 증가하진 않음
비순차적 명령어 처리
- 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법
- 합법적인 새치기
- 의존성이 없는 명령어의 순서를 바꾼다.