当前位置:首页 > 文章 > 正文内容

一个故事看懂CPU的SIMD技术

廖万里2年前 (2022-10-27)文章24225

好久不见,我叫阿Q,是CPU一号车间的员工。我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可以同时执行两个线程,就是8核16线程,那速度杠杠滴。

我所在的一号车间,除了负责执行指令的我,还有负责读取指令的小A,负责指令译码的小胖和负责结果回写的老K,我们几个各司其职,一起完成执行程序的工作。

一个简单的循环

那天,我们遇到了一段代码:

void array_add(int data[], int len) {  for (int i = 0; i < len; i++) {
    data[i] += 1;
  }
}

循环了好几百次之后,才把这段代码执行完成,每次循环都是做简单又重复的工作,把我累得够呛。

一旁负责结果回写的老K也是累的满头大汗,吐槽道:“每次都是取出来加1又写回去,要是能一次多取几个数,批量处理就好了”

老K的话让我眼前一亮,对啊,能不能批量操作呢?

心里一边想着,一边继续干活了。

繁忙的一天很快结束了,转眼又到了晚上,计算机关机后,我把大家召集了起来。

“兄弟们,还记得咱们白天遇到的那个循环吗?”

“你说哪个循环,咱们这一天可执行了不少循环呢”,小A说到。

“就是那个把整数数组每个元素都加1的那个循环”

“我想起来了,那循环怎么了?有什么问题吗?”

我看了老K一眼,说道:“我在想今天老K的话,像这种循环,每次都是取出来加1又写回去,一次操作一个数,效率太低了,咱们要是升级改造一下,支持一次取出多个数,批量加1,这样岂不是快很多?”

一个故事看懂CPU的SIMD技术

老K一听来了兴趣,“这敢情好,你打算怎么做?”

“这我还没想好,大家有什么建议吗?”

一旁负责指令译码的小胖说道:“可以新增一条指令,专门用来一次取出多个数据来加1”

“不行不行,不能限的这么死,今天是加1,万一下次是加2呢?指令里面不能限制为1”

“那如果每个数据要加的是不一样的怎么办?”

“你这么一说,那万一不是加法,是减法,乘法怎么办?”

“还有啊,···”

大家开始七嘴八舌讨论了起来,没想到一个小小的加法循环,一下子引出了这么多问题来,这是我们没想到的。

并行计算

随着讨论的深入,我觉得已经超出了咱们一号车间能把控的范围,需要上报给领导,组织八个车间代表一起来商讨。

领导一听说有提高性能的新技术,马上来了兴趣,很快便开会组织大家一起来商讨方案。

一个故事看懂CPU的SIMD技术

“都到齐了是吧,阿Q你给大家说一下这个会议的目的”,领导说到。

我站了起来,开始把我们遇到的问题和想法跟大家讲了一遍。

“是这样的,我们一号车间那天遇到了一段循环代码,循环体的内容很简单,就是给数组中的每一个元素加1。我们执行的时候,就是不断取出每一个元素,然后将其执行加法计算后,再写回去。这样一个一个来加1,我们感觉太慢了, 要是可以一次多取几个,并行加1,那一定比一个一个加快上不少。”

我刚说完,大家都开始小声议论起来。

“我看出来了,这其实就是并行计算!”,二号车间小虎一语道出了关键。

六号车间小六问道:”阿Q,你们已经有方案了吗?“

“还没有,这正是今天开会的目的,因为情况有点复杂,还需要大家一起来出出主意”

“好像并不复杂嘛”

“我上面举的例子只是一个简单的情况,并行计算还可能不是固定的数,可能是一个数组和另一个数组相加。还有可能不是整数相加,而是浮点数,甚至,还可能不是加法,而是减法或者乘法,再或者不是算术运算,而是逻辑运算”

我刚一说完,大家又开始窃窃私语交流起来。

“我琢磨着你说的这一系列东西,咱们是要新增一套专门用来并行计算的指令集啊”,小虎说道。

“这可是大工程啊”

“是啊···”

这时,小六又问道:“咱们的计算的时候,都是把数据读取到寄存器进行的,可这寄存器一次只能装一个数,怎么一次读取多个数据呢?”

“可能需要新增一些容量大一些的寄存器,比如128bit长度,可以同时容纳4个32位的整数”

一个故事看懂CPU的SIMD技术

“有这个必要吗?咱们是通用CPU,又不是专门做数学计算的芯片,搞这些东西干嘛?”,四号车间代表提出了质疑。

我也不甘示弱:“那可太有必要了,在图像、视频、音频处理等领域,有大量这样的计算需求,咱们得提升处理这些数据的能力”

见我们争执不下,领导拍了拍桌子,会场一下安静了下来。

“我觉得阿Q说的有道理,咱们确实需要提升处理这类数据运算的能力了。不过不用一下搞那么复杂,先支持整数并行运算就行了。新增寄存器这个也不用着急,可以先借用一下浮点数运算单元FPU的寄存器。这件事先这么定下来,具体的方案你们再继续讨论。”,说完便离开了会议室。

领导不愧是领导,几句话就把我们安排的明明白白。

SIMD

又经过一阵紧张的讨论,我们终于敲定了方案。

我们借用浮点数运算单元的寄存器,还给它们起了新的名字:MM0-MM7。因为是64位的寄存器,所以可以同时存储两个32位的整数或者4个16位整数或者8个8位的整数。

我们还新增了一套叫MMX的指令集,用来并行执行整数的运算。

一个故事看懂CPU的SIMD技术

我们把这种在一条指令中同时处理多个数据的技术叫做单指令多数据流(Single Instruction Multiple Data),简称SIMD

有了这套指令集,咱们处理这类整数运算问题的速度快了不少。

不过渐渐地发现了两个很麻烦的问题:

第一个问题,因为是借用FPU的寄存器,所以当执行SIMD指令的时候,就不能用FPU计算单元,反过来也一样,同时使用的话就会出乱子,所以要经常在不同的模式之间切换,实在是有些麻烦。

另一个更重要的问题,咱们这套指令集只能处理整数的并行运算,可现在浮点数的并行运算越来越多,尤其是图像、视频还有深度学习的一些数据处理,浮点数情况越来越多,这时候都派不上用场。

我们把这些问题给领导做了汇报,看到我们已经做出的成绩,领导终于同意继续升级。

这一次,我们扩展了一套新的SSE指令集出来,新增了XMM0-XMM7总共8个128位的寄存器,再也不用跟FPU共享寄存器了。而且位宽加了一倍,能容纳的数据更多了,能同时处理的数据自然也变多了。

后来,我们又不断的修改升级,不仅支持了对浮点数并行处理,还推出了新一代的AVX指令集,把寄存器再一次扩大为256位,现在我们的SIMD技术更加先进,处理数据运算的能力越来越强了!


本文链接:https://www.kkkliao.cn/?id=174 转载需授权!

分享到:

添加博主微信共同交流探讨信息差网赚项目: 19528888767 , 请猛戳这里→点我添加

版权声明:本文由廖万里的博客发布,如需转载请注明出处。

“一个故事看懂CPU的SIMD技术” 的相关文章

失窃iPhone最终归宿:一台被盗的手机,如何在华强北“焕发新生”

失窃iPhone最终归宿:一台被盗的手机,如何在华强北“焕发新生”

华强北,一个中国数码史上现象级的名词。这条中轴主干道南北长900多米的街区,造就了中国电子科技历史上的神话。但一个硬币有两面,如果说腾讯、TP-Link这样的成功企业代表了华强北向阳的一面,那么华强北的阴暗一面,就离不开两个词:组装机和山寨机。如今,在各大手机厂商物美价廉的新品联合绞杀之下,山寨机已...

马云即便隐退了,眼光依旧毒辣,退出前的发言值得深思

马云即便隐退了,眼光依旧毒辣,退出前的发言值得深思

(ps:灰色的文字为马云的发言,黑色为作者的补充解读,更助于各位理解)马云发言:过去的这一年,很不寻常,事件发生了巨大的变化。疫情也带来了巨大的挑战,在今天所有巨大的不确定当中,有一件事是确定无疑的。那就是数字化的趋势没有改变。数字化以前只是让一些企业活得更好。而今天是企业活下去的关键,数字化的进程...

圆周率已经算到了62.8万亿位,再算下去有什么意义?

圆周率已经算到了62.8万亿位,再算下去有什么意义?

综述大家知道,圆的周长与直径的比值就是圆周率,用希腊字母表示也就是π。π是一个无限不循环的无理数,在小数点之后存在着无限多个数字,并且不会循环。令人惊讶的是,就算已经证明了π的小数点之后的数字是无穷的,仍然有不少科学家们想要把它继续算下去。最新成果显示,瑞士的一名研究人员利用一台超级计算机,耗时19...

小米12SPro深度体验评测,什么叫“水 桶 旗 舰”啊?

小米12SPro深度体验评测,什么叫“水 桶 旗 舰”啊?

首先,依然是祖传一句话评价:补齐了唯一短板的水桶旗舰。其实就像年初的时候评价小米12Pro一样,今年的12系列看得出小米是在努力的优化体验,而不是单纯的堆叠参数,所以更注重手感的12和12S,以及徕卡加持下算法提升、影调有明显改善的小米12S Ultra便应运而生,至于今年的12Pro和12S Pr...

每天坚持看书有什么变化?对人有什么影响?

每天坚持看书有什么变化?对人有什么影响?

高中毕业,实际初中水平的我,却有上千本书,这还不是我书最多的时候。现在每天读书2-3个小时.打算这辈子好好研究透,读它十几遍。我饭可以不吃饭,但绝对不能一天不读书。之所以爱书如命,是因为一本书救了我,并且改变了我的后半生。你相信吗?我现在把300多万债务还清,而且能靠写作养活自己,交易开始有点起色,...

蔚来将上线“跨级换电”:支持 100kWh 电池,日租 68 元

蔚来将上线“跨级换电”:支持 100kWh 电池,日租 68 元

IT之家 10 月 27 日消息,蔚来宣布试点“跨级换电”服务,即标准续航电池包用户可以选择更换为长续航电池包,按日计费,先用后付。而长续航电池包用户也可以换为标准续航电池包,可按日补偿积分。70/75 度升至 100 度,每日使用费 68 元;100 度降至 70/75 度,每日补偿 200 积分...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。