因为一个循环,CPU搞了个新技术

作者 | 轩辕之风O

来源 | 编程技术宇宙

好久不见,我叫阿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,这样岂不是快很多?”

96ccdfe52827e67976ea0984f85993cd.png

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

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

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

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

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

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

“还有啊,···”

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

并行计算

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

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

15509dbc5cedbf56a6e4a5ec658ae297.png

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

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

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

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

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

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

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

“好像并不复杂嘛”

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

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

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

“这可是大工程啊”

“是啊···”

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

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

e351d3c03e2baa918491742b454408ab.png

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

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

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

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

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

SIMD

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

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

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

eaf7de572ff8c90e52b5c97009abd936.png

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI圈内卷?天池团聚请来专家集体“问诊”

简介&#xff1a; 近期杭州云栖大会上出现了一个“数据博物馆”&#xff0c;最吸引眼球的“展品”&#xff0c;竟是行业大规模开源数据集。不仅数量多达上百个&#xff0c;还覆盖零售、文娱、工业、医疗、自然科学等数十个行业。既有来自真实业务场景的商品数据&#xff0c;也不…

2021双11上云狂欢节 | 爆款产品底价全面开售

一年一度的双11狂欢节终于来啦&#xff01;怎样用最少的钱获得最多的福利&#xff1f;下面这份攻略收藏好&#xff0c;这波活动快冲&#xff01; 双11主会场&#xff1a;http://click.aliyun.com/m/1000304310/ 01 领取双11上云加油包 阿里云官网已实名认证的注册会员用户皆可…

针对场景化痛点,锐捷网络推出极简光 2.X,以太全光网再下一城

极简光 2.X 方案&#xff0c;旨在针对各行业的需求和痛点找到更合适的解法&#xff0c;为各行业的客户呈现更为适配的新产品。 出品 | CSDN云计算 光进铜退趋势之下&#xff0c;全光网在快速发展。 不过&#xff0c;更进一步在各个行业技术实施中&#xff0c;用户的痛点则多种多…

轻博客框架 php,DouPHP轻博客 v1.6 Release 20200925

DouPHP轻博客系统&#xff0c;基于PHPMYSQL架构的&#xff0c;可以使用它快速搭建一个博客系统。DouPHP轻博客系统功能特点操作简单后台简约明了&#xff0c;从使用者而不是开发者的角度出发设计后台功能布局&#xff0c;完全不需要使用手册就可以轻松进行日常内容编辑工作。功…

阿里云GanosBase升级,发布首个云孪生时空数据库

简介&#xff1a; GanosBase是李飞飞带领的达摩院数据库与存储实验室联合阿里云共同研发的新一代位置智能引擎&#xff1b;本次重磅升级为V4.0版本&#xff0c;推出首个云孪生时空数据库。 作者 | 谢炯 来源 | 阿里技术公众号 导读&#xff1a; GanosBase是李飞飞带领的达摩院…

演进实录|不同阶段的企业如何搭建监控体系?

简介&#xff1a; 企业业务发展越来越迅速&#xff0c;对 IT 的要求也愈发严苛且复杂。这不仅仅体现在运维团队架构与工作流程上&#xff0c;也体现在工具选型与平台搭建上。 今天我们好好聊一下工具选型与平台搭建思路与实践关键点。来看看阿里云会给出如何的最佳实践&#xf…

用过留痕,谁动了我的档案?

本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动&#xff0c;寻访一百零一个数字化转型场景&#xff0c;聚合呈现并开通评选通道&#xff0…

php在线考试系统模板下载,PHPEMS在线模拟考试系统 v6.1

PHPEMS在线模拟考试系统主要用于构建在线考试系统&#xff0c;如驾照、英语等练习系统。一、系统功能&#xff1a;1、强化训练测验&#xff0c;对知识点进行单独联系2、随机组卷练习&#xff0c;系统自动抽取题目进行练习3、手工组卷联系&#xff0c;通过教师平台手工组卷形成考…

媒体声音|阿里云数据库:一站式全链路数据管理与服务,引领云原生2.0时代

简介&#xff1a; 引领云原生数据库技术持续创新 这几年&#xff0c;云原生已成为阿里云的另一个标签&#xff0c;不仅最早布局云原生技术&#xff0c;拥有大量客户实践&#xff0c;更打造出丰富的云原生产品家族。尤其是数据库产品线&#xff0c;已进入云原生2.0阶段&#xf…

数据增长浪潮下,PCIe 6.0的问与Rambus的答

作为历史上使用最广泛、可扩展性最强的互联技术&#xff0c;PCIe标准自21世纪初正式创立以来&#xff0c;它便一直作为数据中心和计算应用芯片间数据传输的行业标准而存在。而在近几年间&#xff0c;随着全球数据量的爆发式增长&#xff0c;PCIe标准的更迭自3.0到4.0的“七年之…

阿里巴巴首席技术官程立:我们相信并正在践行的“好科技”

简介&#xff1a; 10月21日&#xff0c;阿里巴巴集团首席技术官程立出席2021年云栖大会技术*可持续发展论坛&#xff0c;并发表《科技创新和未来生活》的主题演讲&#xff0c;谈及科技创新的价值&#xff0c;以及阿里巴巴相信并正在践行的“好科技”&#xff0c;本文是程立的分…

Serverless 架构模式及演进

简介&#xff1a; Serverless 架构从使用技术上有计算&#xff0c;数据存储&#xff0c;消息通信&#xff0c;我们可从运维性&#xff0c;安全性&#xff0c;可靠性&#xff0c;可扩展性&#xff0c;成本几个角度来衡量架构的优劣。本文会介绍一些常见的业务场景&#xff0c;探…

Kubernetes 的自动伸缩你用对了吗?

作者 | AddoZhang来源 | 云原生指北本文翻译自 learnk8s 的 Architecting Kubernetes clusters — choosing the best autoscaling strategy[1]&#xff0c;有增删部分内容。TL;DR: 在默认设置下&#xff0c;扩展 Kubernetes 集群中的 pod 和节点可能需要几分钟时间。了解如何调…

贾扬清谈云原生-让数据湖加速迈入3.0时代

简介&#xff1a; 摘要&#xff1a;2021云栖大会云原生企业级数据湖专场&#xff0c;阿里云智能高级研究员贾扬清为我们带来《云原生--让数据湖加速迈入3.0时代》的分享。 摘要&#xff1a;2021云栖大会云原生企业级数据湖专场&#xff0c;阿里云智能高级研究员贾扬清为我们带…

一张图教你玩转阿里云双11上云狂欢节

一年一度的双11狂欢节已经开启啦&#xff01;下面一张图教你如何玩转阿里云双11上云狂欢节&#xff01; 双11主会场地址&#xff1a;http://click.aliyun.com/m/1000305076/

写时复制就这么几行代码,还是不会?

‍作者 | 闪客来源 | 低并发编程这里讲的是 Linux 内核里的写时复制原理。写时复制的原理网上讲述的文章很多&#xff0c;今天来一篇很直接的文章&#xff0c;通过看看 Linux 0.11 这个最简单的操作系统&#xff0c;从源码层面把写时复制的原理搞清楚。很简单哦&#xff0c;你可…

划重点|iOS15正式发布, 全新的通知推送系统,你必须要知道

简介&#xff1a; 今年友盟联合达摩院决策智能实验室讲算法技术&#xff0c;推出国内首个智能推送功能&#xff0c;帮助产品运营人员实现一键式触达的精细化运营。通过精心打磨的在线学习与优化算法&#xff0c;对推送人群与推送文案进行精准匹配&#xff0c;最大化用户点击量。…

万物互联下的碎片化怎么破?UINO优锘推出物联网产业元宇宙“物联森友会”

编辑 | 宋慧 出品 | CSDN云计算 移动浪潮之后&#xff0c;随着5G普及&#xff0c;IoT物联网已经成为下一个技术聚焦的领域。不过&#xff0c;万物互联中的“万物”终端&#xff0c;一直都存在着庞杂的应用场景&#xff0c;品类众多、技术指标各异的传感器&#xff0c;以及海量…

云湖共生-释放企业数据价值

摘要&#xff1a;2021云栖大会云原生企业级数据湖专场&#xff0c;阿里云智能资深技术专家、对象存储 OSS 负责人罗庆超为我们带来《云湖共生-释放企业数据价值》的分享。本文主要从数据湖存储演进之路、数据湖存储3.0 进化亮点等方面分享了云湖共生带来的企业价值。 摘要&…

数据湖构建与计算

简介&#xff1a; 2021云栖大会云原生企业级数据湖专场&#xff0c;阿里云智能高级产品专家李冰为我们带来《数据湖构建与计算》的分享。本文主要从数据的入湖和管理、引擎的选择展开介绍了数据湖方案降本增效的特性。 摘要&#xff1a;2021云栖大会云原生企业级数据湖专场&am…