Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
Computer Science/컴퓨터 구조

9. 명령어 병렬 처리 기법

by Toughie 2023. 8. 18.

📱명령어 병렬 처리 기법📱

 

명령어 파이프라인

명령어들을 겹쳐서 실행 !

 

(명령어가 처리되는 과정을 비슷한 시간 간격으로 나눈다면?)

 

1. 명령어 인출(메모리로부터 가져옴)

2. 명령어 해석

3. 명령어 실행

4. 결과 저장

 

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

명령어 파이프라이닝 - 동시에 여러개의 명령어를 겹쳐서 실행하는 기법.

명령어 파이프라인 vs 사용하지 않았을 경우

파이프라인 위험

명령어 파이프라인이 성능 향상에 실패하는 경우(병렬로 명령어가 제대로 처리되지 못하는 경우)

 

1. 데이터 위험

- 명령어 간 의존성에 의해 발생 (이전 명령어를 끝까지 실행해야 이후에 실행 가능한 경우)

ex. R1 = R2 + R3(R2와 R3를 더한 값을 R1에 저장)

      R4 = R1 + R5 (이 경우 R1에 값이 할당되어야 연산이 가능함)

 

2. 제어 위험

프로그램 카운터가 갑작스럽게 변하는 경우

(CPU가 실행하려는 메모리의 주소가 바뀌는 경우 ex. 점프, 인터럽트)

이런 상황을 방지하기 위해 분기 예측이라는 기술도 존재함.

3. 구조적 위험

서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 사용하려는 경우 _ 경합


슈퍼스칼라

CPU 내부에 여러 개의 명령어 파이프라인을 포함하는 구조를 말함.

이론적으로는 파이프라인 개수에 비례해서 명령어 처리 속도가 증가하지만,

파이프라인 위험도도 같이 증가하기 때문에 완전 비례해서 처리속도가 증가하지는 않음.

슈퍼스칼라

비순차적 명령어 처리(Out Of Order Execution)

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

(만약 의존성이 있는 코드를 순차적으로 실행한다면, 이전 코드를 기다려야 하기 때문에(동기) 비효율적임)

우측과 같이 의존성이 있는 명령어를 뒤로 보내면(비순차적으로) 훨씬 효율적으로 명령어 처리가 가능함.

(다만 의존성을 고려해야 하기 때문에, 전체 프로그램 실행 흐름에 영향이 없도록 해야함)

 

 

 

학습 출처: https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl