IT 프로그래밍/컴퓨터구조

[컴퓨터구조]

기술1 2024. 12. 18. 00:00
반응형

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단계 파이프라인은 다음과 같습니다.

  1. IF (Instruction Fetch): 명령어 인출
  2. ID (Instruction Decode): 명령어 해독
  3. EX (Execution): 실행
  4. MEM (Memory Access): 메모리 접근
  5. 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 레지스터에 저장되는 값입니다. 

 

 

반응형