Last update: @1/7/2023
•
명령어 병렬 처리 기법(ILP; Instruction-Level Parallelism)
: 명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시키는 기법
◦
명령어 처리 과정
▪
명령어 인출(Instruction Fetch)
▪
명령어 해석(Instruction Decode)
▪
명령어 실행(Execute Instruction)
▪
결과 저장(Write Back)
◦
종류
▪
명령어 파이프 라이닝(instruction piprlining
: 명령어들을 명렁어 파이프라인(instruction pipeline)에 넣고 동시에 처리하는 기법
•
CPU는 같은 단계가 겹치지 않는다면 각 명령어 처리 과정을 동시에 실행할 수 있음
•
파이프라인 위험(pipeline hazard)
: 성능 향상에 실패하는 특정 상황
◦
데이터 위험(data hazard)
: 한 명령어가 끝까지 실행돼야 다른 명령어가 실행될 수 있는 데이터 의존성에 있을 때, 이 두 명령어를 동시에 실행하려고 할 때 파이프라인이 제대로 작동하지 않는 것
◦
제어 위험(control hazard)
: 분기 등으로 인해 프로그램 카운터의 갑작스런 변화가 생겨서 명령어 파이프라인에 미리 가지고 와서 처리 중이었던 명령어들이 아무 쓸모가 없어지는 것
▪
분기 예측(branch prediction)
: 제어 위험을 피하기 위해 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술
◦
구조적 위험(structural hazrd = resource hazrd)
: 서로 다른 명령어가 동시에 ALU, 레지스터 등과 같은 CPU 부품을 사용하려고 할 때 발생
▪
슈퍼스칼라(superscalar)
: CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
•
슈퍼스칼라 프로세서(슈퍼스칼라 CPU)
: 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU. 멀티스레드 프로세서는 슈퍼스칼라 구조를 사용할 수 있음. 여러 개의 파이프라인을 이용하면 하나의 파이프라인을 사용할 때보다 데이터 위험, 제어 위험, 자원 위험을 피하기가 더욱 까다로워지기 때문에 고도로 설계되어야 함
▪
비순차적 명령어 처리(OoOE; Out-of-Order Execution)
: 명령어를 순차적으로 실행하지 않는 기법. 데이터 의존성이 전혀 없어서 순서를 바꿔 처리해도 수행 결과에 영향을 미치지 않는 명령어를 먼저 처리함