博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CPU 超线程、多核
阅读量:7233 次
发布时间:2019-06-29

本文共 1839 字,大约阅读时间需要 6 分钟。

hot3.png

五种英特尔消费级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)叫单太墨迹。

165803_tMd1_347414.png

 

在下图中,橙色和蓝色表明大厨(PU/CPU)是在工作的,白色格子表明大厨(PU)是空闲的。A图是单核没有没有用超线程,B图双核没有超线程,图C是单核启用了超线程。可以清晰地看到,从单核增加到双核(在没有超线程的情况下),CPU使用率并没有增加。而用了超线程后,整体CPU使用率提高了,虽然只是一个核。

转载于:https://my.oschina.net/u/347414/blog/761443

你可能感兴趣的文章
gson-plugin深入源码分析(三)
查看>>
leetcode-846-Hand of Straights
查看>>
rpm包管理功能全解
查看>>
web前端开发编码规范及性能优化
查看>>
安装LNMP开发环境
查看>>
谈谈前端性能优化(一)
查看>>
Spring Boot Web 应用性能优化
查看>>
关于ThinkPHP5中使用 Auth2 验证的实现
查看>>
iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码
查看>>
python--模块2
查看>>
Spring Cloud 配置中心内容加密
查看>>
TCP中有哪些定时器?
查看>>
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
查看>>
基于ubuntu16.04部署IBM开源区块链项目-弹珠资产管理(Marbles)
查看>>
基本算法思想:递归+分治+动态规划+贪心+回溯+分支限界
查看>>
SpringCache-Redis 注解驱动 基本例子
查看>>
Spring Boot(三)Spring Boot 和 MyBatis 整合
查看>>
超级用户黄金法则:Top 10%的用户价值是普通用户的5倍
查看>>
想学Python?这里有一个最全面的职位分析
查看>>
SpringCloud(第 056 篇)CentOS7 安装 jenkins 持续集成工具
查看>>