Single-cycle 프로세서
Single-cycle 프로세서는 하나의 명령어가 각 단계를 하나씩 순차적으로 거쳐야 하므로, 한 명령어를 처리하는 데 필요한 시간은 모든 단계의 시간을 합친 것입니다. 즉 각 단계에서 걸리는 시간 중 가장 큰 값을 기준으로 클럭 주기를 설정해야 합니다.
예시)
IF = 200ps
ID = 150ps
EX = 250ps
MEM = 250ps
WB = 100ps
가장 오래 걸리는 시간은 EX와 MEM 단계로 250ps입니다. 하지만 single-cycle 프로세서에서는 모든 단계를 하나씩 순차적으로 처리하기 때문에, 모든 단계의 시간을 합쳐야 합니다. 따라서 최선의 클럭 주기는 모든 단계의 소모 시간의 합입니다.
200 + 150 + 250 + 250 + 100 = 950ps 가 최선의 클럭 주기가 됩니다.
2단 파이프라이닝
예시)
IF = 200ps
ID = 150ps
EX = 250ps
MEM = 250ps
WB = 100ps
2단 파이프라이닝에서는 IF, ID, EX 단계와 MEM, WB 단계를 분리하여 실행합니다. 파이프라인을 적용할 경우 각 단계는 독립적으로 처리되며, 그 중 가장 시간이 오래 걸리는 단계가 클럭 주기를 결정합니다.
IF, ID, EX 단계를 다 더하면 600ps
MEM, WB를 더하면 350ps
최선의 클럭 주기는 더 큰 쪽으로 해서 600ps가 됩니다.
균등함을 기준으로 잡았습니다.
CPU time, Pipeline 장단점
CPU time을 결정짓는 3가지 요소
- 명령어의 개수 : 실행해야 할 명령어의 총 개수
- 클럭 주기 : CPU의 클럭 신호가 한 번 반복되는 데 걸리는 시간
- CPI : 하나의 명령어를 실행하는 데 필요한 클럭 사이클의 평균 개수
파이프라인을 사용하면 클럭 주파수가 크게 증가합니다. 파이프라인닝은 여러 명령어를 겹쳐서 실행함에 따라서 처리량을 향상시키지만, 각 명령어의 실행 시간을 단축시키지는 않으며 파이프라인을 구성하는 데 추가적인 회로가 필요하므로 클럭 주파수를 높이는 것이 중요해집니다.
즉 Pipeline은 클럭 주파수를 증가시킵니다.
Pipeline의 단점
- 소모 자원 증가 : 파이프라인을 구현하기 위해서는 추가적인 하드웨어 자원, 예를들어 레지스터, 래치, 멀티플렉서 등이 필요합니다. 따라서 소모 자원 = 소모자원량이 증가합니다.
- hazard 발생 : 파이프라인에서 명령어를 겹치기 때문에 의존성 문제가 발생합니다. 이는 3가지의 hazard로 발생합니다. 구조적 hazard, 데이터 hazard, 제어 hazard가 있습니다.
파이프라이닝 적용 추가된 레지스터 저장
일반적인 5단계 파이프라인은 다음과 같습니다.
- IF (Instruction Fetch): 명령어 인출
- ID (Instruction Decode): 명령어 해독
- EX (Execution): 실행
- MEM (Memory Access): 메모리 접근
- WB (Write Back): 결과 쓰기
각 단계 사이에 위치한 레지스터는 다음과 같습니다.
- IF/ID 레지스터: IF 단계와 ID 단계 사이에 위치
- ID/EX 레지스터: ID 단계와 EX 단계 사이에 위치
- EX/MEM 레지스터: EX 단계와 MEM 단계 사이에 위치
- MEM/WB 레지스터: MEM 단계와 WB 단계 사이에 위치
1. instruction → IF/ID 레지스터
IF 단계에서는 메모리에서 명령어를 인출합니다. 인출된 명령어는 IF/ID 레지스터에 저장되어 다음 단계인 ID단계로 전달됩니다. 따라서 "Instruction"은 IF/ID 레지스터에 저장되는 값입니다.
2. register file에서 읽은 레지스터 값 → ID/EX 레지스터
ID 단계에서는 명령어를 해독하고, 필요한 경우 레지스터 파일에서 레지스터 값을 읽어옵니다. 읽어온 레지스터 값은 ID/EX 레지스터에 저장되어 다음 단계인 EX 단계로 전달됩니다. 따라서 "reigster file에서 읽은 레지스터 값"은 ID/EX레지스터에 저장되는 값입니다.
3. ALU 결과 → EX/MEM 레지스터, MEM/WB 레지스터
EX단계에서는 ALU를 사용하여 연산을 수행합니다. ALU의 결과는 EX/MEM 레지스터에 저장되어 다음 단계인 MEM 단계로 전달됩니다. 만약 이 명령어가 메모리 접근이 필요 없는 연산이라면, EX/MEM 레지스터의 값은 바로 MEM/WB 레지스터로 전달됩니다.
따라서 "ALU 결과"는 EX/MEM 레지스터와 MEM/WB 레지스터 모두에 저장될 수 있습니다.
4. 메모리에서 읽은 결과 → MEM/WB 레지스터
MEM 단계에서는 메모리에 접근하여 데이터를 읽거나 씁니다. 메모리에서 읽은 결과는 MEM/WB 레지스터에 저장되어 마지막 단계인 WB 단계로 전달됩니다. 따라서 메모리에서 읽은 결과는 MEM/WB 레지스터에 저장되는 값입니다.
'IT 프로그래밍 > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 파이프라인 해저드 (Pipeline Hazards) 및 해결 방법 (0) | 2024.12.18 |
---|---|
[컴퓨터구조] 파이프라인 및 제어신호 (0) | 2024.12.18 |
[컴퓨터구조] Processor1 (0) | 2024.12.17 |
[컴퓨터구조] processor1 (0) | 2024.12.17 |
[컴퓨터구조] Dapapath (1) | 2024.12.11 |