컴퓨터 공학(컴퓨터 구조 + 운영체제)

명령어 병렬 처리 기법

뚜sh뚜sh 2023. 4. 28. 15:52

명령어 파이프라인

  • 명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면? 
    1. 명령어 인출(Instruction Fetch)
    2. 명령어 해석(Instruction Decode)
    3. 명령어 실행(Execute Instruction)
    4. 결과 저장(Write Back)
  • 같은 단계가 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다
  • 동시에 여러 개의 명령어를 겹쳐 실행하는 기법

 

 

 

파이프라인 위험

  • 명령어 파이프라인이 성능 향상에 실패하는 경우
  • 데이터 위험, 제어 위험, 구조적 위험으로 나눌 수 있음

 

데이터 위험

  • 명령어 간의 의존성에 의해 야기
  • 모든 명령어를 동시에 처리할 수는 없다(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우)
    • e.g. R1 <- R2 + R3 // R2 레지스터 값과 R3 레지스터 값을 더한 값을 R1 레지스터에 저장
    • e.g. R4 <- R1 + R5 // R1 레지스터 값과 R5 레지스터 값을 더한 값을 R4 레지스터에 저장

 

제어 위험

  • 프로그램 카운터의 갑작스러운 변화
  • 분기 예측(branch prediction) : 프로그램 카운터가 어느 주소로 이동할 건지 예측하는 기술

 

구조 위험

  • 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)을 쓰려고 할 때

 

 

 

슈퍼스칼라

  • CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조(=오늘날의 멀티스레드 프로세서)
  • 이론적으로는 파이프라인 개수에 비례하여 처리 속도 증가
  • But, 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례하여 처리 속도가 증가하진 않음

 

 

 

비순차적 명령어 처리(합법적인 새치기)

  • 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법
  • 순서를 바꿔도 전체 프로그램 실행 흐름에는 영향이 없을 때만 순서를 바꿀 수 있음