SMT

 


'''Simultaneous Multi-Threading'''
[image]
성능 참고하는 데 좋은 벤치마크. 아카이브
1. 개요
2. 스레드와 멀티스레딩
2.1. 멀티스레딩의 종류
3. SMT의 원리
3.1. 2000년대 이전의 SMT
3.2. 2000년대 이후의 SMT
4. 역사 및 사용 현황
4.1. 2000년대 이전
4.2. 2000년대 이후
5. 주의 사항
6. 보안 취약점
7. 관련 문서


1. 개요


SMT는 Simultaneous Multi-Threading('''동시 멀티스레딩''')의 약자로, 말 그대로 여러 개의 스레드들이 동시에 동작하는 멀티스레딩이다.
학계나 업계에서는 이미 1960년대 IBM의 ACS-360 프로젝트 시절부터 이 용어로 사용되고 있었으나, 2000년대 이후 인텔의 '하이퍼스레딩'이라는 상표명이 발표되면서 일반 사용자들에게는 하이퍼스레딩으로 더 많이 알려져 있다.

2. 스레드와 멀티스레딩


SMT를 이해하려면 스레드(Thread)와 멀티스레딩(Multi-Threading)부터 이해해야 이 문서의 내용을 이해할 수 있다.
프로그램이 실행할 때, 빠른 데이터 처리를 위해 스토리지에 저장된 프로그램의 일부가 메모리에 상주하게 되는데 실행 중인 프로그램을 프로세스라고 부른다. 과거에는 프로세스가 곧 작업의 단위로 동작했으나 하드웨어의 자원 소모량이 많다보니 작업 전환에 필요한 컨텍스트 스위치의 오버헤드가 너무 커서 비효율적인 문제가 발생하게 되었는데, 이 문제를 해결하기 위해 프로세스를 여러 개의 '스레드'라는 작은 단위들로 쪼개서 동작하여 오버헤드를 줄이고 효율성이 개선되었다.
스레드는 일의 처리 흐름 단위이며 스레드가 여러 개이므로 '멀티스레드' 또는 다중스레드라고 부르며, 이러한 작업으로 수행하는 동작이 '멀티스레딩'이다. 1950년대부터 이러한 개념이 정립되었으며, 수 십년이 지난 지금도 '작업의 최소 처리 단위'를 스레드 단위로 취급하고 있다. 참고로 컴퓨터에서의 작업은 여러 명령어(Instruction)들로 구성되며, 명령어의 실행은 사이클(클럭) 단위로 처리한다. 이에 대한 자세한 내용은 CPU, 마이크로아키텍처, 파이프라인, 슈퍼스칼라 문서 참조.
사람으로 따지면 덩치 큰 한 사람(프로세스)이 제대로 일 하려면 식량을 많이 제공해줘야 하고 여러 작업들을 감당하려면 메모해야 할 분량이 많지만, 덩치 작은 여러 사람(스레드)들은 덩치가 작은 대신 식량을 많이 제공할 필요 없고 여려 명이라 개인당 메모해야 할 분량도 적으면서 협업할 수 있는 것과 비슷한 관계라고 보면 된다.
강력한 효율성으로 작업의 최소 처리 단위로써 정착되어 있지만, 여러 작업 주체들이 분담해서 처리하기 때문에 하나의 작업 주체일 때보다 흐름을 추적하기 어려우므로 소프트웨어 개발자프로그래머가 이를 주의하면서 프로그래밍해야 한다는 단점이 있다. 잘못하면 레이스 컨디션이 발생해서 원하는 결과 값을 도출할 수 없거나 기능을 제대로 수행할 수 없게 되기 때문. 운영체제 시스템 프로그래머들은 이러한 문제점을 파악해서 운영체제를 개발할 때 시스템의 엉망진창을 최대한 예방하면서 안정적인 멀티스레딩이 되도록 프로세스 스케줄링을 연구하면서 개발했다.
특히 소프트웨어의 관점에서 싱글코어 싱글스레드 프로세서나 싱글코어 멀티스레드 프로세서나 모두 논리 스레드의 관점에서 보이므로 0번째 물리코어의 2Way SMT인 Siblling 스레드는 두개 모두 논리 스레드이며 여기서 한쪽이 완전한 Idle상태이면 0-0나 0-1에서 프로그램이 동작하는 성능의 차이는 없다. (구분이 무의미)

2.1. 멀티스레딩의 종류


멀티스레딩에는 방식에 따라 크게 2가지로 구분한다.
  • 일시적 멀티스레딩 (TMT: Temporal Multi-Threading)
한 번에 하나의 스레드에서만 명령어를 실행하거나 작업을 수행할 수 있는 멀티스레딩으로, 대표적으로 협동형(비선점형) 멀티태스킹처럼 하나의 스레드가 맡고 있는 일련의 명령어들이 먼저 다 수행한 다음에 다른 스레드가 수행하는 Coarse-grained 방식이 있고, 선점형 멀티태스킹처럼 하나의 스레드가 맡고 있는 일련의 명령어들을 먼저 다 수행하기도 전에 다른 스레드가 끼어들어 또 다른 명령어를 수행하면서 결과적으로 서로 다른 스레드들이 각자 맡고 있는 별개의 명령어들을 번갈아 수행하는 Fine-grained 방식이[1]라는 하위 방식들이 있다. 프로세스 스케줄링에 따라 일정 시간 단위로[2] 여러 스레드들을 번갈아 가면서 동작하기 때문에 '시분할 멀티스레딩'이라고도 부르며, 싱글코어 싱글스레드 CPU에도 적용할 수 있는 방식이다. 쉽게 말해서 한 사람이 정해진 계획에 따라 여러 가지의 일들을 다 수행하는 방식이라고 보면 된다. 한 마디로 멀티태스커인 1인 개발.
좋게 말하면 적은 하드웨어 자원으로도 구현할 수 있는 방식이지만, 나쁘게 말하면 자원이 한정되어 있어서 프로그램 개별적인 성능이 떨어지는 단점이 있을 수밖에 없다. 그 대신 싱글코어 싱글스레드 CPU밖에 없었던 일반 가정용 PC에서도 여러 프로그램들을 같이 실행할 수 있는, 이른바 멀티태스킹이 가능하여 멀티태스킹이 불가능했던 시절보다 비교가 안 될만큼 훨씬 더 나은 사용자 경험(UX: User Experience)을 제공할 수 있었다.
  • 동시 멀티스레딩 (SMT: Simultaneous Multi-Threading)
일시적 멀티스레딩과는 다르게 SMT는 여러 스레드들을 한꺼번에, 동시에 명령어들을 실행하거나 작업들을 수행할 수 있다는 차이점이 있다. 쉽게 말하면 혼자가 아닌 여러 사람이 여러 가지 일들을 분담해서 수행하는 것과 같다고 보면 된다. 한 마디로 개발팀.
현재까지 가장 진보된 멀티스레딩 방식으로 '완전한 멀티스레딩'이라고 부르기도 하며, 이와 대비되는 일시적 멀티스레딩을 가짜 멀티스레딩이라고 부르기도 한다. 동시에 동작할 수 있기에 멀티태스킹도 일시적인 멀티스레딩보다 더 쾌적해져, 실행 중인 프로그램에서 다른 프로그램을 실행해도 기존 실행 중인 프로그램의 성능이 거의 떨어지지 않는다. 그야말로 병행 처리, 병렬 처리가 가능한 '완전한 멀티태스킹'.
하지만, 이를 구현하려면 CPU의 형태가 어떻든 여러 개의 스레드들을 한꺼번에 감당할 수 있는 자원이 필요하다는 단점이 있다. 하드웨어 자원의 문제는 곧 비용의 문제로 이어지기 때문. 하드웨어가 지원해도 소프트웨어도 이에 맞게 수행할 수 있게끔 프로그래밍해줘야 제대로 발휘할 수 있다. 거저먹을 수 있는 혜택이 아니라는 뜻이다.

3. SMT의 원리



3.1. 2000년대 이전의 SMT


현대 CPU슈퍼스칼라 구조와 파이프라이닝 기법이 담겨진 마이크로아키텍처를 기반으로, CPU 전체가 한 번에 하나의 명령을 처리하는 것이 아니라 명령어 몇 개를 동시에 처리함과 동시에 명령 하나를 또다시 여러 단계의 작은 명령으로 나누고 각 부분을 차례대로 처리한다. 즉 몇 개의 명령어가 몇분의 1로 나누어지고, 그런 명령어 몇 개가 한번에 돌아가는 것이다.
이런 식으로 작동하는 이유는 많은 기계어 명령이 코드로는 하나로 되어 있어도 실제 처리해야 하는 일은 여러 단계로 나누어져 있고 각 단계는 이전 단계가 처리되기 전에는 수행이 불가능하기 때문이다. 예를 들어 메모리의 값을 증가시키는 명령이

1 메모리의 값을 읽는다.

2 읽은 값을 더한다.

3 값을 메모리에 쓴다.

와 같이 작동한다면 1번이 끝나기 전에는 2번을 할 수 없고 2번이 끝나기 전에는 3번을 할 수 없다.
하지만 파이프라인과 슈퍼스칼라를 동원한다고 해서 능사가 아니다. 명령어 자체에서도 한계가 있는데, 단일 코어에서 구현할 수 있는 명령어 수준의 병렬처리 능력(Instruction-Level Parallelism)은 명령어 종속성(Dependency)을 피할 수 없다. RAW(Read-After-Write), WAR(Write-After-Read), WAW(Write-After-Write) 등의 다양한 종속성이 있으며, 구조적으로 어느 정도 극복할 수 있다고 해도 근본적인 종속성은 해결되지 않는다. 이렇다보니 멀티 프로세서(여기서는 멀티 CPU)를 구축하면 레이스 컨디션 문제만 제외하고 명령어 종속성과 무관하게 동작할 수 있다.
실제로는 명령이 처리되기 위해 필요한 일이 명령마다 다르고 연계지 않을 수도 있는데, CPU의 예시는 아니지만 네트워크 비동기 처리의 예시를 들어보자. 네트워크에서 특정 값을 읽어 이를 처리하는 경우, 상당한 경우에는 네트워크의 대기 시간이 프로그램 전체 실행 시간의 대부분을 차지한다. 이 상황에서 위와 같이

1 네트워크의 값을 읽는다.

2 읽은 값을 처리한다.

3 값을 저장장치에 쓴다.

로 코드를 작성한다면, 1번의 네트워크 대기 지연 시간에 의해 프로그램은 상당히 비효율적인 구조를 가지게 될 것이다. 네트워크에서 값을 읽어오는 데 걸리는 시간은 시스템의 자체 저장장치인 메모리나 하드디스크에서 데이터를 읽는데 걸리는 시간에 비해 몇십~몇천배는 되기 때문이다. 이때 CPU는 1번에서 값을 읽어올 때까지 대기하게 된다.
하지만 CPU가 처리해야 할 일 중에는 이렇게 서로 연계된 일만 있는 게 아니다. 예를 들어 네트워크에서 값이 들어오길 하염없이 기다리는 저 컴퓨터에서 동시에 MP3 음원 파일도 하나 재생하고 있다고 하자. 그렇다면 네트워크에서 값이 들어올 때까지 MP3 음원 파일을 재생하고 있으면 효율이 올라가지 않을까? 멀티 CPU에서 하나의 CPU를 네트워크 처리에 할당하고 다른 하나의 CPU를 MP3 음원 파일 재생에 할당하는 것이 SMT를 구현하는 가장 확실한 방법이다.
이런 식으로 멀티 CPU 시스템에서 하나의 CPU 스레드에 성능을 더 이상 향상시킬 수 없을 경우, 남는 연산 능력을 다른 CPU 스레드의 명령어를 처리하는데 사용한다면 이렇게 놀고 있는 부분에 명령어 종속성이 없는 다른 스레드의 명령어를 투입하여 CPU 전체의 효율을 높이는 즉, 전체적인 명령어 병렬 처리 능력을 향상시킬 수 있다는 개념이다.

3.2. 2000년대 이후의 SMT


2000년대에 들어서 '하나의 CPU에 하나의 코어'를 넘어 '''"하나의 CPU에 여러 개의 코어"'''라는 멀티코어 프로세서와 '하나의 코어에 하나의 스레드'라는 개념을 넘어, '''"하나의 코어에 여러 개의 스레드"'''라는 '다방향(Multi-Way) SMT' 개념이 도입되었다.
그 다방향 SMT 개념이라는 것부터 설명하자면 'CPU 전체의 효율을 최대한 높인다'는 목표로 탄생한 개념으로써, 목표 자체만 보면 기존 멀티 CPU 시스템에서나 볼 수 있었던 SMT와 똑같지만 구현 과정이 다르고 무엇보다도 그동안 가격 문제 때문에 멀티 CPU를 접하기 어려워서 싱글코어 싱글스레드 CPU만 접하는 일반 사용자들도 SMT를 경험할 수 있다는 점은 기존의 SMT와 가장 큰 차이점이라고 볼 수 있다.
하드웨어 자체의 변화는 다방향 SMT로 동작하기 위한 별도의 하드웨어 모듈이 추가된 것 말고는 없으며, 코어 하나에 동시에 돌릴 스레드의 개수를 많이 우겨 넣어봤자 CPU 코어 하나의 최대 성능 이상은 절대 발휘할 수 없지만, 프로그램의 한계 때문에 쓰지 못했던 CPU 전체의 남은 성능을 끝까지 쥐어 짜는 셈이다.
코어 하나에 스레드 여러 개의 최초 구현체는 가장 간단한 양방향(2-Way) SMT로, 그 외에 4방향(4-Way) SMT와 8방향(8-Way) SMT도 존재하지만 하드웨어가 가지는 자원의 한계로 양방향 SMT가 현재까지 가장 많이 적용되고 있는 방식이다. 따라서 이 항목의 SMT는 양방향 SMT를 기준으로 서술한다.
논리적, 즉 S/W의 관점으로는 하나의 코어에 2개의 스레드를 만들어서 CPU 2개로 인식된다. 기본적으로 별개의 명령을 처리해야 하기 때문. 그래서 양방향 SMT가 지원되는 CPU를 Windows XP 이후 버전의 작업 관리자에서 보면 스레드 수가 2배로 뻥튀기 되는 것을 확인할 수 있다.
참고로 Windows NT 3.1부터 Windows 2000까지는 멀티 CPU 또는 멀티코어 CPU를 인식하지만 양방향 SMT까지 인식하지 못 하기 때문에 Windows XP부터 해당된다. DOS 커널 기반의 Windows 1.0부터 Windows Me까지는 멀티 CPU 또는 멀티코어 CPU조차 제대로 인식하지 못 한다.
예를 들어 1과 2라는 프로세스(스레드)에서 명령을 처리할 때 양방향 SMT를 지원하지 않는 CPU 의 경우,
(<int>는 다른 프로세스로 전환)

1

1

1

1 <int>

2

2 <int>

1

1 <int>

2 <end>

1 <end>

이런 식으로 한번에 하나의 명령만 처리 할 수 있다. 두 개의 작업을 재빠르게 전환하는 일시적인 멀티스레딩일 뿐, 진정한 멀티스레딩은 아니다.
반대로 양방향 SMT를 지원하는 CPU일 경우엔,

1,(2)

1,(2)

1,(2)

1,(2)

1.(2)

1,(2)

1 <end>

2 <end>

[3]
이런 식으로 처리할 내용을 우겨 넣어서 하드웨어 자원의 효율을 높이고 성능도 향상시키는 원리이다.
물론 물리적인 코어라는 자원 자체는 그대로이기 때문에 물리적인 코어 2개보다는 성능이 확실히 떨어진다. 이 논리로 양방향 SMT가 있어봤자 느려터졌다고 하지만, 그래도 단일 코어, 단일 스레드 환경에 비하면 멀티태스킹 사용 시에 한 처리가 많은 연산을 할 경우 상대적으로 다른 프로세스에 훨씬 많은 여유를 줄 수 있는 장점이 있다. 예를 들어 3D 렌더링을 할 경우 진가가 드러나는데, 3D 렌더러는 스레드 당 한 개의 렌더링 블록을 생성해 내는데, 양방향 SMT가 활성화된 쿼드 코어 CPU의 경우 8개의 스레드가 생성되어(즉 논리적인 8코어) 시간의 이점을 볼 수 있다. (20% 정도 차이가 난다)
애초에 양방향 SMT가 처음 나왔을 땐 일반 가정용 PC는 싱글코어가 전부였던 시기기도 하고, 인텔에 따르면 양방향 SMT의 구현체이자 상표명인 하이퍼스레딩 지원을 위한 추가 리소스(CPU의 다이 크기 증가 등)는 5% 정도에 불과하기 때문에 5% 주고 20%를 얻는 건 충분히 남는 장사이다. 물론 어디까지나 인텔에서 자사 기술의 장점을 설명한 것이니 '''덮어놓고 모든 경우에 적용된다고 맹신하는 것은 금물이다.'''
2001년에 CPU 안에 여러 개의 코어가 탑재된 형태의 멀티코어 프로세서IBMPOWER4를 통해 처음 등장했는데 당시에 일반 가정용으로는 나오지 못 했고 여전히 메인프레임 이상급의 특수 분야에서만 볼 수 있었지만, 하드웨어 구성 자체는 멀티 CPU 구성이 어려운 일반 가정용에도 멀티코어 CPU를 구경할 수 있는 밑거름이 되었다.
2005년에 들어서야 멀티코어 CPU가 일반 가정에서도 대중화된 이후로 전체적인 SMT는 물론이고 코어 하나당 양방향 SMT까지 제대로 경험할 수 있게 되어 더 나은 멀티태스킹으로 처리 성능 향상이라는 장밋빛 전망이었으나,[4] CPU 제조사들이 코어를 때려박는 걸 S/W 개발자들이 못 따라가면서, 싱글 코어 시대에 비해서는 빛이 바랜 상황이다. 코어수가 S/W의 멀티스레드 지원을 이미 능가한 상황에서는 양방향 SMT까지 동원하면 약간이지만 무조건 성능이 떨어진다.
다만, 2017년에 보드나라에서 AMD의 라이젠 시리즈와 인텔 코어 i 시리즈의 양방향 SMT 효율을 비교한 벤치에서는 최대 39.14% 및 평균 26.6% (라이젠은 최대 48.16% 및 평균 35.85%)가 나왔으므로, 인텔이 20%를 얘기한 당시엔 어땠는지 몰라도, 현재는 '20%를 상회'한다고 볼 수 있다.
그리고 라이젠 시리즈와 8세대 코어 i 시리즈 출시 이후로 게임들의 멀티코어 지원 수준도 올라가서, 8코어에 양방향 SMT 켠다고 성능이 떨어지는 게임은 상대적으로 찾기 힘들게 되었다. #1( "라이젠 초기 논란 중에 같이 나왔다가 AMD측에서 사소한 코딩 문제로 쉽게 패치할 수 있다고 말한 적이 있지요. 지금 시점에서 HT끈다고 성능이 오르는 게임을 찾으려면 스텔라리스[5]처럼 싱글코어만 쓰는 수준인 게임들로 벤치해야 될 겁니다." 댓글 참고), #2
다만 어디까지나 상대적인 거라서 일반 가정용 최초의 12코어 CPU인 라이젠 9 3900X와 (댓글 설명 참고) 일반 가정용 최초의 16코어 CPU인 라이젠 9 3950X의 경우, SMT를 끈 쪽이 대부분의 게임에서 성능이 높다. 다만 19년 12월 현재는 기본값인 SMT On으로 안 건드리는 게 게임 성능이 제일 높다.#, 선호 코어 설정이 SMT Off를 반영하지 못해서 윈도우 스케쥴러가 뻘짓하는 문제가 생기는 것으로 추정된다. #
결국엔 멀티스레딩을 지원하는 게임이 어떤 방식으로, 어떤 형태로 멀티스레드 프로그래밍 되어 있고 이를 OS의 작업 스케쥴러가 얼마나 잘 분해 해주냐에 따라 양방향 SMT의 효용성이 천차만별이라는 것.

4. 역사 및 사용 현황



4.1. 2000년대 이전


1950년대부터 등장한 멀티스레딩은 이후에 다양한 방식의 멀티스레딩이 등장했고, 그 중에 가장 진보된 방식인 SMT 개념은 1961년부터 1969년까지 진행했던 ACS(Advanced Computing Systems) 프로젝트를 통해 구현된 것이 시초로 알려져 있다.
당시에는 SMT를 구현하려면 멀티 CPU밖에 없었으므로, 멀티 CPU가 필요한 슈퍼컴퓨터, 메인프레임, 고성능 워크스테이션에서는 이미 SMT를 활용하기 시작했다. 하지만 일반 가정용 PC에서는 멀티 CPU 시스템을 구하기엔 가격 문제부터 닥치게 되고, SMT를 활용한 운영체제와 응용 프로그램이 전무에 가까워서 여전히 싱글코어 싱글스레드라는 CPU로 일시적 멀티스레딩을 통해 멀티태스킹을 구현하는 정도에 그치고 있었다. 즉, 일반 사용자들에게는 듣보잡 내지는 딴 세상 이야기에 지나지 않았다.

4.2. 2000년대 이후


그러다가 2001년 인텔 개발자 포럼(IDF)에서 인텔이 양방향 SMT의 구현체이자 상표명인 '하이퍼스레딩(Hyper-Threading)'을 발표한 이후로, 이때부터 SMT는 사실상 다방향(Multi-Way) SMT라는 의미로 굳어졌다.
서버용은 2002년 2월부터 투입된 Prestonia 기반의 제온 시리즈부터, 일반 가정용은 2002년 11월부터 투입된 펜티엄 4 HT 제품군에서 처음 사용되었다.[6] 출시 당시에는 최신 버전이었던 Windows XP에만 지원하는 바람에[7] 윈도우 XP의 보급율을 크게 늘렸지만 넷버스트 구조 때문에 효율은 그다지 좋지 못했다. 그래서 당시 농담으로 부르는 별명은 '''하이퍼쓰레기.''' 다만, 당시에도 멀티태스킹 상 이득은 분명하였기 때문에, 펜티엄 4 프레스캇애슬론 64를 상대로 나름 선전하던 분야도 있었다.
2001년 IBM의 POWER4, 2004년 썬 마이크로시스템즈의 UltraSPARC IV를 통해 멀티코어 프로세서가 등장했지만 일반 가정용으로 나오지 않아서 잘 알려지지 않았고, 2005년부터 일반 가정용에도 멀티코어 CPU가 출시되면서 대세가 되었다. 먼저 나온 펜티엄 4를 두 개 붙인 인텔 펜티엄D 시리즈에서는 사용되지 않았으나, 일명 '''펜티엄 XE'''라 불리는 익스트림 에디션은 펜티엄 D 코어에 하이퍼스레딩까지 지원되어 '''7세대 이전의 코어 i3 마냥 "2코어 4스레드"로 돌아가서''' 멀티태스킹 면에서는 애슬론 64 X2보다 우위에 있었다. 하지만 발열량은 넷버스트 마이크로아키텍처 기반 중에서도 문제의 프레스캇 기반이었으니 시궁창이었고, 양방향 SMT를 지원하지 않는 애슬론 64 X2와 실성능으로 비교하면 얄짤 없었다. 당시 AMD는 앞선 성능의 이득을 누리기 위해 듀얼코어 프리미엄을 포기하지 않았고, 동일 성능 '''제온 2 CPU 시스템을 기준으로 나름 싼 가격'''을 책정하는 등, 상대적으로 떨어지는 브랜드 파워와 시장 지배력을 생각하면 매우 쎈 가격을 유지했다. 심지어 PC용 듀얼코어 하위 라인이 워크스테이션용인 옵테론 160/165보다 비싸서 이들 옵테론 하위 라인 CPU를 사서 오버클럭하는 게 더 싸게 먹히던 시절도 있었다! 그래서 중저가형 PC에서 2쓰레드를 맛보려면 HT나 펜티엄D 805 같은거 밖에 선택지가 없는 상황이 꽤나 지속되었고 이는 싱글코어간 대결에서 인텔이 나름 이득이 있는 요소였다. 이후 2003년 P6 마이크로아키텍처 개량판 기반의 펜티엄M과 2006년 코어 시리즈, Sossaman 계열의 제온, 2006년 코어 마이크로아키텍처 기반의 코어2 시리즈와 제온에서는 하이퍼스레딩이 빠졌다.
2008년 본넬 마이크로아키텍처 기반의 아톰 시리즈[8] 네할렘 마이크로아키텍처 이후의 코어 i 시리즈에서 다시 도입되면서 펜티엄 4 시절의 하이퍼스레딩보다 나아진 성능 효율을 보여준다. 6세대 코어 i 시리즈까지는 '''i3'''와 '''i7'''에만 사용되었다가 7세대부터는 '''펜티엄'''에도 사용, 8세대부터는 i3가 빠진 대신 4코어 4스레드로 상향되었으며, 9세대부터는 i7마저 빠진 대신 8코어로 상향되고 같은 8코어인 '''i9'''에서 도입되는 변화가 있었다.[9] 비록 논리 코어지만 과거의 오명을 벗을 만큼 성능 향상이 있다. 특히 4코어 지원 게임에서 2코어 4스레드인 i3와 2코어 2스레드인 펜티엄의 비교는 i3가 확실히 뛰어나다. i3 4130과 G3258을 4.5GHz로 오버클럭한 경우와 비교해 멀티 코어 지원 게임에서 G3258이 더 낮은 클럭의 i3에게 지는 것을 볼 수 있다. 단, 아톰 시리즈 한정으로 2013년 베이트레일부터는 설계 변경으로 하이퍼쓰레딩이 빠졌다.
다만, 펜티엄 4든 코어 i 시리즈든 하이퍼스레딩을 켜면 투입되는 작업량이 많아지고 하드웨어 자원 활용률도 높아지므로, 당연히 '''발열과 전력 소모가 증가한다'''. 위의 설명처럼 같은 시간에 더 많은 명령을 처리하므로 전력 소모량만 보면 개념은 다른 오버클럭과 마찬가지로 많아지는 셈. 풀로드 시 많게는 30~40W가량 더 소모한다.
2016년도까지 하이퍼스레딩의 최대 수혜자는 단연 가격 때문에 코어 수가 제한된 코어 i3 시리즈라 단언할 수 있다. 그 중에서도 CPU 하나당 성능이 낮은 샌디-아이비브릿지 시스템이 가장 돋보인다. 프로그램이 코어 2개까지만 쓰는 상황에선 높은 IPC[10]빨로 AMD 6, 8코어들을 누르고, 멀티스레드를 잘 쓰는 프로그램에서도 듀얼코어 + 하이퍼스레딩의 가상 쿼드코어 효과로 나름 선방한다. 심지어 프로그램이 멀티스레드를 정말 잘 써서 순수 성능에선 AMD 8코어에게 밀리는 상황에서도 전성비 만큼은 항상 선방하는 편. 2016년 하반기에 모바일용 카비레이크 출시 후... 2017년 1월에 출시된 데스크탑용 제품군에도 하이퍼쓰레딩을 탑재한 펜티엄 3개가 나와 코어 i3가 위험에 처한 상황(본격 인텔의 i3 팀킬).
급기야는 AMD에서도 2011년부터 투입된 불도저 마이크로아키텍처에 도입되었던 부분적인 양방향 SMT 형태인 CMT(Clustered Multi-Thread) 구조를 버리고, 2017년 3월 초에 출시된 라이젠 시리즈 부터 전통적인 양방향 SMT 구조를 채용하면서 사실상 거의 모든 데스크탑 CPU에 적용되는 보편적인 기술이 되었다.
인텔, AMD뿐만 아니라 DEC도 여러 학자들과 함께 1990년대 후반부터 개발되어 2004년 출시를 목표로 했었던 Alpha 21464를 통해 인텔의 하이퍼스레딩보다 더 많은 '''4방향 SMT'''를 보여주었으나, Compaq이 DEC를 인수하고 그런 Compaq을 HP가 인수하면서 개발이 더 이상 진척되지 못 해 최종 완성되지 못 하고 드랍되었다. IBM도 2004년에 출시된 POWER5부터 양방향 SMT를, 썬 마이크로시스템즈도 2005년에 출시된 UltraSPARC T1을 통해 4방향 SMT를 도입했다. IBM은 여기서 그치지 않고 2014년에 출시된 POWER8 마이크로아키텍처부터는 무려 '''8방향 SMT'''까지 박아 넣기도 했다. 물론, 아직까지 일반 가정용 CPU 시장에서 구현되는 정도는 양방향 SMT 뿐이다.

5. 주의 사항


KVM을 제외한 가상머신에는 SMT를 뺀 코어 수로 카운트한다. 논리 코어를 인식하지 못하기 때문.
양방향 SMT 기능을 BIOS/UEFI상에서 꺼놓은 상태로 Microsoft Windows를 설치한 경우 이를 다시 켜도 활성화되지 않는 경우가 있다. 4코어 8스레드 CPU 기준으로 장치관리자에는 8개 모두 제대로 뜨는데 시스템 정보나 작업 관리자에서 논리 프로세서가 코어 수와 같다면[11] 100%. 다행히 윈도우를 다른 컴퓨터로 옮길 때 사용하는 sysprep를 사용하면, 시스템 드라이버가 전부 다시 설치되기 때문에 이러한 현상은 해결된다.

6. 보안 취약점


그런데, 인텔의 하이퍼쓰레딩이 '''보안 취약점 덩어리'''인 것이 밝혀져서(L1TF 버그, 좀비로드 버그 등) 다시 하이퍼쓰레기 소리를 듣게 생겼다. 2019년 4월부터 투입된 R0 스테핑부터 어느 정도 패치되었지만 여전히 땜빵식 조치에 불과하다. 참고로 이 취약점은 라이젠의 양방향 SMT에는 없다.

7. 관련 문서



[1] 이런 특징 때문에 Interleaved 방식의 멀티스레딩이라고도 부른다.[2] 크게는 어떤 스레드의 작업이 다 끝날 때까지의 걸리는 시간 단위부터 작게는 1사이클(1클럭)이라는 매우 세밀한 시간 단위까지 포함된다.[3] (2): 2 중, 1과 중복되지 않는 일부[4] 물론 2005년 당시 일반 가정에서 멀티코어이면서 양방향 SMT까지 둘 다 지원하는 CPU를 구하려면 CPU 하나만 100만원대까지 형성되어 있는 하이엔드 데스크탑 제품군인 펜티엄 XE 시리즈밖에 없었고, 50만원대 이내에 형성되는 일반 데스크탑 제품군에서는 2008년 코어 i7 시리즈가 되어서야 겨우 등장하게 되었지만 멀티 CPU가 아닌 싱글 CPU라는 점을 고려하면 그나마 살만한 가격대로 진입한 것에 의의있다고 볼 수 있다. 다시 말하지만 멀티코어 CPU 자체가 처음 나왔을 2001년 당시엔 일반 가정에서는 구하는게 거의 불가능에 가까웠던 시절이었다![5] '전혀 없는 멀티코어 최적화와 렉 문제' 부분 참고[6] 하이퍼스레딩을 지원하지 않는 펜티엄 4는 그냥 펜티엄 4 시리즈, 하이퍼스레딩을 지원하는 펜티엄 4는 펜티엄 4 HT 시리즈로 구분한다.[7] Windows 2000, Windows Me 이전 버전에서는 하이퍼스레딩을 제대로 활용할 수 없다. 가상 머신에 올려서 쓴다고 해도 하이퍼스레딩이 있는 인텔 8세대(펜티엄, i7), 라이젠에서는 막힌다.[8] 넷북, 넷탑에 사용됐던 아톰의 거의 대부분이 지원한다. 예외적으로 Z500/Z510 같은 초 저전력 프로세서는 전력 문제로 빼는 경우도 있다.[9] 코어 i9 라인 자체는 2017년 HEDT CPU를 표방하는 코어-X 시리즈부터 처음 도입되었다.[10] 한 클럭 당 명령어를 몇개를 수행할 수 있느냐를 나타내는 표준 수치로, 한마디로 '''클럭 대비 성능'''[11] 4 코어 8 논리 프로세서로 떠야 하는데 4 코어 4 논리 프로세서로 뜨는 경우.