명령어 파이프라인
하나의 명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면 아래의 4개의 단계로 나누어진다.
- 명령어 인출 Instruction Fetch
- 명령어 해석 Instruction Decode
- 명령어 실행 Execute Instruction
- 결과 저장 Write Back
여기서 주목할 점은 CPU는 같은 단계가 겹치지만 않으면 각각의 단계를 동시에 실행할 수 있다.
아래의 그림에서 t2는 3개의 명령어를 t4는 4개의 명령어를 겹쳐서 실행하고 있는 것을 볼 수 있다.
이런 식으로 명령어를 동시에 병렬로서 처리하는 방법을 명령어 파이프라인 이라고 한다.
명령어 파이프라인을 사용하지 않는다면 아래 그림처럼 명령어를 처리하는 속도가 길어진다는 것을 알 수 있다.
단, 명령어 파이프라인이 항상 올바르게 작용되는 것은 아니며 때로는 성능 향상에 실패하거나 명령어를 동시에 처리하지 못하는 경우가 발생하는데 이를 파이프라인 위험, 파이프라인 해저드라고 부른다.
파이프라인 위험 : 명령어 파이프라인이 성능 향상에 실패하는 경우
- 데이터 위험 : 명령어 간의 의존성에 의해 야기되어 모든 명령어를 동시에 처리할 수 없는 경우
ex) 이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우 - 제어 위험 : 프로그램 카운터의 갑작스러운 변화
ex) CPU가 실행하고자 하는 메모리의 주소 번지가 갑작스럽게 다른 특정 메모리 주소 번지로 실행의 흐름을 바꾸게 되는 경우
JUMP, CALL 명령어 혹은 인터럽트 등 - 구조적 위험 : 서로 다른 명령어가 같은 CPU부품을 쓰려고 할 때( ALU, 레지스터 등 )
슈퍼스칼라
CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조를 슈퍼스칼라라고 한다.
cf) 8코어 16스레드와 같은 오늘날의 멀티스레드 프로세서
이론적으로는 파이프라인 개수에 비례하여 처리 속도가 증가하지만, 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하지 않는다.
비순차적 명령어 처리
비순차적 명령어 처리 기법은 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법이다.
하지만 3번 명령어를 맨 뒤로 순서를 바꿔버리면 전체 결과에는 영향이 없지만 파이프라이닝은 조금 더 원활하게 동작할 수 있다.
아래 그림에서는 각자의 수행을 위해 선결되어야 하는 명령어가 포함되기 때문에 1번과 3번, 1번과 4번은 순서를 바꿀 수 없다. 하지만 의존성이 없는 4번과 5번의 명령어 순서를 바꿔보면, 전체 프로그램 실행 흐름에는 영향이 없지만 파이프라이닝은 원활하게 동작할 수 있다.
'컴퓨터공학' 카테고리의 다른 글
12. RAM의 특징과 종류 (1) | 2024.10.08 |
---|---|
11. 명령어 집합 구조, CISC와 RISC (1) | 2024.10.07 |
9. 빠른 CPU을 위한 설계 기법 (0) | 2024.10.05 |
8. 명령어 사이클과 인터럽트 (0) | 2024.10.04 |
7. 레지스터 (0) | 2024.10.02 |