超執行緒

超執行緒（HT, Hyper-Threading）是英特爾研發的一種技術，於2002年發布。超執行緒技術原先只應用於Xeon 處理器中，當時稱為「Super-Threading」。之後陸續應用在Pentium 4 HT中。早期代號為Jackson。
通過此技術，英特爾實現在一個實體CPU中，提供兩個邏輯執行緒。之後的Pentium D縱使不支援超執行緒技術，但就整合了兩個實體核心，所以仍會見到兩個執行緒。超執行緒的未來發展，是提升處理器的邏輯執行緒。英特爾於2016年發布的Core i7-6950X便是將10核心的處理器，加上超執行緒技術，使之成為20個邏輯執行緒的產品。
英特爾表示，超執行緒技術讓Pentium 4 HT處理器增加5%的裸晶面積，就可以換來15%~30%的效能提升。但實際上，在某些程式或未對多執行緒編譯的程式而言，超執行緒反而會降低效能。除此之外，超執行緒技術亦要作業系統的配合，普通支援多處理器技術的系統亦未必能充分發揮該技術。例如Windows 2000，英特爾並不鼓勵使用者在此系統中利用超執行緒。原先不支援多核心的Windows XP Home Edition卻支援超執行緒技術。

運作方式

每個單位時間內，一個單執行管線的CPU只能處理一個執行緒（作業系統：thread），以這樣的單位進行，如果想要在一單位時間內處理超過一個執行緒是不可能的，除非是有兩個CPU的實體單元。雙核心技術是將兩個一樣的CPU放置於一個封裝內（或直接將兩個CPU做成一個晶片），而英特爾的HT技術是在CPU內部僅複製必要的資源、讓兩個執行緒可同時執行；在一單位時間內處理兩個執行緒的工作，類比實體雙核心、雙執行緒運作。
Intel自Pentium開始引入超純量、亂序執行、大量的暫存器及暫存器重新命名、多指令解碼器、預測執行等特性；這些特性的原理是讓CPU擁有大量資源，並可以預先執行及平行執行指令，以增加指令執行效率，可是在現實中這些資源經常閒置；為了有效利用這些資源，就乾脆再增加一些資源來執行第二個執行緒，讓這些閒置資源可執行另一個執行緒，而且CPU只要增加少數資源就可以類比成兩個執行緒運作。
P4處理器需多加一個Logical CPU Pointer（邏輯處理單元）。因此P4 HT的die的面積比以往的P4增大了5%。而其餘部分如ALU（整數運算單元）、FPU（浮點運算單元）、L2 Cache（二級快取）並未增加，且是共用的。

使用HT技術的CPU

Pentium 4 CPU中，Northwood及其之後推出的版本內建超執行緒技術；但在早期的Northwood核心中，一些型號的HT技術被關閉，縱使有軟體偵測到超執行緒技術的存在，使用者並不可以啟用；而雙核心的Pentium D中也只有EE版提供HT技術。英特爾的Core 2 Duo處理器則沒有HT技術。但處理器已整合了兩個實體CPU核心，所以仍然支援兩個執行緒。
而在2008年推出的Intel Core i7及Intel Atom處理器又支援類似HT的技術，在 Nehalem 中，Hyper-Threading 大舉捲土重來。在 Intel NetBurst 架構的 Northwood 版本中開始匯入的 Hyper-Threading－在 Intel 世界之外稱為 Simultaneous Multi-Threading (SMT)－是善用執行緒平行性的方法，讓單一核心在應用軟體層能執行兩個邏輯執行緒。超執行緒技術在部分Intel Core i3/i5/i7/i9處理器中可用。從Kaby Lake Pentium開始，定位低階的Pentium（部分型號）也支援超執行緒技術。部分SoC設計的Pentium、Celeron、Atom也支援超執行緒技術。

顧慮

把執行管線的狀態，想像成流水線，資源A→資源B→資源C，來了兩條資料要計算，
一條需要消耗A的100%→B的50%→C的50%，另一條一樣需要消耗A的100%→B的50%→C的50%，
一條單純的（無HT）的執行管線的資源A需要先運用100%效能把第一條運算完才能再運算下一條，但後面的資源B跟C卻都有50%效能的浪費；
如果把執行管線的資源A，變成兩個，資源B跟C依然只有一個，
那這條管線就可以變成「兩個資源A同時消耗100%效能運算兩條資料，到了資源B跟C階段時，兩條資料再各自消耗50%的效能」，
即達成「不必增加一條完整的執行管線，卻能在一樣時間運算兩條執行緒」
但實際應用時，執行管線不會都是收到這麼完美的需運算資料，
可能會是需消耗「A的10%→B的70%→C的70%」+「A的30%→B的50%→C的70%」+......等多種不同效能需求的需運算資料，
依照檔案的統計數字，整體能夠提升的效能約為5~15%左右，且萬一發生資源互搶的情形時，整體效能反而會下降。
(以上是非常簡略地描述大略情形，實際的超執行緒架構從P4時代至i系列6代，每一代都有所進化)
要令電腦支援超執行緒技術，通常需作業系統和硬體的配合。晶片組需要支援具有HT技術之處理器。為此，當時的Intel推出了新的晶片組，i865PE和i875P。要充分發揮超執行緒的效能，使用者要使用Windows 2000之後的作業系統，而Windows XP家用版亦支援超執行緒技術。除了微軟的Windows外，Linux kernel 2.4.x亦開始支援該技術。軟體方面，通常最佳化多執行緒的程式都可以支援到。早期，遊戲軟體的支援是比較少。但隨著多核心技術的普及，愈來愈多遊戲軟體支援多執行緒的處理器。

範例：取得物理核心數與邏輯核心數

Windows API的GetLogicalProcessorInformation可取得目前電腦的物理核心數邏輯核心數：
DWORD GetProcessorCoreCount(DWORD &PhysicalProcessorCoreCount,DWORD &LogicalProcessorCoreCount ){
typedef BOOL(WINAPI *LPFN_GLPI)(
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
PDWORD);

LPFN_GLPI glpi = (LPFN_GLPI)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "GetLogicalProcessorInformation");

if (NULL == glpi)
return 0;

PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
DWORD returnLength = 0;
 PhysicalProcessorCoreCount = 0;
 LogicalProcessorCoreCount = 0;
while (true)
{
DWORD rc = glpi(buffer, &returnLength);

if (FALSE == rc)
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (buffer)
free(buffer);

buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(
returnLength);

if (NULL == buffer)
return 0;
}
else
{
return 0;
}
}
else
{
break;
}
}

PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = buffer;

DWORD byteOffset = 0;
while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength)
{
switch (ptr->Relationship)
{
case RelationProcessorCore:
{
++PhysicalProcessorCoreCount;

// count the logical processor, which is equal the count of digital 1's of ptr->ProcessorMask
ULONG_PTR   ProcessorMask = ptr->ProcessorMask;
while (ProcessorMask != 0)
{
ProcessorMask &= ProcessorMask - 1;
LogicalProcessorCoreCount++;
}
break;
}
default:
break;
}
byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
++ptr;
}
free(buffer);
return -1;}
上述程式碼在32位元編譯時最多能列舉32個邏輯核心，在64位元編譯時最多列舉64個邏輯核心。如果超過64，應該使用 processor group.