[C.A] 명령어 병렬 처리

touhou09·2024년 11월 12일
0

컴퓨터 이론

목록 보기
8/47

CPU가 빠르게 동작하려면 hardware의 동작도 중요하지만 software적인 부분도 중요하다.

software에서는 명령어를 효과적으로 처리하기 위해 여러 기법을 사용하는데 이에는 ILP, 명령어 처리 파이프라인, 슈퍼스칼라, 비순차적 명령어 처리 등이 있다.

ILP(명령어 처리 파이프라인)

ILP를 이해하기 위해서는 하나의 명령어가 처리되는 전체 과정을 비슷한 시간 간격으로 나눠봐야한다.

  1. 명령어 인출
  2. 명령어 해석
  3. 명령어 실행
  4. 결과 저장

물론 이 순서가 항상 정답인 것은 아니다.

CPU는 각 단계가 겹치지 않는다는 가정 하에 각 단계를 동시에 실행할 수 있다.
예를들면 inst1, inst2에 대해서 inst1이 해석 단계에 있으면 inst2의 인출 단계를 실행할 수 있는 것이다.

이와 같이 명령어들을 순차적으로 처리할 수 있는 과정을 명령어 파이프라인이라고 부르며 이러한 기법을 instruction pipelining이라고 부른다.

pipelining은 높은 성능을 가져올 수 있지만 특정 상황에서는 성능 향상에 실패하는 경우도 있는데 이를 pipeline hazard라고 부르며, pipeline hazard에는 Data hazard, control hazard, structual hazard가 있다.

  • data hazard
    명령어 간 데이터 의존성에 의해 발생한다.
    모든 명령어를 동시에 처리할 수는 없는데, 어떤 명령어는 이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우가 있고 이러한 경우 데이터 의존적인 두 명령어를 무작정 동시에 실행하려고 한다면 그 pipeline이 제대로 작동하지 않는 것을 data hazard라고 부른다.

  • control hazard
    주로 분기에서 일어나는데 program counter의 갑작스러운 변화에 의해 발생한다.
    기본적으로 프로그램 카운터는 현재 실행 중인 명령어의 다음 주소로 갱신되는데 프로그램 실행 흐름이 바뀌면 명령어 파이프라인에 미리 가지고 와서 처리 중이었던 명령어들은 아무 쓸모가 없어지고 이를 control hazard라 한다.
    참고로 이를 예측하기위해 사용하는 기술 중 하나를 branch prediction이라 하고 이는 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술이다.

  • structural hazard
    명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, register 등과 같은 CPU 부품들을 사용하려고 할 때 발생한다.
    resource hazard라고 부르기도 한다.

슈퍼 스칼라

pipelining은 단일로도 구현 가능하지만, 오늘달 대부분의 CPU에서는 여러 개의 pipeline을 이용한다.
이처럼 CPU 내부에 여러 개의 명령어 pipeline을 포함한 구조를 superscalar라고 한다.

superscalar를 사용하는 CPU와 processor를 superscalar CPU, superscalar processor라고 하는데 이는 매 클럭 주기마다 동시에 여러 명령어를 인출, 실행할 수 있어야 한다.
가령 multithread processor는 한번에 여러 명령어를 인출, 해석, 실행하기 때문에 suberscalar 구조를 사용할 수 있다.

비 순차적 명령어 처리

OoOE는 명령어를 순차적으로 실행하지 않는 기법이다.
이전까지의 기법들은 모두 순차적 실행을 상정하고 진행하는 기법이었지만 pipeline hazard와 같은 경우 명령어가 곧바로 처리되지 못하기도 한다.

만약 서로 데이터 의존성이 전혀 없는 경우, 순서를 바꿔서 처리가능한 명령어인데 이를 바꿔서 실행하여 명령어 pipeline이 멈추는 것을 방지하는 기법을 비 순차적 명령어 처리 기법이라 한다.

profile
Engineer가 되기 위하여

0개의 댓글