通俗理解 CPU 的概念:超标量(superscalar)、流水线(pipelining)、超线程(Hyper-Threading)、多核(multi-core)、SIMD

CPU有很多硬件提升手段,其中较为常见的是超标量(superscalar)、流水线(pipelining)、超线程(Hyper-Threading)、多核(multi-core)、SIMD等,通常较难理解,本文以洗衣服为例尝试通俗理解这些概念.

假如把一个线程任务模拟成洗衣机器操作,那一个线程包含多个指令(处理上衣、处理裤子、处理袜子.....),一个指令又包含多个周期(取衣服、洗衣服、晾衣服......);CPU 就是那洗衣工厂,工厂里有取衣机器 A、洗衣机器 B、晾衣机器 C 、烫衣机器 D、衣服放回机器 E,一开始流程如下:

1.机器A取上衣--机器B洗上衣--机器C晾上衣--机器D烫上衣--机器E放回上衣
2.机器A取裤子--机器B洗裤子--机器C晾裤子--机器D烫裤子--机器E放回裤子
3.机器A取袜子--机器B洗袜子--机器C晾袜子--机器D烫袜子--机器E放回袜子
4.机器A取鞋子--机器B洗鞋子--机器C晾鞋子--机器D烫鞋子--机器E放回鞋子
5...

最开始 CPU 就是顺序执行如上1-2-3-.....步骤的,现在有好几筐(衣服、裤子、鞋子......)要洗,如何提升速度?

超标量(superscalar)
最开始朴素想法就是工厂内多买机器,譬如取上衣机器买 2 台,洗衣机器买 2 台..........
洗衣工厂就变成

1.机器A1取上衣--机器B1洗上衣--机器C1晾上衣--机器D1烫上衣--机器E1放回上衣
  机器A2取裤子--机器B2洗裤子--机器C2晾裤子--机器D2烫裤子--机器E2放回裤子
2.机器A1取袜子--机器B1洗袜子--机器C1晾袜子--机器D1烫袜子--机器E1放回袜子
  机器A2取鞋子--机器B2洗鞋子--机器C2晾鞋子--机器D2烫鞋子--机器E2放回鞋子
3.....

这样时间就能减半了

流水线(pipelining)
仔细看从取衣放回一个流程里虽然每个机器都用到了,但任何一个时刻都只有一个机器在工作.
譬如:机器 A1/A2取完衣服后就空闲者一直到E1/E2放回衣服才继续工作,大部分时候都空闲着。
流水线就是不让任何一个机器空闲,没必要一个指令周期走完,可以继续执行其他指令。

T1 时刻:机器A1取上衣
T2 时刻:机器B1洗上衣+机器A1取裤子
T3 时刻:机器C1晾上衣+机器B1洗裤子+机器 A1 取袜子
T4 时刻:机器D1烫上衣+机器C1晾裤子+机器 B1 洗袜子+机器 A1 取鞋子
........

纵向看仍然是一个指令的完整周期(取衣服、洗衣服、晾衣服.....), 横向看会发现 A1 一直在工作被利用起来了,只要一直运行时间会发现 A1 ~ E1 各个机器都会被利用起来持续工作。

超线程(Hyper-Threading)
超标量(superscalar)和流水线(pipelining)都是线程里的优化方案,能让单线程程序跑的更快,而超线程(Hyper-Threading)就是不同线程间的优化方案了。
因为有的线程涉及和外部的数据交换,譬如需要等数据从内存乃至更慢的网络、磁盘装载到 L1、L2 chache,这时候可以让 CPU处理另一个线程。
继续类比就类似于洗衣工厂发现某箩筐 A 里的衣服较脏需要等洗衣液送过来才能继续洗,那可以保存箩筐A 的进度转而洗那些较干净无需等外部的某箩筐B里的衣服,等外部的洗衣液送过来后再处理箩筐A 里的衣服。
所以越是 IO 密集型应用,超线程效果就越大,譬如DBA 一般建议MySQL 的thread_running参数设置为 cpu 核数*2,这就是把超线程当成真正的核来用了。
超线程对 CPU 密集型应用就无用了,CPU 核数是多少就只能开多少任务。
日常应用来说超线程能提升 30%的吞吐量, 而这 30%的提升只是增加了 5%的额外电路,看起来性价比很高;但开启多线程会牺牲单线程的性能,而且现在大部人日常应用根本用不满CPU的那么多核和线程,所有有些 CPU(如MacBook的 M 系列 CPU)就没有超线程技术。

多核(multi-core)
多核(multi-core)很容易理解了,还是以洗衣服为例几个核就是额外再建几个洗衣工厂,当然成本也是跟着翻几倍。

SIMD
上面的例子都是假设机器一次只能处理一件任务,那能不能改造下机器(譬如增加机械臂)让机器 A 一次取 10 件而不是 1 件衣服,让机器 B 一次洗 10 个鞋子而不是 1 个?
SIMD就是类似思路,事实上这就是 SIMD 被叫做单指令流多数据流的原因,一次处理大量类似的数据,譬如多媒体数据、数据分析/AI领域 的矩阵数据。
譬如Python的Numpy库就是用了SIMD指令集 AVX 系列(AVX、AVX2乃至AVX512)来处理数据,所以哪怕没用GPU速度也很快。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容