수퍼스칼라

3. 병렬화를 통한 성능 향상 - 파이프라인 에서는
fetch-execute cycle 의 병렬화 하는 과정을 보았다.
이번에는 코드를 병렬로 처리해서 컴퓨터의 처리 속도를 올려주는 방법에 대해 알아본다.

수퍼스칼라 컴퓨터

정의

  • 하나의 칩에 여러 개의 ALU 를 탑재해서, 코드를 병렬로 처리할 수 있는 컴퓨터.
    • 반도체의 집적도가 높아짐에 따라
      하나의 칩에 집적될 수 있는 트랜지스터의 수가 기하급수적으로 증가.
    • 이로 인해 하나의 칩에 여러 ALU 를 탑재하여 동시에 1개 이상의 스칼라 연산(정수 연산) 가능.
  • 2개 이상의 ALU 를 가지고 있기 때문에 2개 이상의 정수 연산을 병렬적으로 실행 가능하다.
    • n-way 수퍼스칼라 라고도 한다.

n-way 2-Way 수퍼스칼라

  • n 개의 ALU 는 레지스터 파일을 공유한다.
  • 그림을 보면 n-way 와 관계없이 메인메모리에는 코드, 명령어, 결과 스트림이 1개씩만 존재한다.


디스패치( dispatch )

  • 2 개 이상의 명령어가 병렬로 처리도리 수 있는지 판단하는 과정.

dispather 2-way 수퍼스칼라의 파이프라인

기존의 파이프라인 디코드가 디코드/디스패치로 변경.

  • 이전 디코드 단계에서 2개 이상의 명령어가 병렬로 처리될 수 있는지 판단하는 과정이 추가됨.
    • 디코드와 디스코드 두 과정이 1클럭 안에 처리할 수 있으므로 하나의 스테이지로 표기.
  • 만약 2개 이상의 명령어가 병렬로 수행될 수 있다고 판단되면,
    디스패치 유닛은 각 명령어를 서로 다른 ALU 에서 병렬로 처리되도록 한다.
    • 아닌 경우에는 2개의 명령어가 본래 명령어 순서대로 순차 처리.
  • 병렬 처리를 하게 되더라도( 내부적인 프로세서의 구성이 완전히 달라지더라도 )
    프로그래머는 동일한 인터페이스를 사용해서 프로그램을 작성.
    • 수퍼스칼라 CPU 역시 순차 수행 모델을 철저히 준수해야 한다.

수퍼스칼라 수행과 IPC

  • 수퍼스칼라 컴퓨터를 사용하면 클럭당 1개 이상의 명령어를 완료할 수 있다.
    • 기존 파이프라인 프로세서에서 이론상 최대 명령어 산출량은 클럭당 1개.
  • n-웨이 수퍼스칼라의 경우 이론상 클럭당 n개의 명령어를 완료할 수 있다.

super-scalar-pipeline 2-way 수퍼스칼라의 프로세서의 파이프라인

  • 프로세서가 n개의 명령어를 동시에 수행하기 위해서는,
    n개의 명령어를 한꺼번에 페치하고 디코드 할 수 있어야 한다.
    • ex) 명령어의 크기가 2바이트일때
      1. 2-way 수퍼스칼라 프로세서는 매 클럭 사이클마다 2개의 명령어를 메모리에서 페치해온다.
      2. 2개의 명령어를 디코드, 디스패치 한다.
      3. 프로그램 카운터를 4바이트 증가시킨다.
  • 그러면 n-way 수퍼스칼라는 항상 성능을 향상시킬까?
    이에 대해서는 아래 병렬처리와 해저드에서 다룬다.


파이프라인 및 수퍼스칼라 설계에 따른 변화

  • 두 명령어가 동시에 병렬적으로 수행되지 못한 경우 이런 조건을 해저드라고 한다.


다음 주제

[인사이드 머신] 캐시와 분기예측을 이용한 성능 향상


부록 - 수퍼스칼라의 수행 유닛

수행유닛( execution unit )

- 프로세서의 백엔드에 있는 하드웨어.
- 특정 형태의 명령어를 실제로 수행하는 하드웨어.

기본적인 숫자 포맷과 산술 연산

  • 현대 마이크로프로세서가 처리하는 숫자의 종류는 크게 다음과 같다
    • 정수( fixed point, 고정 소수점 )
      • 정수 관련 산술, 논리 연산들은 마이크로프로세서에서 가장 빨리 처리할 수 있는 단순한 연산들이다.
    • 부동소수점( floating point )
      • 유리수를 십진수로 나타낸 것.
      • 부동소수점 수로 나타낼 수 있는 수의 정확도는 제한되어 있음.
        • 많은 경우 부동소수점 표현은 실제값의 근사치.
      • 정수 연산에 비해 복잡하고 느리다.
  • 정수와 부동소수점 수는 각각 다시 벡터와 스칼라로 나뉨.
    • Scalar - Scalar
      • 하나의 수만을 가진 형태.
    • Vector - 벡터
      • 순열이나 배열에서 자주 볼 수 있는 여러 숫자가 합쳐진 형태
  • 데이터는 위의 4가지 형태( 정수 스칼라, 부동소수 스칼라, 정수 벡터, 부동 소수 벡터 )로 나눌 수 있다.
    • 코드는 위의 4가지 형태를 처리하는 명령어들로 나눌 수 있다.
    • 4종류의 데이터 연산은 산술 연산과 논리 연산으로 나눌 수 있다.
      • 산술 연산
        • 덧셈, 뺄셈, 곳셈, 나눗셈과 같이 숫자들에 관해서 수행되는 연산
      • 논리 연산
        • AND, OR, NOT, XOR 그리고 비트 쉬프트와 같은 연산들.
        • 이 연산들은 정수 스칼라, 정수 벡터, 특수 레지스터( PSW ) 에 적용된다.

type 숫자 형식과 연산 현태 분류


산술 논리 유닛

  • 마이크로프로세서 초기에는 모든 산술 연산과 논리 연산이 1 개의 ALU 에 의해서 처리되었다.
  • 부동소수점 연산은 산술 보조 처리기( arithmetic coprocesser ) 라고 하는 별도의 칩에서 처리되었지만,
    시간이 지남에 따라 부동 소수연산 부분은 CPU 의 수행 유닛으로 통합되었다.

pentium 부동소수점 유닛이 추가된 컴퓨터


  • 일반적으로 ALU 는 모든 데이터 타입을 처리하는 수행유닛이고,
    특정 형태의 명령어를 처리하는 ALU 를 나타낼 때는 별도의 이름을 사용한다.
    • 정수 수행 유닛 ( IU : Integer Unit )
      • SIU ( Simple IU ), CIU ( Complex IU )
    • 부동소수점 수행 유닛 ( FPU : Floating Point Unit )

메모리 접근 유닛

  • 로드 스토어 유닛 ( LSU : Load Store Unit )
    • 메모리 주소 생성과 로드와 스토어 명령어 처리를 담당.
    • 보통 LSU 에는 메모리 주소를 빠르게 계산할 수 있도록 별도의 정수 가산기가 있다.
      • 메모리 주소는 정수이므로.
  • 분기 수행 유닛 ( BEU : Branch Execution Unit )
    • 조건 분기와 무조건 분기를 담당.
    • 대부분 BEU 역시 주소 생성 유닛을 가지고 있다.

한 개의 집적 회로에 편성되어 있는 소자의 수.
소수점의 위치가 물에 떠다니는 것 처럼 고정되어 있지 않다는 뜻.