본문 바로가기
CS/컴퓨터 구조

명령어 병렬 처리 기법 [혼공컴구]

by 블로블로글 2023. 11. 22.

1. 명령어 파이프 라인

  - 명령어 처리 과정 (클럭 단위)

    1. 명령어 인출 (Instruction Fetch)

    2. 명령어 해석 (Instruction Decode)

    3. 명령어 실행 (Execute Instruction)

    4. 결과 저장 (Write Back)

  - 단계가 겹치지 않는 경우에 CPU는 각 단계를 동시에 실행 가능하다.

  - 위의 각 단계에서 명령어1이 해석 단계에 들어갔다면, 인출 단계가 비게되는데 이때 명령어2가 인출단계에 들어가는 식으로 처리

  - 따라서 파이프라이닝을 사용하면 명령어1 이후의 명령어2, 3, ... 부터는 실행까지 1클럭 주기만 필요하게 됨

  - 이와같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 것을 명령어 파이프 라이닝이라고 함

 

2. 파이프 라인 위험

  2-1. 데이터 위험

    - 명령어 간 데이터 의존성에 의해 발생

    - 데이터 의존적인 두 명령어를 무작정 동시에 실행하려하면 파이프 라인이 제대로 동작하지 않음

  2-2. 제어 위험

    - 분기 등에 의한 프로그램 카운터의 갑작스러운 변화에 의해 발생

    - 기본적으로 프로그램 카운터는 현재 실행 중인 명령어의 다음 주소로 갱신됨

    - 하지만 프로그램의 실행 흐름이 바뀌어 미리 가져와서 처리 중이던 명령어들이 쓸모 없어지는 경우

    - 분기 예측

      - 프로그램이 어디로 분기할지 미리 예측한 후 그 주소를 인출하는 기술

  2-3. 구조적 위험

    - 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU나 CPU 부품을 사용하려고 할 때 발생

    - 자원 위험이라고도 부름

 

3. 슈퍼스칼라

  - CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조

  - 명령어 파이프 라인을 여러개 둠

  - 슈퍼스칼라 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서 또는 슈퍼스칼라 CPU라고 함

  - 슈퍼스칼라 프로세서는 이론적으로 파이프라인 개수에 비례하여 프로그램 처리 속도가 빨라짐

    - 불가능한 이유

      - 여러 개의 파이프라인을 이용하면 하나의 파이프라인을 사용할 때보다 데이터 위험, 제어 위험, 자원 위험을 피하기가 어려움

 

4. 비순차적 명령어 처리

  - OoOE로 줄여 부름

  - 명령어를 순차적으로 실행하지 않는 기법

  - 명령어의 합법적 새치기

  - 의존성이 없는 등의 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법

  - 의존성이 없기 때문에 순서를 바꿔도 프로그램 실행 흐름에는 전혀 문제가 없음