CS

[CS] 효율적인 명령어 분배 : 명령어 파이프라인

chandlerxx 2024. 4. 15. 11:53

효율적인 명령어 분배

클럭속도, 멀티코어, 멀티스레드 뿐만 아니라, 명령어를 효율적으로 분배하여 CPU 동작간 불필요한 loss 줄여 성능을 높이는 방법 중 하나입니다.

이를 위해서 명령어 병렬 처리기법에 대해 알아볼 필요가 있습니다.

 

명령어 파이프라인

  • `슈퍼스칼라` : CPU 내부에 여러개의 명령어라인을 포함한 구조 (순차적 처리) 

단일 명령어 파이프라인

 

 

명령어 파이프라이닝

명령어를 순차적으로 진행하되, 겹치는 부분이 없게하여 동시에 처리 가능

장점 : 효율적

 

 

비순차적 명령어 처리

  • CPU 성능 향상에 크게 기여, 대부분 CPU가 차용함
  • 데이터 의존성과 무관할 경우, 순서를 바꿔 실행함으로써 명령어 파이프라인이 멈추는 것을 방지하는 기법
  • 명령어와 데이터간 의존관계를 잘 파악해야 합니다.

 

변경전(왼쪽) / 변경후(오른쪽)

위 그림 기준, 살펴보겠습니다.

  • M3는 data1, data2를 참조하여 합산하는 함수라고 가정할때, M1, M2의 결과값이 리턴되기를 기다려야합니다. (회색 음영구간만큼 딜레이발생)
  • 그러나, M4, M5는 M1,M2,M3와는 전혀 무관한 데이터입니다.
  • 이경우에는 오른쪽과 같이 딜레이없이 순서를 바꿀 수 있습니다. 

 

출처

교보문고 혼공컴운