-
CPU circuit - Pipeline대학/컴퓨터구조 2023. 6. 11. 21:55
명령어를 아래 5단계로 나눠 각 단계를 각 회로에 할당시켜서 여러 명령어를 동시에 처리하는 기법이다.
- IF: 명령어를 메모리에서 가져옴
- ID: 명령어를 decode하고 레지스터에서 값을 읽어옴
- EX: 명령어 관련 레지스터나 값을 연산함
- MEM: 메모리에 접근함
- WB: 연산이나 메모리의 결과를 레지스터에 저장함
파이프라인 기법을 사용하면 한 명령어를 처리하는데 시간이 약간 늘어날 수 있다.
왜냐하면 레지스터 접근 단계(ID, WB)에서는 시간이 적게 걸리는데,
파이프라인 기법을 쓰기 위해서는 모든 단계의 시간을 가장 오래 걸리는 단계의 시간으로 맞춰줄 필요가 있기 때문이다.
하지만, 명령어를 병렬 처리하기 때문에 전체 시간으론 매우 단축된다.
즉, CPU설계에 있어, 명령어 stage당 소요되는 시간이 밸런스가 맞을수록 성능 향상을 기대할 수 있다.
하지만 동시에 여러 명령어를 어떻게 회로에 반영할 수 있을까?
그 방법은 각 스테이지 중간마다 상태를 저장할 레지스터를 회로에 추가하면 된다.
IF/ID, ID/EX, EX/MEM, MEM/WB에 명령어와 Control 시그널을 저장하여 각 단계에 맞게 전류를 보내
각 단계의 회로를 활성화시키는 것이다.
이 4개의 레지스터 역시 clock에 동기화 되어있기 때문에 신호가 혼선될 일은 없다.
회로 그림이 너무 복잡하니 이전 포스트를 이해하고 오는 것이 좋다.
예로 들어 lw 명령어 하나의 흐름을 살펴보자.
하지만 여러 명령어를 동시에 수행하면 필연적으로 발생할 문제들이 있는데, 바로 Hazard다.
- Structure Hazard
(구조적 문제. 이 부분은 생략함) - Data Hazard
이전 명령어가 레지스터를 읽고 쓸때, 다음 명령어가 이에 접근하려 하는 경우 - Control Hazard
이전 명령어에 따라 Control 시그널을 다르게 보내줘야 하는 경우
각각의 문제 상황과 해결 방법은 다음 포스트에서 알아보자.
'대학 > 컴퓨터구조' 카테고리의 다른 글
ILP - Instruction Level Parallelism (0) 2023.06.12 Hazard (0) 2023.06.12 CPU circuit - Basic (1) 2023.06.11 Arithmetic for Computer (0) 2023.04.25 MIPS Instruction set (2) 2023.04.25