Re: [闲聊]关于intel hyper threading的解说?

楼主: jonothan   2015-03-31 23:14:55
有错请指证
流水线作业
http://i.imgur.com/MaWNiqr.png
假设要洗衣服要经过:
净泡机、搅拌机、脱水机、烘干机,一台半小时。
假设要洗四桶衣服,经过四台机器需要(0.5+0.5+0.5+0.5)*4=8个小时。
BUT!
第0.5个小时
将第一桶衣服拿去浸泡
第1.0个小时
第一桶衣服 从浸泡机拿出来 丢进去搅拌机后
第二桶衣服 就丢去浸泡了
第1.5个小时
第一桶衣服 从搅拌机拿出来 丢进去脱水机
第二桶衣服 从浸泡机拿出来 丢进去搅拌机
第三桶衣服 丢去浸泡
.
.
.
最后总时间只需要3.5个小时!
这就是流水线作业
与电脑相关的,就是各级资源可以尽量避免资源空闲。
http://i.imgur.com/wl4FNJg.png
以这张图为例分别是:
指令抓取、提取暂存器、运算单元、资料存取、存回暂存器。
而上面是很单纯的流水线处理。
而现今的CPU呢?
http://i.imgur.com/9ClQylc.png
看一下架构示意图。
可以看到运算单元有非常多个,有整数运算,浮点数运算... 等。
但是一个指令进来,可能只使用了一个整数运算单元,而其他单元都是处于闲置状态。
那如何有效利用 全部的运算单元呢?
就是将指令全部丢进去处理,最后会卡在运算单元这级 如果可以进行运算就进行,如果不
行就先等待,等资源一空闲就进行运算。
处理完的回传值,会再全部丢到缓冲单元,按顺序全部排好,再输出,这样就与一个一个
慢慢执行后的输出一样了。
那与INTEL的Hyper-Threading有什么关系?
http://i.imgur.com/V6xEdv2.png
一颗双核心的处理器,处理两个程式的时候发现,其中一颗在运作的时候,另一颗刚好空
闲。那我是不是就可以在一颗核心空闲的时候,给他另一个程式进行运算?
所以就有了最右边的图。
http://i.imgur.com/Sdc8ORb.png
当然一般来说不会这么刚好,不过还是可以尽量进行填空,达到增加资源利用效率的效果
,减少时间。
以这张图来说,原本需要20个*2的cycle,现在只要25个cycle。
http://i.imgur.com/TIlceLU.png
不过如果原本就全部都填满了的话,HT就一点作用也没有了。
根据统计,HT实际使用上约可提供1.3倍的效能,而现在支援多执行绪的程式也越来越多。
从魔兽的4核心,到最近刺客教条等单机大作的8核心。
个人浅见E3、I7的4C8T是可以投资的,因为支援8T的东西只会越来越多。
文章前面的图面是陈中和教授的上课讲义,老师如果不希望使用该图,我会马上拿下来。

Links booklink

Contact Us: admin [ a t ] ucptt.com