超线程

✍ dations ◷ 2025-04-18 16:49:41 #微处理器,并发计算,Intel x86处理器,Intel处理器,X86架构

超线程(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(二级缓存)并未增加,且是共享的。

Pentium 4 CPU中,Northwood及其之后推出的版本内置超线程技术;而双核心的Pentium D中也只有EE版提供HT技术。英特尔的Core 2处理器则没有HT技术。

而在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%左右,且万一发生资源互抢的情形时,整体性能反而会下降。(以上是非常简略地描述大略情形,实际的超线程架构从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.

相关

  • SnSsub2/sub二硫化锡是一种无机化合物,俗称“金粉”,常用作金色的涂料。二硫化锡可由锡和硫在碘的存在下直接化合得到,反应需要加热:另一种方法则是将硫化氢通入锡(IV)盐或锡(IV)酸盐溶液,沉
  • 733年晋国曲沃之乱开始,前745年晋昭侯把曲沃(在今中国山西省曲沃县)封给其叔成师。前739年晋大臣潘父弑杀了晋昭侯,迎立曲沃桓叔。晋人发兵攻桓叔,桓叔退回曲沃。晋人共立昭侯子公子平
  • 刚果埃博拉2018年-2020年基伍埃博拉出血热爆发始于2018年8月1日,至今尚未结束。为发生在刚果民主共和国东部的埃博拉病毒疫情,于2019年6月扩散至邻国乌干达,截至2020年3月16日,已有超过3,30
  • 毫毛毫毛或称胎毛是一种只有婴儿才有的体毛,它的功能与头发类似,但在婴孩八个月时就会逐渐消失,因为毫毛有此特性,故有家长把孩子带到订做毛笔的地方,把毫毛刮下制成毛笔,作为送给孩子
  • 有机磷化合物有机磷化合物指含有碳-磷键的有机化合物,它们主要用于虫害控制以作为长期存在于环境中的氯化烃、滴滴涕等替代物。研究有机磷化合物性质和反应的有机化学分支称作有机磷化学
  • 国家地理 (杂志)(2013年12月)《国家地理》(英语:),原名《国家地理杂志》(),是美国国家地理学会的官方杂志,在国家地理学会1888年成立后的9个月开始发行第一期。其封面上的亮黄框及月桂纹图样是其象
  • 2004年法国网球公开赛女子单打比赛贾斯汀·海宁是卫冕冠军,但在第二轮败给意大利球员塔蒂亚娜·加尔宾。最终冠军为阿娜斯塔西亚·米斯金娜,决赛以直落二盘6-1 6-2击败同胞兼好友耶莲娜·德门蒂耶娃,夺得第1个法
  • 支秉彝支秉彝(1911年9月-1993年7月),江苏泰州人,支秉彝输入法的发明者。由于他是中国大陆地区研究汉字处理电脑化的最早一批人物,他被誉为“汉字信息处理开拓者”。早年于泰州中学毕业,19
  • 保罗·特罗登纽斯保罗·特罗登纽斯(荷兰语:Paulus Traudenius;-1643年7月9日),又译保罗·杜拉弟纽司,荷兰豪达人,曾于1640年至1643年期间担任荷属台湾第6任台湾长官。特罗登纽斯是豪达当地教师的后裔
  • 钼青铜钼青铜是一类组成为MxMoyOz的混合氧化物,其中M可以是氢、碱金属或铊(I)。钼青铜一词源于其色泽深。部分占据的4d带使它们有着金属特性。在化合物K0.28MoO3中,钼的氧化态为+5.7