fbpx
维基百科

超執行緒

超執行緒(英語:Hyper-Threading,縮寫HT[1]英特爾專有的同時多執行緒技術,於2002年發布,用來改進x86微處理器執行平行計算(一次執行多個任務)的能力。超執行緒技術原先只應用於英特尔 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

 
編號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->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.

另見

註腳

  1. ^ 超執行緒 (HT) 技術 互联网档案馆的,存档日期2011-03-17.
  2. ^ . [2020-06-06]. (原始内容存档于2020-10-23). 
  3. ^ . [2011-07-12]. (原始内容存档于2012-05-18). 

外部連結

  • (英文) Intel® Hyper-Threading Technology (Intel® HT Technology) (页面存档备份,存于互联网档案馆
  • (繁體中文)
  • (简体中文) CPU : 超线程技术HT (页面存档备份,存于互联网档案馆

超執行緒, 此條目可参照英語維基百科相應條目来扩充, 若您熟悉来源语言和主题, 请协助参考外语维基百科扩充条目, 请勿直接提交机械翻译, 也不要翻译不可靠, 低品质内容, 依版权协议, 译文需在编辑摘要注明来源, 或于讨论页顶部标记, href, template, translated, page, html, title, template, translated, page, translated, page, 标签, 英語, hyper, threading, 縮寫ht, 是英特爾專有的同時多執行緒技術, . 此條目可参照英語維基百科相應條目来扩充 若您熟悉来源语言和主题 请协助参考外语维基百科扩充条目 请勿直接提交机械翻译 也不要翻译不可靠 低品质内容 依版权协议 译文需在编辑摘要注明来源 或于讨论页顶部标记 a href Template Translated page html title Template Translated page Translated page a 标签 超執行緒 英語 Hyper Threading 縮寫HT 1 是英特爾專有的同時多執行緒技術 於2002年發布 用來改進x86微處理器執行平行計算 一次執行多個任務 的能力 超執行緒技術原先只應用於英特尔 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卻支援超執行緒技術 目录 1 運作方式 2 使用HT技術的CPU 3 顧慮 4 安全 5 示例 获取物理核心数与逻辑核心数 6 另見 7 註腳 8 外部連結運作方式 编辑每個單位時間內 一個單執行管線的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 amp PhysicalProcessorCoreCount DWORD amp 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 amp 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 lt returnLength switch ptr gt Relationship case RelationProcessorCore PhysicalProcessorCoreCount count the logical processor which is equal the count of digital 1 s of ptr gt ProcessorMask ULONG PTR ProcessorMask ptr gt ProcessorMask while ProcessorMask 0 ProcessorMask amp ProcessorMask 1 LogicalProcessorCoreCount break default break byteOffset sizeof SYSTEM LOGICAL PROCESSOR INFORMATION ptr free buffer return 1 上述程式碼在32位編譯时最多能枚举32个逻辑核心 在64位編譯时最多枚举64个邏輯核心 如果超过64 应该使用 processor group 另見 编辑多執行緒 同时多线程 對稱多處理機註腳 编辑 超執行緒 HT 技術 互联网档案馆的存檔 存档日期2011 03 17 支援超執行緒技術的 Intel Pentium 4 處理器 640 2020 06 06 原始内容存档于2020 10 23 筆記型電腦 我可以升級我的系統並使用 Intel HT 技術嗎 2011 07 12 原始内容存档于2012 05 18 外部連結 编辑 英文 Intel Hyper Threading Technology Intel HT Technology 页面存档备份 存于互联网档案馆 繁體中文 Hyper Threading 捲土重來 简体中文 CPU 超线程技术HT 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 超執行緒 amp oldid 72876495, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。