超執行緒

(重定向自超线程

超執行緒(英語:Hyper-Threading,縮寫HT[1]英特爾專有的同時多執行緒技術,於2002年發布,用來改進x86微處理器執行平行計算(一次執行多個任務)的能力。超執行緒技術原先只應用於英特尔 Xeon 處理器中,當時稱為“Super-Threading”。之後陸續應用在Pentium 4 HT中,早期代號為Jackson。

在 HTT 的高级描述中,指令从 RAM 中获取(不同颜色的框代表四个不同进程的指令),由前端解码和重新排序(白色框代表流水线),然后传递给能够执行在同一时钟周期内执行来自两个不同程序的指令。
在 HTT 的高级描述中,指令从 RAM 中获取(不同颜色的框代表四个不同进程的指令),由前端解码和重新排序(白色框代表流水线),然后传递给能够执行在同一时钟周期内执行来自两个不同程序的指令。

通過此技術,英特爾實現在一個實體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编辑

編號SL6WK支援HT的P4 3.0G
虛擬的2個CPU在工作管理員中顯示出都在運轉

Pentium 4 CPU中,Northwood及其之後推出的版本內建超執行緒技術;而雙核心的Pentium D中也只有EE版提供HT技術。英特爾的Core 2處理器則沒有HT技術。[2]

而在2008年推出的Intel Core i7處理器又支援HT技術,在Nehalem微架構中,Hyper-Threading大舉捲土重來。Intel的Hyper-Threading(又稱同步多線程)是善用執行緒平行性的方法,讓單一核心在應用軟體層能執行兩個邏輯線程。超線程技術在部分型號Intel Core i3/i5/i7/i9處理器中可用。從Kaby Lake Pentium開始,定位低階的Pentium(部分型號)也支援超執行緒技術。

顧慮编辑

把執行管線的狀態,想像成流水線,資源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%左右,且萬一發生資源互搶的情形時,整體效能反而會下降。

要令電腦支持超執行緒技術,通常需作業系統和硬體的配合。晶片組需要支援具有HT技術之處理器。為此,當時的Intel推出了新的晶片組,i865PE和i875P。要充分發揮超執行緒的效能,使用者要使用Windows 2000之後的作業系統,而Windows XP家用版亦支援超執行緒技術。除了微軟的Windows外,Linux kernel 2.4.x亦開始支援該技術。軟體方面,通常優化多執行緒的程式都可以支援到。早期,遊戲軟體的支援是比較少。但隨著多核心技術的普及,愈來愈多遊戲軟體支援多執行緒的處理器。[3]

安全编辑

2005 年 5 月,Colin Percival 演示了 Pentium 4 上的超线程可以使用基于时间的侧信道攻击来监控与其共享缓存的另一个线程的内存访问模式,从而窃取密码信息。 这实际上不是计时攻击,因为恶意线程只测量自己执行的时间。 对此的潜在解决方案包括处理器更改其缓存逐出策略或操作系统阻止在同一物理内核上同时执行具有不同权限的线程。2018 年,OpenBSD 操作系统禁用了超线程,以避免数据可能从应用程序泄漏到其他软件,原因是 Foreshadow/L1TF 漏洞。2019 年,一系列漏洞导致安全专家建议在所有设备上禁用超线程。

示例:获取物理核心数与逻辑核心数编辑

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->ProcessorMaskULONG_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.

另見编辑

註腳编辑

外部連結编辑

🔥 Top keywords: Baike: 首页Special:搜索九龍城寨之圍城胖猫跳江事件Energy (組合)淚之女王背着善宰跑逆天奇案2金智媛习近平郭葦昀金秀賢 (男演員)不夠善良的我們九龍寨城邊佑錫伍允龍春色寄情人劉俊謙 (香港)張書偉怪獸8號虽然不是英雄葉乃文謝坤達神耆小子六四事件我的婆婆怎麼那麼可愛排球少年!!角色列表唐振剛2024年湯姆斯盃Seventeen (組合)蕭景鴻排球少年!!WIND BREAKER—防風少年—安東尼·愛德華茲 (籃球運動員)ILLIT中华人民共和国中華民國BABYMONSTER與鳳行張文傑BOYNEXTDOOR彭丽媛笑看風雲日本母亲节习明泽金惠奫徐巧芯從Lv2開始開外掛的前勇者候補過著悠哉異世界生活德雷克 (歌手)搜查班長1958支配物种乘風2024張員瑛承欢记嚴爵香港梅龍高速公路塌陷事故柯建銘葬送的芙莉蓮迷宮飯轉生貴族憑鑑定技能扭轉人生~繼承弱小領土後,招募優秀人才打造最強領土~为人民服务 (2022年电影)黃道十二宮IVE (組合)草榴社区歐倩怡沒有秘密周雨彤柯佳嬿無職轉生~到了異世界就拿出真本事~謝京穎埃马纽埃尔·马克龙破墓周處除三害 (電影)許瑋甯Twitter五月天打天下2逆天奇案李主儐大谷翔平家族榮耀之繼承者胡子彤郭晉安毛泽东Baike: 分類索引沈伯洋白紙運動文化大革命城市猎人 (2024年电影)2024年花蓮地震(G)I-DLE城市猎人朴成焄郭宁宁2024年優霸盃哥吉拉-1.0汤姆斯杯