大家好,我是CPU一号车间的那个阿Q,好久不见,我想死你们了~

不认识我的请去这里这里补补课:完了!CPU一味求快出事儿了!

主板上的新邻居

“阿Q,快别忙了,马上去一趟会议室,领导有重要事情开会”,一大早,咱们CPU厂里的总线主任就挨个到8个车间通知大家开会,神色有些凝重。

“什么事情,这么着急?”

“听说是主板上新来了一家单位,来抢咱们CPU工厂的饭碗了”,主任小声的说到。

“还有这种事情?”,我二话没说赶紧起身出门了。

来到会议室,没想到大家都已经到齐了,就差我了。

见我到来,领导开始讲话:“诸位,想必大家可能都有所耳闻,就在昨天,在咱们CPU工厂的不远处,主板上新来了一家叫GPU的单位,公开抢我们饭碗,今天召集大家就是商讨应对之策”

“GPU,我知道,就是图形处理器,就是干图形计算的,怎么能抢我们的活呢?领导你多虑了吧”,我回头一看,原来是六号车间的代表小六在发言。

“哦,看来你对他们很了解嘛?”,领导问小六。

小六有些不好意思的说到:“实不相瞒,在跳槽到这里来之前,我在另外一家CPU工厂上班,那里的主板上就有个GPU。他们主要承接一些图形渲染相关的计算工作,不过他们都是执行一些固定的操作,计算电路都是固定的,根本都不具备可编程的能力,跟我们CPU那是没法比的”

“小六,士别三日都当刮目相看,你有多久没见他们了?现在他们不仅和我们一样可以编程,据说团队规模扩张,现在已经是通用计算架构了,名字都要改了,叫什么GPGPU,连计算速度都比我们快了!”,领导说的掷地有声,会场一下安静了下来。

“阿Q、小六,你们两个想办法混进去他们工厂摸摸情况,汇报以后咱们再继续讨论,大家意下如何?”,领导望向大家。

我还没反应过来,大家都纷纷说好,看来这份差事我是躲不掉了。

潜入GPU内部

当天夜里,我与小六偷偷溜进了GPU工厂,没想到虽然夜已深,但里面还是灯火通明,一派繁忙的景象。

等到进入了他们工作的地方,我和我的小伙伴都惊呆了!好家伙,这规模也太大了,放眼望去,全是一个个的工作车间,一眼望不到头。

“Q哥,他们这也太猛了,咱们CPU也就8核,才8个车间,他们这我目测不下1000个车间,难道他们有1000多个核,看得我眼睛都花了!”,小六满脸惊讶的说到。

“我看没那么简单,你仔细看他们的工作车间,比我们的可简陋多了”

“还真是,那些橙色的地方应该就是缓存吧,比我们可小多了。还有他们好像大部分都是计算电路,逻辑控制电路很少”

“你们不去干活,躲在这干嘛?”,不好,我们被巡逻的给发现了!但好像他并没有认出我们的身份,把我们当成这里的员工了。

我俩尴尬的点头笑着说到:“休息休息,我们这就回去”

“你俩快去1024号车间,那里还缺人手”

“好嘞好嘞,这就去,这就去”

我堂堂CPU一号车间的指令执行长官阿Q,居然在这里对这个小小巡逻点头哈腰的,想想都气!

GPU的秘密

找了好久,我俩终于来到1024号车间,这里有一个小哥正忙的不可开交。见到我们到来,小哥高兴的说到:“你们可算是来了,我这都忙死了”

“今天都这么晚了,这是在忙着执行什么程序啊”,我试探性的问到。

“今天有点背,程序员下班前留了一个深度学习的神经网络训练任务给我们,今儿晚上大家肯定没法休息了,搞不好得通宵”,小哥一边忙着操作计算电路进行数据计算,一边对我们说到。

小六给我使了个眼神,然后对小哥说到:“你空了给我们介绍下工作吧,让我们也干点活”

“对,对,让我们也帮你分担点”,我跟着附和。

“你们先坐坐,这一轮训练马上就要结束了,趁着空当给你们介绍介绍。”,小哥说完擦了擦额头的汗。

趁着小哥在忙,我俩四处转了转,“小六啊,他们这车间比起咱们CPU确实显得寒酸了许多。我们每个车间可都是标配了一二级缓存的,少说也有几百KB,他们可没有这个待遇。而且他们的计算资源电路也简单很多,像我们用于分支预测和乱序执行的逻辑控制电路这里都没有”

“Q哥高手啊,这里这么多电路你都能认得出来?”

“俺在CPU厂里混了那么多年,这都认不出来那不白干了吗?”

“不对啊,按照你说的,他们这里的电路应该很少才对,可是你看怎么这么多”,小六的话引起了我的注意。

再仔细一看,计算电路虽然没我们那么复杂,但计算单元ALU却有很多份!要知道在咱们CPU工厂,一个车间也只有一份。

正在纳闷之际,小哥忙完了手里的活,走了过来,“总算可以歇口气了”。

“大哥辛苦了,想问一下这里怎么这么多重复的计算电路啊?这不浪费吗?”,我赶紧上前问到。

小哥不以为然,“这可不是浪费,在咱们GPU工厂的车间里,每个车间都配置了很多个计算单元,我可以操作它们同时进行批量的数据计算,提升速度”

“批量计算?还能同时?”,小六问到。

“是啊,像我们GPU工厂承包的活基本都是这种类型,像3D图像渲染中每个像素的计算,深度学习中张量和矩阵的计算,它们有一个特点,都是算法固定,只是数据不一样而已。同样的计算逻辑,我喂给它们不同的数据就可以并行计算了!这个叫SIMT(Single Instruction,Multiple Threads)技术”,小哥得意的说到。

“SIMT?这技术怎么感觉那么眼熟呢?”,我问到。

小哥继续笑着说到:“那可不,这一招CPU他们早就用过了,我们这是借鉴”

“哦,我想起来了,Q哥,他说的应该是SIMD(Single Instruction Multiple Data,单指令多数据流),一条指令中可以批量操作多个数据,提升性能”

小六一下点醒了我,“原来如此!我们,哦不,是他们CPU只是批量操作数据,GPU这里是批量执行计算,真是妙啊!”

“Q哥,听起来不错啊,为什么咱们CPU不能这样搞呢?”,小六悄悄问我。

“你个笨蛋,咱们CPU内部有八个车间,每个车间同时执行一个线程不就是并行吗?只不过咱们执行的多个线程都是功能各异,有些是IO密集,有些是计算密集,既有缓存和逻辑控制电路的的建设成本,还要做到通用,没有办法像他们这样搞很多个出来。”

接下来,小哥带我们来到了操作平台,告诉我们如何操作这一堆电路执行计算工作,我自然是轻车熟路了,这比在我们那儿简单多了。

“那边是寄存器和保存执行上下文的地方,你们等会儿会用到。”,小哥指着一堆箱子说到。

“哎,老哥,这执行上下文怎么这么多,比计算单元ALU还多”,我问到。

小哥一拍脑袋说到:“嗨,瞧我这记性,忘记给你们说了。咱们GPU虽然以计算见长,但还是会遇到分支判断的场景,咱们这又没有CPU那样的分支预测和乱序执行的能力,你们不知道内存那家伙可慢了,有时候难免会遇到停顿等待的情况,浪费计算资源。后来领导交代了,为了充分利用计算资源,不让ALU闲置着,遇到这种停顿的情况,就把计算资源ALU挪出来去执行别的计算代码。所以就需要多预留一些执行上下文来保存现场了。”

“卧槽,这不就是超线程技术嘛!又抄袭我们CPU”,我几乎突口而出,说完看了一眼小六。

“怎么能叫抄袭呢,借鉴,是借鉴哈”,小哥龇着牙笑着。

小六突然问了一句:“咱们GPU这么厉害,以后是不是都没他们CPU啥事儿啦?”

小哥摇了摇头:“这话说的有些吹牛皮了,我们连中断处理和虚拟内存都没有,还需要借助CPU他们的帮忙才能工作呢,是不可能取代他们的。他们CPU太忙了,又要忙着计算,又要忙着执行IO,处理中断,还有各种复杂逻辑的判断处理,我们就简单了,没有那么多顾虑,就是用人海战术,做纯粹的计算工作,人多力量大,又能并行,所以在数学计算方面我们要快得多。不过总体来说我们和CPU是合作关系,不是竞争关系!”

听到小哥这么一说,我俩悬着的心总算放了下来,这下回去可算是给领导有个交代了。

我正想的出神,小六从背后悄悄拍了拍我,使了个眼神。

顺着他示意的地方望去,只见刚才那个巡逻正带着几个保安朝我们这边走了过来。

来不及向小哥告别,我俩赶紧溜之大吉···

往期TOP5文章

那天,我被拉入一个Redis群聊···

CPU明明8个核,网卡为啥拼命折腾一号核?

因为一个跨域请求,我差点丢了饭碗

完了!CPU一味求快出事儿了!

哈希表哪家强?几大编程语言吵起来了!

主板上来了一个新邻居,CPU慌了!的更多相关文章

  1. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  2. Linux内核创建一个新进程

    张雨梅   原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 创建新进程 如果同一个程序被多 ...

  3. 第六周——分析Linux内核创建一个新进程的过程

    "万子恵 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 &q ...

  4. 分析Linux内核创建一个新进程的过程

    一.原理分析 1.进程的描述 进程控制块PCB——task_struct,为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct ...

  5. 分析Linux内核创建一个新进程的过程【转】

    转自:http://www.cnblogs.com/MarkWoo/p/4420588.html 前言说明 本篇为网易云课堂Linux内核分析课程的第六周作业,本次作业我们将具体来分析fork系统调用 ...

  6. linux采用模块方法,添加一个新的设备

    该文转载自:http://rangercyh.blog.51cto.com/1444712/521244 系统调用是操作系统内核和应用程序之间的接口,而设备驱动程序是操作系统内核和机器硬件之间的接口. ...

  7. (Facebook开源项目)Fresco:一个新的Android图像处理类库

    在Facebook的Android客户端上快速高效的显示图片是非常重要的.然而多年来,我们遇到了很多如何高效存储图片的问题.图片太大,而设备太小.一个像素点就占据了4个字节数据(分别代表R G B和a ...

  8. 第六周分析Linux内核创建一个新进程的过程

    潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: ...

  9. VirtualBox 4.3“不能为虚拟电脑 打开一个新任务”解决方案 - 转

    最近做项目因为设计不同网络,还要大家文件和数据库服务器环境,所以需要多台机器进行测试,最简单的方法当然是跑多个虚拟机了.虽然不可否认 VMware 确实强大,不过相比较起来我更喜欢功能比较简单轻省的 ...

随机推荐

  1. C++类模板声明与定义为何不能分开

    我们用C++写类的时候,通常会将.cpp和.h文件分开写,即实现和声明分开写了:但在C++的类模板中,这种写法是错误的. 在<C++编程思想>的第16章的"16.3模板语法&qu ...

  2. 【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常

    1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatExcep ...

  3. 使用Socket通信(二)

    这个socket有梗,主要是服务器端有梗,可能大家会碰到同样的问题,网上查了好久,这里分享一下解决办法.首先在第一个module建一个类SimpleServer,这个类就是服务端,建好之后在代码左边有 ...

  4. 关于Python的面相对象编程

    Python 其实不是面向对象的语言,更像是C语言的面向过程编程的语言 但 Python 也支持 class 关键字来实现类的声明与创建 但 Python 的对象更像是 JavaScript 的函数 ...

  5. 读书摘要观后感与总结:《Glibc内存管理:ptmalloc2源代码分析》

    更新中 在Linux平台下做漏洞利用的时候,针对于Heap部分总是有些不求甚解,下面开个博文来记录下<Glibc内存管理:ptmalloc2源代码分析>这本书的读后感和收获,一些简单的点将 ...

  6. 使用udev高效、动态的管理Linux设备文件

    导读: 在Linux环境中,所有的设备都以文件的形式存在,在早期的Linux版本中,/dev目录包含了了所有可能出现的设备文件,很难想象Linux用户如何从大量的设备文件中找到想要的设备文件.举个例子 ...

  7. 4G DTU的通信距离是多少

    4G是现今应用非常广泛的一种通信技术,主要是为广义的远程信息处理提供服务.随着计算机与各种具有处理功能的智能设备在各领域的日益广泛使用,数据通信的应用范围也日益扩大.在物联网领域中,4G是移动设备实现 ...

  8. Redis常用命令(3)——Hash

    HDEL 格式:HDEL key field [field ...] 作用:删除哈希表中的一个或多个域. 返回值:删除的域的个数. HEXISTS 格式:HEXISTS key field 作用:判断 ...

  9. Python3网络学习案例四:编写Web Proxy

    代理服务器的定义和作用请走百度百科~ 1. Web Proxy的实现思路 这是基于上一篇"编写Web Server"写的,主要逻辑见下图: 我们要写的就是中间的Web Proxy部 ...

  10. 使用IDEA完成一个SpringBoot的demo

    打算开始做毕业设计了,写一些博客记录一下做毕业设计的过程. 前两天从老师那里拿了学长学姐做的非常简陋的代码,配置环境跑了一下,老师找我的时候说还剩下50%的工作,但感觉至少还有70%. 废话不多说,今 ...