[컴퓨터 구조] 명령어 병렬 처리 기법
CPU가 놀지 않고 시간을 알뜰하게 쓰며 작동하게 만드는 법
명령어 파이프라인 (Instruction Pipeline)
여러 개의 명령어가 동시에 처리되는 기술로, 하나의 명령어가 여러 단계의 처리 과정을 거치는 동안 다음 명령어의 처리 단계가 시작됩니다.
명령어 처리 과정
명령어 파이프라인은 일반적으로 다음과 같은 단계로 처리됩니다:
- 인출 (Fetch): 메모리에서 명령어를 인출합니다.
- 해독 (Decode): 명령어를 해독하여 실행에 필요한 정보를 추출합니다.
- 실행 (Execute): 명령어를 실행하고 연산을 수행합니다.
- 메모리 액세스 (Memory Access): 메모리에 접근하여 데이터를 읽거나 쓰는 작업을 수행합니다.
- 결과 저장 (Write Back): 실행 결과를 레지스터에 저장합니다.
파이프라인 위험 (Pipeline Hazards)
명령어 파이프라인을 사용할 때에는 파이프라인 위험이 발생할 수 있습니다. 아래는 파이프라인 위험과 관련된 간단한 표입니다
위험 종류 | 설명 |
---|---|
데이터 위험 | 명령어 간에 데이터 종속성이 있을 때 발생 |
제어 위험 | 분기 예측 실패로 인해 발생 |
구조적 위험 | 하드웨어 자원 충돌로 인해 발생 |
데이터 위험 (Data Hazard)
한 명령어가 다음 명령어의 실행에 영향을 미치는 상황을 의미합니다. 이는 종속성이 있는 명령어 간에 데이터 의존성이 발생할 때 발생합니다.
명령어 간의 데이터 의존성은 다음과 같은 상황에서 발생할 수 있습니다
- 쓰기-후-읽기 의존성 (Write-After-Read Dependency): 이전 명령어가 데이터를 쓴 후 다음 명령어에서 같은 데이터를 읽을 때 발생합니다.
- 쓰기-후-쓰기 의존성 (Write-After-Write Dependency): 이전 명령어가 데이터를 쓴 후 다음 명령어에서 같은 데이터를 다시 쓸 때 발생합니다.
- 읽기-후-쓰기 의존성 (Read-After-Write Dependency): 이전 명령어가 데이터를 쓴 후 다음 명령어에서 같은 데이터를 읽고 쓸 때 발생합니다.
제어 위험 (Control Hazard)
분기 명령어가 예측된 결과와 실제 실행 결과가 다를 때 발생합니다. 이로 인해 잘못된 명령어가 파이프라인에 들어갈 수 있습니다. 명령어의 실행 흐름이 변경되는 분기 명령어는 분기 예측을 통해 처리됩니다. 분기 예측 실패로 인해 잘못된 명령어가 실행되는 상황을 제어 위험이라고 합니다.
구조적 위험 (Structural Hazard)
하드웨어 자원이 충돌하여 파이프라인이 올바르게 작동하지 않는 상황을 의미합니다.
구조적 위험이 발생하는 상황에는 다음과 같은 예가 있습니다:
- 메모리 액세스 충돌: 메모리 액세스 동작이 겹치는 경우 발생합니다.
- 명령어 버퍼 충돌: 명령어가 동시에 처리되는 버퍼 충돌이 발생할 수 있습니다.
슈퍼스칼라 (Superscalar)
여러 개의 실행 유닛을 가지고 있는 프로세서로, 한 클럭 주기 내에서 여러 명령어를 동시에 실행할 수 있습니다. 슈퍼스칼라 프로세서는 여러 개의 파이프라인과 실행 유닛을 가지며, 각 파이프라인은 서로 다른 명령어를 동시에 처리합니다. 이로써 프로세서의 성능이 향상되며, 병렬 처리 작업에 효과적입니다.
비순차적 명령어 처리 (Out-of-Order Execution)
CPU 성능 향상에 크게 기여한 기법이자 대부분의 CPU가 차용하는 기법입니다.
명령어의 순서와는 상관없이 실행 가능한 명령어를 먼저 실행하는 기술로, 프로세서 성능을 향상시키는 데 도움이 됩니다.
댓글남기기