리버스 하이퍼 스레딩(Reverse Hyper-Threading)?

인텔은 '소프트웨어 정의 슈퍼코어(Software Defined Supercore)'(SDC)라는 기술을 특허 출원했습니다. 이 기술은 소프트웨어가 여러 코어의 기능을 융합하여 가상의 초대형 '슈퍼코어'를 구성할 수 있도록 함으로써, 충분한 병렬 작업이 이루어질 경우 싱글 스레드 성능을 향상시킬 수 있습니다. 이 기술이 설계 의도대로 구현된다면, 인텔의 차세대 CPU는 SDC를 활용할 수 있는 특정 애플리케이션에서 더욱 빠른 싱글 스레드 성능을 제공할 수 있을 것으로 기대됩니다. 다만, 현재로서는 아직 실현 여부가 불확실한 특허 단계의 기술입니다.
인텔의 소프트웨어 정의 슈퍼코어(SDC) 기술은 두 개 이상의 물리적 CPU 코어를 통합하여 단일 고성능 가상 코어처럼 작동하게 합니다. 이 방식은 단일 스레드의 명령어를 여러 개의 개별 블록으로 분할한 뒤, 이를 병렬로 실행하는 것을 핵심으로 합니다. 각 코어가 프로그램의 특정 부분을 전담하여 실행하는 동시에, 특화된 동기화 및 데이터 전송 명령어가 원래의 프로그램 순서(Program Order)를 정확히 유지하도록 보장합니다. 이를 통해 오버헤드를 최소화하면서 클럭당 명령어 수(IPC)를 극대화할 수 있습니다. 이 접근 방식은 전력 소비 및/또는 트랜지스터 예산 증가를 초래할 수 있는 넓고 단일화된 코어를 구축하거나 클럭 속도를 높이지 않으면서 싱글 스레드 성능을 향상시키는 것을 목표로 합니다.
현대의 x86 CPU 코어는 4~6개의 명령어를 디코드(decode)하고, 이 명령어들이 마이크로 오퍼레이션(micro-ops)으로 분해된 후 사이클당 8~9개의 마이크로 오퍼레이션을 실행하여 해당 프로세서의 최대 IPC 성능을 달성합니다. 이와 달리, 애플의 커스텀 Arm 기반 고성능 코어(예: Firestorm, Avalanche, Everest)는 최대 8개의 명령어를 사이클당 디코드할 수 있으며, 이상적인 조건에서는 사이클당 10개 이상의 명령어를 실행할 수 있습니다. 이러한 차이점 때문에 애플의 프로세서는 일반적으로 Arm 기반 경쟁 제품 대비 월등히 높은 싱글 스레드 성능과 낮은 전력 소비 효율을 제공하는 것으로 알려져 있습니다.
(별도의 소제목 없이 본문 흐름에 자연스럽게 통합)
기술적으로는 클럭당 최대 8개의 명령어를 디코드, 발행(issue), 폐기(retire)할 수 있는 8-way x86 CPU 코어(슈퍼스칼라 x86 프로세서)를 구축하는 것이 가능하지만, 실제로는 전면부 병목 현상(front-end bottlenecks) 및 막대한 전력/면적 비용 대비 성능 향상의 수확 체감(diminishing returns) 문제로 인해 상용화되지 못했습니다. 실제로 최신 x86 CPU조차도 일반적인 워크로드 환경에서는 소프트웨어에 따라 보통 2~4 수준의 지속적인 IPC를 기록하는 것이 일반적입니다. 따라서 인텔의 SDC는 8-way x86 코어를 직접 구축하는 대신, 상황에 따라 두 개 이상의 4-wide 유닛을 결합하여 하나의 대형 코어처럼 협력하도록 제안하는 것입니다.
하드웨어 관점에서 볼 때, SDC가 활성화된 시스템의 각 코어에는 페어링된 코어 간의 동기화, 레지스터 전송, 메모리 순서를 관리하는 작고 전용적인 하드웨어 모듈이 포함됩니다. 이 모듈들은 '웜홀 주소 공간(wormhole address space)'으로 알려진 예약 메모리 영역을 사용하여 라이브-인(live-in) 및 라이브-아웃(live-out) 데이터, 그리고 동기화 작업을 조율합니다. 이를 통해 별개의 코어에서 발생한 명령어들이 정확한 프로그램 순서에 따라 폐기됨을 보장합니다. 이러한 설계는 순서 실행(in-order) 코어와 비순서 실행(out-of-order) 코어를 모두 지원할 수 있어, 기존 실행 엔진에 최소한의 변경만 요구하며, 결과적으로 다이 공간(die space) 측면에서 컴팩트한 디자인이 가능합니다.
소프트웨어 관점에서는, 시스템이 JIT 컴파일러(JIT compiler), 정적 컴파일러(static compiler), 또는 바이너리 계측(binary instrumentation)을 활용하여 단일 스레드 프로그램을 여러 코드 세그먼트로 분할하고 각 블록을 다른 코어에 할당합니다. 이 과정에서 플로우 제어(flow control), 레지스터 전달(register passing), 동기화 동작(sync behavior)을 위한 특수 명령어를 주입하여 하드웨어의 실행 무결성(execution integrity)을 유지할 수 있도록 합니다. 운영체제(OS)의 지원은 매우 중요한데, OS가 런타임 조건에 따라 스레드를 '슈퍼 코어 모드(super-core mode)'로 전환하거나 빠져나오는 것을 동적으로 결정함으로써, 성능과 코어 가용성 사이의 최적의 균형을 맞추기 때문입니다.
인텔의 특허는 정확한 수치적 성능 향상 추정치를 제시하지는 않지만, 특정 사용 시나리오에서는 두 개의 '협소(narrow)' 코어 성능을 조합하는 것만으로도 높은 수준의 성능을 달성할 수 있음을 시사합니다.