프로그래밍/컴퓨터구조 및 운영체제

명령어 병렬 처리 기법

gameObject 2023. 10. 18. 20:40
728x90

명령어 파이프라인

- 명령어 인출 (Instruction Fetch)

- 명령어 해석 (Instruction Decode)

- 명령어 실행 (Execute Instruction)

- 결과 저장 (Write Back)


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

 

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

마치 컨베이어 벨트와 비슷하다.

 

파이프라인 위험

- 명령어 파이프라인이 성능 향상에 실패하는 경우를 말한다.

 

1. 데이터 위험

2. 제어 위험

3. 구조적 위험

 

1. 데이터 위험: 명령어간의 의존성 때문에 발생하는 위험이다.

- 모든 명령어를 동시에 처리할 수는 없다.(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우를 말한다.)

- ex) R1 = R2 + R3  이고 R4 = R1 + R5 일경우 R1의 계산이 다 끝나야 R4를 계산할 수 있다.

 

2. 제어 위험: 프로그램 카운터의 갑작스러운 변화로 인해 발생하는 위험이다.

- 점프 명령어, 콜 명령어, 인터럽트 등

- 예를 들어 실행을 하다보니 점프로 인해 한참 뒤의 명령어를 먼저 실행해야하는 경우, 중간에 인출과 해석등의 과정을 거치고 있던 명령어들은 헛수고가 된다.

- 분기 예측이 필요하다.

 

3. 구조적 위험: 서로 다른 명령어가 같은 CPU부품(ALU, 레지스터)를 쓰려고 할 때를 말한다.

 

슈퍼스칼라

CPU 내부에 여러개의 명령어 파이프라인을 포함한 구조를 얘기한다. (오늘날의 멀티 프로세서)

 

- 이론상으로는 파이프라인 개수에 비례하여 처리속도가 증가할 듯 하나 파이프라인 위험도의 증가로 인해 비례하여 속도가 증가하는것은 아니다.

 

비순차적 명령어 처리

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

- 의존성이 없는 명령어의 순서를 바꾼다

* 전체 프로그램 실행 흐름에 영향이 없는 경우에만 가능하므로 아무 명령어나 순서를 바꿀 수 있는 것은 아니다.

 

# 혼자 공부하는 컴퓨터구조 + 운영체제 책을 공부하며 정리하였습니다.

728x90