슈퍼스칼라 프로세서

Superscalar processor
단순한 슈퍼스케어 파이프라인.한 번에 두 개의 명령을 가져오고 디스패치하면 사이클당 최대 두 개의 명령을 완료할 수 있습니다.(IF = 명령 가져오기, ID = 명령 디코드, EX = 실행, MEM = 메모리 액세스, WB = 라이트백 레지스터, i = 명령 번호, t = 클럭 사이클 [즉, 시간])
4개의 슈퍼칼라 Alpha 21164 프로세서를 탑재한 CRAY T3e 슈퍼컴퓨터 프로세서 보드

슈퍼스칼라 프로세서는 단일 프로세서 내에서 명령 수준 병렬이라고 불리는 병렬 처리 형태를 구현하는 CPU입니다.클럭 사이클당 최대 1개의 명령어를 실행할 수 있는 스칼라 프로세서와 달리 슈퍼스칼라 프로세서는 프로세서 상의 다른 실행 유닛에 복수의 명령어를 동시에 디스패치함으로써 클럭 사이클 중에 복수의 명령어를 실행할 수 있다.따라서 특정 클럭환율로 가능한 것보다 더 많은 throughput(시간 단위로 실행할 수 있는 명령의 수)을 허용합니다.각 실행 유닛은 개별 프로세서(또는 프로세서가 멀티코어 프로세서인 경우 코어)가 아니라 연산 로직 유닛과 같은 단일 CPU 내의 실행 리소스입니다.

Flynn의 분류법에 따르면, 싱글 코어 슈퍼칼라 프로세서는 SISD 프로세서(단일 명령 스트림, 단일 데이터 스트림)로 분류되지만, 짧은 벡터 연산을 지원하는 싱글 코어 슈퍼칼라 프로세서는 SIMD(단일 명령 스트림, 다중 데이터 스트림)로 분류될 수 있습니다.멀티코어 슈퍼스칼라 프로세서는 MIMD 프로세서(복수의 명령 스트림, 복수의 데이터 스트림)로 분류된다.

슈퍼스칼라 CPU도 일반적으로 파이프라인 처리되지만 슈퍼스칼라 실행과 파이프라인 처리 실행은 다른 성능 향상 기술로 간주됩니다.전자는 복수의 실행 유닛을 사용하여 복수의 명령을 병렬로 실행하는 반면 후자는 실행 유닛을 다른 단계로 분할하여 동일한 실행 유닛에서 복수의 명령을 병렬로 실행한다.

슈퍼스칼라 기법은 일반적으로 (특정 CPU 내에서) 다음과 같은 특성을 식별하는 것과 관련되어 있습니다.

  • 명령은 순차적 명령 스트림에서 발행됩니다.
  • CPU는 실행 시 명령 간의 데이터 의존성을 동적으로 체크합니다(컴파일소프트웨어 체크와 비교).
  • CPU는 클럭 사이클당 여러 명령을 실행할 수 있습니다.

역사

1964년부터 시모어 크레이의 CDC 6600은 최초의 슈퍼스케일러 디자인으로 자주 언급된다.1967년형 IBM System/360 Model 91은 또 다른 슈퍼스케일러 메인프레임이었습니다.Motorola MC88100(1988년), Intel i960CA(1989년) 및 AMD 29000 시리즈 29050(1990년) 마이크로프로세서는 최초의 상용 싱글칩 슈퍼스케일러 마이크로프로세서입니다.와 같은 RISC 마이크로프로세서는 슈퍼스칼라 실행을 최초로 실시했습니다.이는 RISC 아키텍처가 복수의 실행 유닛을 포함할 수 있는 트랜지스터와 다이 영역을 해방했기 때문입니다(이것이 RISC 설계가 1980년대 및 1990년대에 CISC 설계보다 빨랐던 이유입니다).

저전력 애플리케이션, 임베디드 시스템 및 배터리 구동 장치에 사용되는 CPU를 제외하고 기본적으로 1998년 이후 개발된 모든 범용 CPU는 슈퍼칼라입니다.

P5 Pentium은 최초의 슈퍼스칼라 x86 프로세서입니다.Nx586, P6 Pentium Pro 및 AMD K5는 슈퍼스칼라 마이크로아키텍처 상에서 실제로 실행되기 전에 비동기적으로 x86 명령어를 마이크로코드와 같은 다이내믹한 시퀀스로 디코딩하는 최초의 설계 중 하나입니다.이것에 의해 버퍼링된 부분 명령과 AMD의 동적 스케줄링이 가능하게 되었습니다.단순한 P5 Pentium에서 사용되는 보다 견고한 방법과 비교하여 더 많은 병렬 처리를 추출할 수 있게 해주었습니다.또한 투기적 실행이 단순해졌으며 고급 Cyrix 6x86 등의 설계에 비해 더 높은 클럭 주파수를 사용할 수 있게 되었습니다.

스칼라에서 슈퍼스칼라로

가장 단순한 프로세서는 스칼라 프로세서입니다.스칼라 프로세서에 의해 실행되는 각 명령은 일반적으로 한 번에 하나 또는 두 개의 데이터 항목을 조작합니다.반면 벡터 프로세서에 의해 실행되는 각 명령은 많은 데이터 항목에서 동시에 동작한다.유추는 스칼라 산술과 벡터 산술의 차이이다.슈퍼스칼라 프로세서는 이 두 가지를 혼합한 것입니다.각 명령은 하나의 데이터 항목을 처리하지만 각 CPU 내에 여러 실행 유닛이 있기 때문에 여러 명령이 동시에 별도의 데이터 항목을 처리할 수 있다.

슈퍼스칼라 CPU 설계는 명령 디스패처의 정확성을 향상시키고 여러 실행 유닛을 항상 사용할 수 있도록 하는 것을 강조합니다.이는 유닛 수가 증가함에 따라 더욱 중요해지고 있습니다.초기 슈퍼스칼라 CPU는 2개의 ALU와 1개의 FPU를 갖추고 있었지만 Power와 같은 최신 설계PC 970에는 4개의 ALU, 2개의 FPU 및 2개의 SIMD 유닛이 포함되어 있습니다.디스패처가 이들 유닛을 모두 지시와 함께 유지하는 데 비효율적일 경우 시스템의 성능은 보다 단순하고 저렴한 설계와 다를 바 없습니다.

슈퍼스칼라 프로세서는 보통 머신 사이클당 1명 이상의 실행률을 유지합니다.그러나 파이프라인, 멀티프로세서 또는 멀티코어 아키텍처도 이를 실현하기 때문에 단순히 여러 명령을 동시에 처리하는 것만으로는 아키텍처가 슈퍼스케일러가 되지 않습니다.

슈퍼스칼라 CPU에서 디스패처는 메모리로부터 명령을 읽어 병렬로 실행할 수 있는 명령어를 결정하고, 각 명령어를 단일 CPU 내에 포함된 여러 실행 유닛 중 하나에 디스패치한다.따라서 슈퍼스칼라 프로세서는 각각 단일 명령 스레드에서 명령을 동시에 처리하는 다중 병렬 파이프라인을 갖는 것을 상정할 수 있다.

제한 사항

슈퍼스케일러 기술을 통한 성능 향상은 다음 세 가지 주요 영역으로 제한됩니다.

  • 명령 스트림의 고유 병렬 정도(CPU에서 동일한 계산 리소스가 필요한 명령)
  • 의존관계 체크 로직과 레지스터 이름 변경 회로의 복잡성과 시간 비용
  • 지점 명령 처리

기존의 바이너리 실행 가능 프로그램에는 다양한 수준의 고유한 병렬화가 있습니다.경우에 따라 명령이 서로 종속되지 않고 동시에 실행될 수 있습니다.다른 경우에는 상호의존적이기도 합니다.즉, 하나의 명령이 다른 명령의 자원이나 결과에 영향을 줍니다.순서a = b + c; d = e + f다른 계산에 의존하는 결과가 없기 때문에 병렬로 실행할 수 있습니다.단, 설명서는a = b + c; b = e + f는 유닛을 이동하는 동안 명령이 완료되는 순서에 따라 병렬로 실행되지 않을 수 있습니다.

명령 스트림에는 명령 간 종속성이 포함되지 않을 수 있지만 슈퍼스케어 CPU는 그 가능성을 확인해야 합니다.그렇게 하지 않으면 보증은 없고 종속성을 검출하지 못할 경우 잘못된 결과가 생성되기 때문입니다.

반도체 공정의 진보나 스위칭 속도가 아무리 빨라도 동시에 명령어를 몇 개나 보낼 수 있는지에 대한 실질적인 제한이 있습니다.프로세스의 진보로 인해 실행 유닛(예를 들어 ALU)의 수가 증가하지만, 명령 의존성을 검사하는 부담은 급속히 증가하고, 레지스터의 이름을 바꿔 일부 의존성을 완화해야 하는 복잡성도 증가합니다.전력 소비량, 복잡성 및 게이트 지연 비용은 달성 가능한 슈퍼스케일러 속도 향상을 제한합니다.

그러나 기존의 슈퍼스케일러 CPU에서 무한히 빠른 의존성 체크 로직이 주어지더라도 명령 스트림 자체가 많은 의존성을 가지고 있다면 가능한 속도 향상도 제한할 수 있습니다.따라서 코드 스트림의 본질적인 병렬화의 정도는 두 번째 한계를 형성합니다.

대체 수단

이러한 제한은 전체적으로 매우 긴 명령어(VLIW), 명시적 병렬 명령 컴퓨팅(EPIC), 동시 멀티스레딩(SMT), 멀티코어 컴퓨팅 등의 대체 아키텍처 변경에 대한 조사를 촉진합니다.

VLIW를 사용하면 실행 시 하드웨어 로직에 의한 의존성 체크라는 부하가 높은 작업을 제거하고 컴파일러에 위임할 수 있습니다.EPIC(Explicitly Parallel Instruction Computing)는 추가 캐시 프리페치 명령이 있는 VLIW와 같습니다.

동시 멀티스레딩(SMT)은 슈퍼스칼라 프로세서의 전체적인 효율을 향상시키는 기술입니다.시만텍을 통해 여러 개의 독립적인 실행 스레드가 최신 프로세서 아키텍처에서 제공하는 리소스를 더 잘 활용할 수 있습니다.

슈퍼스칼라 프로세서는 여러 실행 유닛이 전체 프로세서가 아니라는 점에서 멀티코어 프로세서와 다릅니다.단일 프로세서는 ALU, 정수승수, 정수시프터, FPU 등의 세분화된 실행 유닛으로 구성된다.여러 명령을 병렬로 실행할 수 있도록 각 실행 유닛의 버전이 여러 개 있을 수 있습니다.이것은, 복수의 스레드로부터의 명령을 동시에 처리하는 멀티 코어 프로세서( 「코어」라고 불린다)와는 다릅니다.또한 파이프라인 프로세서와도 다릅니다.이 프로세서에서는 여러 명령이 동시에 다양한 실행 단계, 조립 라인 방식으로 실행될 수 있습니다.

다양한 대체 기술은 상호 배타적이지 않습니다.단일 프로세서로 조합할 수 있습니다(대부분 조합할 수 있습니다).따라서 멀티코어 CPU는 각 코어가 복수의 병렬 파이프라인을 포함하는 독립된 프로세서이며 각 파이프라인이 슈퍼스케일러인 경우에 가능합니다.일부 프로세서에는 벡터 기능도 포함되어 있습니다.

「 」를 참조해 주세요.

레퍼런스

  • Mike Johnson, Superscalar Microprocessor Design, Frentice-Hall, 1991년 ISBN0-13-875634-1
  • Sorin Cotofana, Stamatis Vassiliadis, "슈퍼스칼라 머신의 문제 로직 설계 복잡성에 대하여", EUROMICRO 1998: 10277-10284
  • Steven McGeady, "80960 아키텍처의 i960CA SuperScalar 구현", IEEE 1990, 페이지 232–240
  • Steven McGeady, et al., "Supercalar i960M Embedded Microprocessor의 성능 향상", ACM Proceedings on the 1991 Computer Architecture (Compcon), 1991, 페이지 4-7

외부 링크