스레드 멀티플렉싱 (SMT/Hyper-Threading)
개요
동시 멀티스레딩(Simultaneous Multithreading, SMT)은 슈퍼스칼라 CPU의 전반적인 효율성을 개선하기 위한 하드웨어 기술이다. 이 기술은 하나의 물리적 코어에서 여러 개의 독립적인 스레드를 동시에 실행할 수 있게 하여, 프로세서가 제공하는 자원을 더 효과적으로 활용할 수 있게 한다. 인텔은 이 기술을 "하이퍼스레딩 기술(Hyper-Threading Technology, HTT)"이라고 부르며, AMD는 "SMT"라는 용어를 사용한다.
SMT는 현대 프로세서 아키텍처에서 중요한 병렬화 기술 중 하나로, 단일 코어 내에서 여러 스레드의 명령어를 동시에 파이프라인에 주입함으로써 자원 활용도를 높이고 처리량을 증가시킨다. 이 기술은 메모리 접근 지연 시간 등 고지연 작업 중 발생하는 파이프라인 스톨(stall)을 효과적으로 숨길 수 있어, 특히 멀티스레드 환경에서 뚜렷한 성능 향상을 제공한다. 다만 SMT의 이점은 평균 처리량 향상에 더 가깝고, 단일 스레드 지연 시간이나 tail latency를 항상 개선하는 것은 아니다.
핵심 개념
SMT의 동작 원리
SMT는 하나의 물리적 코어에 두 개 이상의 논리적 코어를 노출시켜, 여러 스레드가 동시에 실행될 수 있게 한다. 각 논리적 코어는 독립적인 레지스터 세트와 상태 정보를 가지며, 물리적 코어의 실행 자원(명령어 디코더, 실행 유닛, 캐시 등)을 공유한다.
이 기술의 핵심은 "동시"라는 점이다. 시간적 멀티스레딩(temporal multithreading)이 사이클마다 하나의 스레드만 실행하는 반면, SMT는 하나의 사이클 안에 여러 스레드로부터의 명령어를 동시에 실행할 수 있다. 이를 위해 SMT 프로세서는 여러 스레드의 명령어를 한 사이클에 여러 개 디코더하고 실행해야 하므로, 반드시 슈퍼스칼라 아키텍처를 기반으로 한다.
하이퍼스레딩 vs SMT
하이퍼스레딩은 인텔이 자사 프로세서에 구현한 SMT 기술의 상용 명칭이다. 기본적으로 2-way SMT를 구현하며, 동일한 물리적 코어에서 두 개의 논리적 코어를 동시에 운영할 수 있게 한다. AMD의 Zen 마이크로아키텍처 계열도 2-way SMT를 지원하며, IBM POWER 프로세서는 최대 8-way SMT(SMT8)를 지원하기도 한다.
자원 공유와 분리
SMT 환경에서 두 스레드는 여러 자원을 공유한다:
- 공유 자원: L1/L2 캐시, 분기 예측기, 실행 유닛(FPU, ALU), 메모리 제어기
- 분리 자원: 레지스터 파일, 프로그램 카운터, 명령어 디코더 출력
공유 자원에 대한 경쟁은 SMT의 성능에 중요한 영향을 미친다. 한 스레드가 자원을 독점하면 다른 스레드의 성능이 저하될 수 있으므로, 현대 프로세서들은 정적 분할, 경쟁적 공유, 워터마크 기반 공유 등의 전략을 사용하여 공정성을 유지한다.
운영 체제 스케줄링과 코어 배치
SMT 코어는 운영 체제에 여러 논리 CPU로 보이지만, 실제로는 같은 물리 코어의 프런트엔드, 실행 유닛, 캐시 일부를 공유한다. 따라서 스케줄러가 두 개의 무거운 스레드를 같은 SMT 형제(sibling)에 먼저 배치하면 처리량이 오히려 떨어질 수 있다. 현대 운영 체제는 보통 먼저 다른 물리 코어를 채우고, 이후에 SMT 형제를 활용하는 배치 정책을 택해 단일 스레드 응답성과 전체 처리량의 균형을 맞춘다.
처리량과 격리의 트레이드오프
SMT는 같은 코어 안에서 두 스레드가 미사용 슬롯을 나눠 쓰게 해 throughput을 끌어올리지만, 그 대가로 성능 격리와 보안 격리는 약해진다. 캐시, TLB, 분기 예측기, 실행 포트 공유는 side channel 완화 비용을 늘릴 수 있으며, 일부 클라우드나 보안 민감 시스템은 이런 이유로 SMT를 BIOS 또는 커널 레벨에서 비활성화하기도 한다.
비교/분석
멀티스레딩 기술 비교
| 기술 | 설명 | 장점 | 단점 |
|---|---|---|---|
| 시간적 멀티스레딩 | 사이클마다 하나의 스레드만 실행 | 구조 단순, 자원 충돌 최소 | 자원 활용도 낮음 |
| 동시 멀티스레딩 (SMT) | 사이클마다 여러 스레드 동시 실행 | 높은 자원 활용도, 처리량 증가 | 구조 복잡, 자원 경쟁 |
| 칩 수준 멀티코어 (CMP) | 독립적인 여러 코어 통합 | 진정한 병렬 실행, 완전한 자원 분리 | 다이 면적 증가, 전력 소비 |
상용 프로세서의 SMT 구현 비교
| 프로세서 | SMT 유형 | 스레드 수 | 특징 |
|---|---|---|---|
| Intel Pentium 4 (NetBurst) | HTT | 2 | 최초의 상용 SMT 데스크톱 프로세서 |
| Intel Core 계열 | HTT | 2 | 네할렘부터 재도입 |
| Intel Xeon Phi | HTT | 4 | 하드웨어 기반 스레드, 비활성화 불가 |
| AMD Zen 계열 | SMT | 2 | 경쟁적 자원 공유 |
| IBM POWER8 | SMT | 8 | 최대 8개 스레드 동시 실행 |
| IBM z13 | SMT | 2 | 메인프레임용 |
성능 영향 요인
SMT의 성능 향상은 다음과 같은 요인에 의해 달라진다:
- 응용 프로그램 유형: 멀티스레드 응용 프로그램은 큰 향상, 단일 스레드 응용 프로그램은 제한적
- 자원 경쟁: 메모리 대역폭, 캐시 용량, 실행 유닛 사용률
- 파이프라인 깊이: 깊은 파이프라인일수록 스트롤 숨김 효과 큼
- 스케줄링 전략: 운영 체제의 스레드 스케줄링 품질
서로 다른 실행 자원을 쓰는 스레드 조합은 SMT 효율이 높다. 예를 들어 한 스레드가 메모리 지연에 자주 막히고 다른 스레드가 정수 연산 위주라면 동일 코어에서 상호 보완이 일어날 수 있다. 반대로 둘 다 동일한 포트, 동일한 캐시 계층, 동일한 메모리 대역폭을 강하게 요구하면 SMT 이득이 줄거나 음수로 돌아설 수 있다.
동작 원리
명령어 흐름
SMT 프로세서에서 명령어는 다음과 같이 흐른다:
- 명령어 페치 단계: 여러 스레드의 명령어를 한 사이클에 여러 개 페치
- 디코딩 단계: 각 스레드의 명령어를 독립적으로 디코딩
- 이슈 단계: 여러 스레드의 명령어를 동시에 실행 유닛에 이슈
- 실행 단계: 명령어를 실행하고 결과를 각 스레드의 레지스터에 기록
- 완료 단계: 각 스레드의 상태를 업데이트
레지스터 파일 확장
SMT를 구현하기 위해 프로세서는 여러 스레드의 상태를 저장할 수 있는 확장된 레지스터 파일이 필요하다. 2-way SMT의 경우, 일반적으로 물리적 레지스터 파일의 용량을 두 배로 늘려 각 스레드의 레지스터 값을 독립적으로 저장한다.
자원 관리 전략
현대 SMT 프로세서들은 다양한 자원 관리 전략을 사용한다:
- 정적 분할: 자원을 미리 스레드 수만큼 균등 분할. 단순하지만 자원 활용도 낮음
- 경쟁적 공유: 모든 스레드가 자원을 경쟁적으로 사용. 높은 활용도가 가능하지만 공정성 문제
- 워터마크 기반 공유: 하한선(워터마크)을 설정하여 최소 자원 보장. 정적 분할과 경쟁적 공유의 장점 결합
실제 구현에서는 프런트엔드 큐, 리오더 버퍼(ROB), 로드/스토어 큐, 물리 레지스터 파일, 캐시 MSHR 같은 자원을 완전히 동일하게 나누지 않고, 일부는 hard partition으로 보장하고 일부는 demand-driven 방식으로 경쟁시킨다. 이 때문에 같은 2-way SMT라도 마이크로아키텍처별로 성능 편차가 크다.
장단점
장점
- 자원 활용도 향상: 파이프라인 유휴 시간을 줄여 전체 자원 활용도 증가
- 처리량 증가: 단일 코어에서 동시에 처리할 수 있는 작업량 증가
- 지연 시간 숨김: 메모리 접근 등 고지연 작업 중 다른 스레드를 실행하여 지연 시간 효과적 숨김
- 전력 효율: 추가적인 코어 없이 성능 향상 가능으로 전력 대비 성능비 우수
- 캐시 활용 개선: 여러 스레드가 캐시를 공유하여 캐시 적중률 향상 가능
단점
- 자원 경쟁: 공유 자원에 대한 경쟁으로 인한 성능 저하 가능성
- 보안 취약점: 캐시 타이밍 공격(TLBleed 등)과 같은 보안 위협
- 소프트웨어 복잡성: 응용 프로그램이 SMT에 최적화되지 않으면 성능 저하 가능
- 설계 복잡성 증가: 프로세서 설계가 복잡해지고 다이 면적 증가
- 불균등 성능 향상: 응용 프로그램에 따라 성능 편차가 클 수 있음
관련 기술
참고 문헌/논문
- Tullsen, D.M.; Eggers, S.J.; Levy, H.M. (1995). "Simultaneous multithreading: Maximizing on-chip parallelism". 22nd Annual International Symposium on Computer Architecture. IEEE. pp. 392–403.
- Marr, D. et al. (2002). "Hyper-Threading Technology Architecture and Microarchitecture". Intel Technology Journal. 6(1).
- AMD (2025). "NO COMPROMISE: DRIVING SERVER PERFORMANCE AND EFFICIENCY WITH AMD EPYC™ AND SMT". Technical Brief.
- Esmaeilzadeh, H. et al. (2011). "Looking back on the language and hardware revolutions: measured power, performance, and scaling". ASPLOS XVI.
- Percival, C. (2005). "Cache Missing for Fun and Profit". BSDCan 2005.
관련 문서
주요 용어 정의
- SMT (Simultaneous Multithreading): 동시 멀티스레딩. 하나의 코어에서 여러 스레드를 동시에 실행하는 기술
- HTT (Hyper-Threading Technology): 인텔의 SMT 구현 기술 명칭
- TLP (Thread-Level Parallelism): 스레드 수준 병렬화
- ILP (Instruction-Level Parallelism): 명령어 수준 병렬화
- 파이프라인 스트롤: 명령어 파이프라인에서 데이터 의존성 등으로 인한 대기 상태
핵심 정리
동시 멀티스레딩(SMT/하이퍼스레딩)은 현대 프로세서의 핵심 성능 향상 기술로, 물리적 코어 하나에서 여러 논리적 코어를 운영하여 자원 활용도와 처리량을 높인다. 이 기술은 파이프라인 유휴 시간을 효과적으로 활용하여 메모리 지연 시간 등 고지연 작업을 숨길 수 있지만, 공유 자원 경쟁과 보안 취약점이라는 과제를 안고 있다. 인텔, AMD, IBM 등 주요 프로세서 제조사들은 각각 다른 방식으로 SMT를 구현하고 있으며, 현대 프로세서 설계에서 필수적인 기술로 자리잡았다.