본문 바로가기
cs

[혼공운영체제] 5.CPU의 성능 향상 기법(2) : 명령어 병렬 처리 기법

by 이쟝 2023. 4. 17.
인프런의 개발자를 위한 컴퓨터 공학1 : 혼자 공부하는 컴퓨터 구조 + 운영체제 강의를 듣고, 학습 및 요약

 

CPU가 어떻게 시간을 효율적으로 사용하면서 명령어들을 빠르게 처리할 수 있을까!?

 

1. 명령어 파이프라인

하나의 명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면 아래처럼! 
이 과정 전체가 하나의 스레드이다. 

 

  1. 명령어 인출(Instruction Fetch)
  2. 명령어 해석(Instruction Decode)
  3. 명령어 실행(Execute Instruction)
  4. 결과 저장(Write Back)

인출 -> 실행으로 나누기도 하고

명령어 해석 -> 명령어 실행 -> 명령어 접근 -> 결과 저장으로 나누기도 한다. 

 

같은 단계가 겹치지만 않으면 CPU는 '각 단계를 동시에 실행할 수 있다.'

명령어 파이프라이닝 : 동시에 여러 개의 명령어를 겹쳐 실행하는 기법(하나의 코어에 여러 개의 스레드를 사용하는 것)

  • 기존의 방식은 하나의 명령어를 처리하기 위해서 명령어 처리 4단계를 모두 마치고 다음 명령어를 실행하지만, 파이프라인 기법에서는 명령어 처리의 단계마다 독립적으로 구성하여 각 단계가 쉬지 않고 명령어 처리한다.

명령어 파이프라인

 

파이프라인 위험

  • 명령어 파이프라인이 성능 향상에 실패하는 경우

파이프라인 위험

1. 데이터 위험

  • 명령어 간의 의존 성에 의해 야기
  • 모든 명령어를 동시에 처리할 수 없다.(이전 명령어를 끝가지 실행해야만 비로소 실행할 수 있는 경우)
  • 첫 번째 명령어에 의해 값이 정해지는 데이터를 두 번째 명령어에서 읽게 되는 경우 두 명령어를 실행 순서가 변경되면 안 된다.

2. 제어 위험

  • 프로그램 카운터의 갑작스러운 변화

제어 위험

 

3. 구조 위험

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

슈퍼스칼라 프로세서

CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조(오늘날의 멀티스레드 프로세서)
  • 대부분 파이프라인 기법과 비슷하지만 각 단계에서 동시에 실행되는 명령어가 2개라는 점이 다름
  • 병렬로 처리할 수 있는 명령어가 없는 경우에는 슈퍼스칼라를 써도 효과를 기대할 수 없음
  • 이론적으로는 파이프라인 개수에 비례하여 처리 속도가 증가하지만 파이프라인 위험도의 증가로 인해 파이프라인 개수에 비례해 처리 속도가 증가하진 않음

 


비순차적 명령어 처리(out-of-order execution, OoOE)

파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법