五种英特尔消费级CPU,说它们是消费级是为了和企业级处理器Xeon(志强)区分:
– 赛扬是双核,不支持超线程 – 入门玩家
– 奔腾是双核,不支持超线程 – 中低端玩家
– i3是双核,支持超线程 – 中端玩家
– i5是4核,不支持超线程 – 中高端玩家
– i7是4核,支持超线程 – 高端玩家
而志强的一些低端CPU,普通玩家也可以用,比如
– E3是4核,支持超线程 – 高端玩家
CPU架构
要谈超线程和多核,就不得不谈CPU的架构和逻辑。无关的技术细节太多,这里略去。我们重点谈一下CPU中两个相关的模块:
1)Processing Unit(运算处理单元),简称PU
2)Architectual State(架构状态单元),简称AS
PU一般就是执行运算,比如算数运算加减乘除。AS执行一些逻辑和调度方面的操作,比如控制内存访问等。
单核CPU(先从简单的谈起)
一般一块传统意义的CPU上会有一个PU、一个AS。
比喻:一个小饭馆(单核CPU),夫妻老婆店,老板兼大厨厨房炒菜,老板娘兼服务员点单。这不,来了一个客人,首先,走到老板娘的收银台前,看菜单准备点单。差不多5分钟后,客人点完了一份盖浇饭。老板娘抄好了单,递给了在后厨的老公。老公开始炒菜。在这个例子中,老板娘可以理解成AS,老板/大厨可以理解称PU(干实事的)。
多核CPU
这里说的多核,是多个物理核,比如i3的双核,i5的4核。这中架构下,每一个物理核都有一个PU和一个AS。所以。对于i3来说,就有总共两个PU,两个AS。对于i5来说,就有总过4个PU,4个AS。
比喻:上面小饭馆的列子,对于5、6个客人可能还能忙的过来。但设想一下子来他个16个客人,这队估计要排到街上了。如果再告诉你,每10分种就有16个新客人过来点单。。。完了。生意估计是做不下去了 – 老板、老板娘忙到死。
这时,我们就需要一个更大的单位食堂(多核CPU)。有4个服务生、4个大厨。4个服务生同时点单,4个大厨同时开炒(1号服务生专给一号大厨下单,二号服务神生专给二号大厨下单。。。以此类推)。这样相比小饭馆一个老板娘、一个客人队列,这里成了4个队列,效率顿时比小饭馆提高4倍。16个客人,平均分配成4个队列,每个队列就只有4个客人了,情况是不是好了很多?
这个应该还是比较容易理解的。
超线程技术(HT)
重头戏来了,超线程是个啥玩意。他是我们平时说的多线程吗?
超线程(HT)并不是我们一般说的多线程。我们一般说的多线程(multi-threading)是指程序方面的,简单的说就是‘软’的,代码级别的。而超线程一般指的是硬件架构方面的,是‘硬’的:通过调整AS而模拟出来的‘逻辑核’。
简单的说吧,超线程就是一个物理核里面,有两个AS,一个PU。两个AS共享一个PU。为什么这么做,看下面的例子:
比喻:刚刚那个单位食堂,4个服务生,4个大厨,4个队列。会不会效率问题?
有!
设想每个客人都有看单选单的时候,你能保证每个客人都看两眼就下单?有的客人难免会磨磨蹭蹭,问东问西,一个菜点它个15分钟。而设想大厨平均炒一个菜只要10分种。那剩下的那5分钟呢?大厨在厨房闲着没事干,喝茶看报纸。时间全被客人-服务生点菜这个环节给浪费掉了。
那有没有解决方法?我想大家应该都能猜出来了
— 增加服务生!
这时候,我们给每个大厨多增加一个服务生,从一个服务生变成了两个服务生(AS),服务生1A和服务生1B开两个队列,同时给一个大厨(PU)下单。这样,当出现服务生1A的客人15分钟单子都没有下完的情况下,1B的客人单子很有可能3分钟下好送给大厨开炒了(PU),这样大厨就不会站在厨房傻等1A客人的订单。这样,最大限度地榨干大厨的劳动力 (大厨估计要骂娘了),而对于CPU来说,最大限度的提高了CPU的使用率,减少了CPU的(IDLE)空闲时间。有的时候,真不能怪大厨(PU)不卖力,而是你服务生(AS)叫单太墨迹。
在下图中,橙色和蓝色表明大厨(PU/CPU)是在工作的,白色格子表明大厨(PU)是空闲的。A图是单核没有没有用超线程,B图双核没有超线程,图C是单核启用了超线程。可以清晰地看到,从单核增加到双核(在没有超线程的情况下),CPU使用率并没有增加。而用了超线程后,整体CPU使用率提高了,虽然只是一个核。
转载请注明:学时网 » CPU 超线程、多核