文档章节

Intel超线程的沉沦与逆袭

con
 con
发布于 2013/06/09 00:45
字数 1735
阅读 214
收藏 0

2002年,Intel发布Northwood核心的P4C系列处理器,为桌面级处理器带来了一个新技术:Hyper-Threading超线程技术,随后的Prescott核心P4E系列也提供了对超线程技术的支持。后来的事实证明,Netburst架构上采用的HT技术,称之为杯具或许有些过分,但称之为鸡肋还是比较贴切的。进入Core时代,Intel便取消了对HT技术的支持。2008年11月,Intel新架构Nehalem发布,超线程技术出现在新的i系列处理器中,不过名字改成了Simultaneous Multi-Threading(同步多线程)。

多线程技术MultiThreading源于叫做ILP(Instruction Level Parallelism,指令级并行化)的思想,类似于分时共享计算系统,执行多个线程的处理器在某个线程因为缓存未命中(Cache Miss)或者分支预测失败而停止时,处理单元可以切换到另外一个线程来执行,以此提高资源利用率和数据吞吐量。多线程的实现有几种不同的形式:Coarse-Grained MultiThreading(粗粒度多线程),当正在执行的线程遇到长时间延迟时,就进行线程切换,直到原线程的等待操作完成,再切换回去,Intel的服务器级处理器Itanium 2采用这种方式。Fine-Grained MultiThreading(细粒度多线程),随时可以在每个时钟周期内切换多个线程,这种多线程方式可以最大化的利用处理单元实现最大化的吞吐量。这两种多线程技术,实际上都是处理单元的分时共享,处理单元在不同的线程切换,以此提高利用率以及总吞吐量,因此这两种多线程技术都属于Temporal MultiThreading(分时多线程)。

Netburst和Nehalem架构处理器所采用的多线程技术不同于上面两种,这种多线程技术可以同时运行多个线程,也就是说线程之间是时间并行的,因此称为Simultaneous MultiThreading,同步多线程(Intel一开始叫做Hyper-Threading大概是因为这个名字听起来比较NX吧=。=)。Intel采用的方法是在处理器中为每一个核心加一个入额外的逻辑控制单元,从而模拟出一个核心来执行线程。这样每个处理器核心都可以同时执行两个线程,它们共用同一个运算单元,当其中一个线程正在使用运算单元的某一模块时,另一个线程就要等待或者进行其它操作。这种多线程的方式也是提高了运算单元的利用效率,但由于除了控制单元外其它所有资源都是两个线程共享,所以远不能达到两个硬件核心的性能,当初Intel推出P4C系列时声称相对于同频率同架构没有HT技术的CPU,性能可以提升30%,而实际应用中远没有这么高的效果。

我认为,Netburst架构上超线程技术杯具的原因,主要有三个。首先是支持超线程技术需要更大的数据读取,两个线程共用高速缓存和内存通道,势必引起二级缓存和内存总线捉襟见肘。推出P4C系列时,Intel把Netburst架构的前端总线(FSB)频率提高到了800MHz,并且为配合高速的FSB采用了双通道DDR内存控制,到推出采用Prescott核心的P4E系列时,更是采用了高达1066MHz的FSB。即时在1066MHz的FSB下,内存通道的带宽也只有8.5GB/s,配合1M的二级缓存,完全应付两个线程的吞吐还是有些吃力。

其次,是Netburst架构超长的流水线。Northwood核心的流水线长度已经达到了20级,Prescott核心的流水线竟然达到令人跌眼镜的31级。超长的流水线可以更容易的提升处理器的主频,但随着流水线的逐步加长,主频提升所带来的性能提升越来越小。现代的微处理器基本上都使用超标量处理和分支预测技术,更长的流水线意味着更低的执行效率。本来已经如此低下的执行效率,再加入超线程技术,更是放大了Intel的尴尬。

如果上面两个原因是Netburst架构上HT技术的杯具的话,那么最后这个因素无疑是HT技术的餐具。当时的HT技术,不仅需要CPU,芯片组,BIOS等的支持,更需要操作系统和应用软件对多线程的支持。当时的主流操作系统WinXP已经支持多线程,但当时能支持多线程的常用软件是少之又少,特别的游戏软件,几乎没有- -b。集成了HT技术的处理器在执行单线程任务时,不仅没有任何帮助,反而会因为资源闲置而降低系统性能。Intel应该也意识到,在普及多核处理器之前,向桌面级微处理器上加入多线程技术是操之过急了。

2008年,在经历了Core时代以后,多核处理器已经普及,Intel认为重新推出多线程技术的时机已经成熟,配合新的Nahalem架构,超线程技术新瓶装旧酒,SMT出现在i系列处理器中。

Nahalem架构把内存控制器集成在cpu中,并使用QPI高速总线连接双通道或者三通道(LGA1366接口)DDR3内存,提供远超FSB通道的内存通道带宽。另外Nehalem架构采用了全新的三级缓存结构,大大提升了对cpu的数据供应能力,以此支持多核多线程的数据需求。

另外Intel处理器的流水线早在Core时代就降了下来。其实超长流水线的出现还是源于人们对于cpu性能=主频的误解,直到进入多核时代,人们才开始注重高性能低功耗,而不是单纯的追求高频率。

最后一个问题,桌面级微处理器已经全面进入多核时代,支持多线程的应用软件已经非常普遍了,所以SMT也不必像HT那样成为大餐具了。

Intel的超线程技术经历了Netburst时代的沉沦之后,在Nahalem时代强势归来,如果SMT技术获得成功,也许我们会在以后的桌面级微处理器上见到更多的多线程技术(MultiThreading),单个核心可以支持的线程数可能会是4个、8个或者更多。

本文写于2010-1-25 16:38      --con
 

© 著作权归作者所有

con

con

粉丝 21
博文 11
码字总数 34718
作品 0
朝阳
程序员
私信 提问
Linux下判断cpu物理个数,几核,是超线程还是多核心

今天查看一个HP DL580 机器, 发现 /proc/cpuinfo 上有 64 条记录(0~63), 即 64 核, 但是physical_id 是 0~3 ,表示有 4 颗实体的CPU , 然而cpu cores = 8 , 算出来应该是 4*8=32核 , 看到...

chenlinben
2013/11/15
0
0
Linux查看CPU的物理个数,逻辑个数,核数

(一)概念 ① 物理CPU 实际Server中插槽上的CPU个数 物理cpu数量,可以数不重复的 physical id 有几个 ② 逻辑CPU /proc/cpuinfo 用来存储cpu硬件信息的 信息内容分别列出了processor 0 –pro...

神谕03
2018/07/01
0
0
计算机的cup颗数、核数、线程数

只要买过/卖过电脑,肯定听过这几个名词; 1.cpu颗数:封装在集成电路(IC)中的处理器个数, 普通计算机多为单颗cup。 2.cpu核数:是指物理上,也就是单颗CPU上存在着几个核心。比如,双核就...

u010250863
2018/04/16
0
0
Linux CPU数量判断命令

其实只要 #include long num = sysconf(_SC_NPROCESSORS_ONLN); 便可以获得当前CPU的数量。。。 判断依据: 1.具有相同core id的cpu是同一个core的超线程。 2.具有相同physical id的cpu是同一...

晨曦之光
2012/03/09
311
0
(学习心得):进程,线程,超线程,并发,并行 等概念

前言: 此陋文来自最近对阅读《深入理解计算机系统》与《微型计算机体系结构:Intel Core Duo / i 系列微处理器技术应用》两本书的学习体会, 前者从 程序员的视角来探讨计算机系统中各部件的...

shayi
2012/11/26
6K
28

没有更多内容

加载失败,请刷新页面

加载更多

关于运维,该怎么决定它的方向,这个似工作又似兴趣的存在

我之前主要从事网络、桌面、机房管理等相关工作,这些工作使我迷惘,这应该是大多数运维人都经历过的过程; 18年国庆,我从国内前三的消费金融公司裸辞,下海创业,就是想要摆脱这样的困境。...

网络小虾米
10分钟前
2
0
Java Timer的用法

Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("11232"); } }, 200000 , 1000); public void schedule(TimerTask task, long delay......

林词
14分钟前
3
0
使用js动态加载外部js文件以及动态创建script脚本

动态脚本指的是在页面加载时不存在,但将来的某一时刻通过修改该DOM动态添加的脚本。和操作HTML元素一样,创建动态脚本也有两种方式:插入外部文件和直接插入JavaScript代码。 动态加载外的外...

Bing309
21分钟前
2
0
从零开始入门 K8s | Kubernetes 网络概念及策略控制

作者 | 阿里巴巴高级技术专家 叶磊 一、Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法。大家知道 Kubernetes 对于网络具体实现方案,没有什么限制,也没有给出特...

阿里巴巴云原生
26分钟前
2
0
天气获取

本文转载于:专业的前端网站➨天气获取 $.get("http://wthrcdn.etouch.cn/WeatherApi", { citykey: cityCode }, function (d) { //创建文档对象 var parser = new ......

前端老手
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部