超线程
运作方式
每个单位时间内,一个单运行管线的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及其之后推出的版本内置超线程技术;但在早期的Northwood核心中,一些型号的HT技术被关闭,纵使有软件侦测到超线程技术的存在,用户并不可以激活;而双核心的Pentium D中也只有EE版提供HT技术。英特尔的Core 2 Duo处理器则没有HT技术。但处理器已集成了两个实体CPU核心,所以仍然支持两个线程。
而在2008年推出的Intel Core i7及Intel Atom处理器又支持类似HT的技术,在Nehalem中,Hyper-Threading 大举卷土重来。在 IntelNetBurst架构的 Northwood 版本中开始导入的 Hyper-Threading-在 Intel 世界之外称为 Simultaneous Multi-Threading (SMT)-是善用线程平行性的方法,让单一核心在应用软件层能运行两个逻辑线程。
顾虑
把运行管线的状态,想像成流水线,资源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可获取当前计算机的物理内核数与逻辑内核数:
DWORDGetProcessorCoreCount(DWORD&PhysicalProcessorCoreCount,DWORD&LogicalProcessorCoreCount){typedefBOOL(WINAPI*LPFN_GLPI)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,PDWORD);LPFN_GLPIglpi=(LPFN_GLPI)GetProcAddress(GetModuleHandle(TEXT("kernel32")),"GetLogicalProcessorInformation");if(NULL==glpi)return0;PSYSTEM_LOGICAL_PROCESSOR_INFORMATIONbuffer=NULL;DWORDreturnLength=0;PhysicalProcessorCoreCount=0;LogicalProcessorCoreCount=0;while(true){DWORDrc=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)return0;}else{return0;}}else{break;}}PSYSTEM_LOGICAL_PROCESSOR_INFORMATIONptr=buffer;DWORDbyteOffset=0;while(byteOffset+sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION)Relationship){caseRelationProcessorCore:{++PhysicalProcessorCoreCount;// count the logical processor, which is equal the count of digital 1"s of ptr->ProcessorMaskULONG_PTRProcessorMask=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.
另见
多线程
对称多处理机
Pentium D 处理器列表
Intel Pentium 4处理器列表
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

- 有价值
- 一般般
- 没价值








24小时热门
关于我们

APP下载


{{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}