下面答主给出了原因,我觉得合理,因为predict一次的cpu矩阵运算相比于cpu和gpu的通信时间还是快的,因而出现cpu好像更快的情况

原问题:偶然一次只用训练好的rnn做predict的尝试让我很奇怪,用gpu的计算速度居然比cpu慢,时间是用python的time算的,连续算了5次都是cpu更快....设备的话,n卡是gtx1080,u是E5-2660 v4,框架是tf

这让我很好奇,对于深度网路任务,GPU在哪部分效率是比cpu高的,又是在哪些部分针对性优化的


1. 修改单元数量,观察速度比的变化,单元数目越大 GPU 越有优势

2. 关于数据拷贝,你真的需要从 CPU 拷贝到GPU 吗?如果所有计算的 Op 都有 GPU 版本,那其实没必要有拷贝的,数据拷贝可以在需要的时候做一次

3. 用 GPU 写整个 RNN,比如 cudnn 里提供的 RNN 就比 TF 里快一个数量级的样子


GPU比CPU快其实只是讲运算速度,忽略了数据通信。而且GPU本身比较擅长矩阵计算。

其实上,我曾经也因为这个问题看过许多在StackOverflow和Quora上的问题。

在训练的时候,由于数据量很庞大,计算的时间足够掩盖数据传递的时间,所以GPU会快一些。

但是如果做成serving,当然也要看serving怎么做,比如像某度AI那样,每次提交一个样本并且样本规模不大的情况下,至少我自己实测是CPU快。(比如说文本分析,相对的,分析高清视频可能又是另一回事了。)

大图片的话运算都是大型矩阵了,还是GPU快一些。

你统计时间的时候大概没办法把数据通信和计算完全分开,所以才有问题。


https://www.zhihu.com/question/283920697/answer/560782950


数据通过cpu从cpu拷贝到GPU,然后在GPU上进行计算,然后把计算结果从GPU拷贝回内存中。使用GPU计算增加的成本就是cpu和gpu之间数据通信的时间。然而真正开始计算的时候,GPU的计算速度比CPU计算快很多(足够cover掉数据拷贝时间)。所有GPU效率高的地方在并行计算部分。题主遇到的现象要么是时间统计错了要么就是代码用错了,不然就是硬体坏了又或者是数据太小,根本没必要用GPU计算。不然使用GPU肯定比CPU快。


我觉得你更应该好奇的的是GPU比CPU慢的问题出在哪里了


对于有深度学习训练需求的朋友还是很建议大家在智星云租用GPU,性价比非常高。

CPU由运算器(ALU)和控制器(CU)两大部件组成。此外,还有若干个寄存器和高速缓冲存储器及实现它们之间联系的数据、控制及状态汇流排。ALU用来执行算术运算、移位操作、地址运算和转换;寄存器件用于保存中间数据以及指令;CU负责对指令解码,并发出为完成每条指令所要执行的各个操作的控制信号(见图24-1)。

▲图24-1 CPU的结构图(冯·诺依曼构架)

CPU的运行遵循冯·诺依曼构架:存储程序顺序执行。程序执行过程如下:CPU根据程序计数器(Program Counter,PC)从内存中得到指令,然后通过指令汇流排将指令送至解码器,将转译后的指令交给时序发生器与操作控制器,再从内存中取得数据并由运算器对数据进行处理,最后通过数据汇流排将数据存至数据缓存寄存器以及内存中。

CPU是一步步来处理数据的(见图24-2)。在处理大规模与高速数据时,CPU很难满足需要。

▲图24-2 CPU的工作原理

当晶元的集成度增加后,漏电流也随之增大,但时钟频率的提高有限,而且晶体管的线宽很快就会到达物理极限,因此晶元的性能很难靠减小晶体管线宽来提高。于是,人们开始在设计上做文章,首先想到的是让多个处理器并行工作,这样效率自然提高了很多,于是多核CPU和GPU由此诞生。

另一个想法是晶元不变,而在应用系统上加人工智慧,以此取得计算上的收益。随著大数据时代的到来,以人工智慧为导向的应用系统也越来越多了。

在现代的计算机中,图形处理越来越重要,于是一个专门处理图形的核心处理器GPU应运而生。对于处理图形数据来说,图形上的每个像素都要被处理,这就是一个大数据,因此对运算速度的要求很高。但GPU所需的功能比较单一,于是就诞生了基于优化图形处理的GPU构架(见图24-3)。

▲图24-3 CPU与GPU构架对比示意图

CPU的功能模块多,适合复杂的运算环境,大部分晶体管用在控制电路和Cache上,少部分晶体管用来完成运算工作。GPU的控制相对简单,且不需要很大的Cache,大部分晶体管可被用于各类专用电路和流水线,GPU的计算速度因此大增,拥有强大的浮点运算能力。

当前的多核CPU一般由4或6个核组成,以此模拟出8个或12个处理进程来运算。但普通的GPU就包含了几百个核,高端的有上万个核,这对于多媒体处理中大量的重复处理过程有著天生的优势,同时更重要的是,它可以用来做大规模并行数据处理。

尽管,GPU是为了图像处理设计的,但它的构架并没有专门的图像处理演算法,仅仅是对CPU的构架进行了优化,因此GPU不仅在图像处理中应用广泛,还在科学计算、密码破解、数值分析、大数据处理、金融分析等需要并行运算的领域中广为应用。GPU是一种较为通用的专业晶元。

GPU的线路板一般是6层或4层PCB线路板。GPU的所有元器件都集成在它的线路板上,线路板影响著GPU的质量。

GPU线路板上最大的晶元就是GPU,它上面有散热片和风扇。作为处理数据的核心,GPU大多采用单晶元设计,而专业的GPU也有采用多个GPU晶元的。

GPU线路板上的另一个重要晶元是数/模转换器(RAMDAC)。它的作用是将显存中的数字信号转换成显示器能够识别的模拟信号,速度以MHz为单位,速度越快,图像越稳定,它决定了GPU能支持的最高刷新频率。为了降低成本,多数厂商都将数/模转换器整合到了GPU晶元中,但仍有一些高档GPU采用独立的数/模转换器晶元。

GPU的数据是存放在显存内的,显存是用来存储等待处理的图形数据信息的。显存容量决定了GPU支持的解析度、色深。解析度越高,显示的像素点越多,所需显存容量越大。对目前的三维GPU来说,需要很大的显存来存储Z-Buffer数据或材质数据。

显存有两大类:单端和双端显存。前者从GPU中读取数据并向数/模转换器传输数据且经过同一埠,数据的读写和传输无法同时进行;后者则可以同时进行数据的读写与传输。目前流行的显存有SDRAM、SGRAM、DDR RAM、VRAM、WRAM等。

GPU线路板上采用的常见电容类型有电解电容、钽电容等,前者发热量较大,许多名牌GPU采用钽电容来获得性能上的提升。电阻也是如此,常见的金属膜电阻、碳膜电阻越来越多地让位于贴片电阻。

GPU线路板上有对GPU进行供电的供电电路。它的作用是调整来自主板的电流以供GPU稳定地工作。由于GPU越来越精密,因此对GPU供电电路的要求也越来越高。

GPU线路板上还有一款用于VGA BIOS的快闪记忆体。它包含了GPU和驱动程序的控制程序、产品标识等信息。该快闪记忆体可以通过专用程序进行升级,改善GPU性能,有时能给GPU带来改头换面的效果。

GPU线路板上有向GPU内部提供数/模转换时钟频率的晶体振荡器等元器件。此外,由于GPU的频率越来越高,工作时热量很大,GPU线路板上还会有一个散热风扇。

03 计算机图形的生成原理

计算机的输出图像是模拟信号,而计算机处理的是二进位数字信号。数据离开CPU后,经过以下四个步骤,才到达显示屏成为图像。

  • 经汇流排进入GPU,将CPU送来的数据送到GPU里进行处理。(数字信号)
  • 从GPU进入显存,将GPU处理完的资料送到显存。(数字信号)
  • 从显存进入数/模转换器,从显存读取出数据然后送到数/模转换器进行数据转换。
  • 从数/模转换器进入显示器,将转换完的模拟信号送到显示屏(模拟信号)

显示屏上显示的是最后处理的结果,显示效能的高低由以上四个步骤共同决定,它与GPU的效能不同,GPU的效能决定了中间两步。第一步是由CPU进入到GPU,最后一步是由GPU将资料送到显示屏上。

近几年,人工智慧中的深度学习演算法大热,让GPU制造商大火。其实,深度学习的理论早在20世纪七八十年代就有了,但它的崛起主要是因为GPU的出现。英伟达公司的联合创始人与CEO黄仁勋说:「因为人工智慧世界的大爆炸发生了,人工智慧计算机科学家们找到了新演算法,让我们能利用深度学习的技术,取得无人敢想的成果。」

04 显卡的诞生

提到显卡和GPU,人们会想到游戏和电影中精美的三维图形。其实,早期显卡不但不能处理三维图形,甚至连二维图形都无法处理,它仅具备显示能力。今天,GPU不但能够处理复杂的三维图形,还能作为协处理器,在通用计算中使用。

电脑图形处理器的发展是从图形显示适配器开始的,到图形加速器,再到图形处理器即GPU,其功能在不断增强。

从显示适配器到图形加速卡的转变是显卡历史上的重要转折点。从此,显卡开始承担计算机中的部分计算任务,这奠定了其日后与CPU分庭抗礼的基础。

电脑图形学是在1962年,由麻省理工学院的伊凡·苏泽兰(Ivan Edward Sutherland)在他的博士论文中提出来的。这位香农的学生是电脑图形之父。在之后的20年里,电脑图形学一直在不断发展,但没有产生专门的图形处理晶元。

在显卡出现之前,电脑中通常的图形输出工作由CPU承担。显卡的出现不是为了加速电脑的图形输出,最初的显卡是为了让游戏机上的二维图形显示加速。这款游戏是雅达利公司于1977年推出的雅达利2600。同期流行的电脑是苹果-II,而苹果-II的图形输出由CPU承担。

进行图形处理时需要电脑具备较强的并行计算能力,对精度和运算强度的要求也很高,对早期的电脑来说,这很难。当时的显卡仅仅是将CPU计算生成的图形翻译成显示设备能识别的信号来进行显示,不具备计算能力,被称作图形适配器(VGA Card)。

▲图24-4 Antic晶元

雅达利2600拥有专门负责在电视上输出图形的8位Antic晶元和音频的CTIA晶元(见图24-2)。雅达利2600的设计者杰伊·迈纳(Jay Miner),也是20世纪80年代图形性能最强大的电脑阿米加(Amiga)的设计者。雅达利2600内部的Antic晶元是显卡的老祖宗。

1981年,IBM推出了最早的装在5150个人电脑上的MDA(Monochrome Display Adapter)和CGA(Color Graghic Adapter)两款二维加速卡。

MDA仅支持黑色和绿色的文字,图形内存为4KB,无法产生图形。CGA是IBM个人电脑中最早的彩色显卡,640×200的解析度,4种颜色。由于CGA的解析度太低,因此有了EGA增强图形适配器(Enhanced Graphics Adapter)。

MDA、CGA、EGA三种标准都是以TTL数字信号输出的。IBM很快研发出了基于ISA(Industry Standard Architechture)的显卡,是最古老也是最普遍使用的VGA显卡。

直到VGA标准出现,显卡才和主板分开,VGA(Video Graphic Array)即显示绘图阵列,它的数字模式可以达到720×400种颜色,绘图模式可达640×480×16种颜色,以及320×200×256种颜色。直到此时,显卡才能同时显示256种色彩。

VGA标准采用了模拟信号输出,其彩色显示能力大大加强,原则上能显示无穷多种颜色,因此VGA迅速成为显示设备的标准。

这个时代,出现了第一款真正的显卡——Trident 8900/9000显卡,它是ISA/16色显卡的代名词,也是三维显卡的真正鼻祖,它第一次使显卡独立于电脑,显卡从此不再是集成的一块晶元,这为以后独立显卡的发展提供了可能性。

VGA之后又出现了SVGA标准。它是VGA标准的衍生产物,改良过的SVGA图形适配器已经能够支持16比特的彩色了。最早的SVGA显卡是Cirrus Logic的GD5428/5429,它集成了1~2MB显存,支持16比特的彩色。不过GD5428/5429仍使用VESA汇流排,因此卡身很长,成本不低。

真正将SVGA发扬光大的是S3735(Tr64V)以及Trident 9680,它们能够达到1024×768的解析度,并且在低解析度的情况下支持32比特真彩色。

1984年,硅图公司(Silicon Graghics Inc.,SGI)推出了专业的高端图形工作站,并配置了专门的图形硬体,称为图形加速器。它引入了许多经典概念,如顶点变换和纹理映射。在随后的10多年里,硅图公司又研发了很多面向专业领域的图形工作站,但它们的价格昂贵,无法进入个人电脑市场。

1984年,IBM又推出了两款显卡,它们是PGC(Professional Graghics Controller)和EGA。这两款显卡能够支持二维和三维的图形加速,并被用于计算机辅助设计。

1986年,德州仪器推出了第一款具有在晶元上进行图形处理功能的微处理器TMS34010。这款处理器需使用特殊的图形编程语言。1990~1992年,它是视窗加速卡中,德州仪器图形框架(Texas Instruments Graghics Architecture,TIGA)的基础。

1987年,康莫多国际(Commodore International)公司推出了阿米加500电脑。该电脑拥有功能强大的图像处理专用晶元。这款晶元也是在杰伊·迈纳的倡导下加上的,这款显卡给阿米加500带来了704×576像素的图形显示功能。

除了显卡外,阿米加500的音频输出性能也极好。虽然阿米加500的显卡不是第一块应用在电脑上的显卡,但该显卡是第一款真正意义上的二维加速卡。阿米加500电脑的诞生让人们意识到图形加速卡对于电脑的意义(见图24-5)。

▲图24-5 阿米加500电脑用的显卡

1988年,支持256种颜色显示的第一代显卡问世。它是ATI公司生产的ATI VGA Wonder显卡。这是一款真正意义上的第一代显卡,时至今日VGA一词还是显卡的代名词。

05 前GPU时代

1989年,多家晶元制造商联合创立了影像电子工程标准协会(Video Electronic Standards Association,VESA)。1994年年底,VESA发表了64位架构的VESA Local Bus标准,80486及以后的个人电脑大多采用该标准的显卡。

1991年,英特尔推出了一种局部汇流排PCI(Peripheral Component Interconnect)。在结构上,PCI是在CPU和原来的系统汇流排之间插入的一级汇流排,由一个桥接电路对该层进行管理,并实现介面间的协调数据传送。管理器提供信号缓冲,使其支持10种外接设备,同时在高时钟频率下保持高性能。PCI为显卡、音效卡、网卡等设备提供了介面。

显卡介面制约著显卡技术的发展。为了加快显卡与汇流排间的传输速度,使用高带宽的介面汇流排势在必行。在民用市场,显卡介面的起点是最普通的ISA介面,ISA介面包含ISA汇流排、EISA汇流排和VESA汇流排,ISA介面是一种统称。

当VGA标准流行之后,ISA介面就显得力不从心了,由PCI取而代之,但PCI介面并未持续多久就被更为先进的AGP(Accelerated Graphics Port)所淘汰。与PCI相比,AGP在带宽上有了突飞猛进的发展,还能有效利用系统内存。

但AGP的半开放性格局使之不断面临兼容性的困扰。从最早的AGP 1×到AGP 8×,真正具有里程碑意义的只有AGP 4×。如今AGP 8X也开始被PCI Express×16取而代之了。

1991年,支持微软视窗操作系统图形加速的第二代显卡(Graphics Card)问世。

VGA的唯一功能就是输出图像,图形运算全靠CPU,当微软的视窗操作系统出现后,PC不堪重负。1991年5月,ATI发布Mach8,这是ATI第一款优化微软视窗操作系统图形界面的显卡。ATI用专用晶元进行图形运算处理,将CPU解放了出来,且让视窗操作系统的界面运行起来非常流畅,图形化操作系统的资源消耗大降、实用性大增。

Mach8就是ATI 38800-1晶元。Mach8显卡由两个晶元组成,主晶元为VGA Wonder XL 24(ATI 28800-6),负责显示输出,辅助晶元是Mach8专门用于加速视窗操作系统图形界面的,通过双晶元的设计增强了绘图能力。

为了与只具备显示功能的VGA相区别,具备图形处理能的显卡被称为Graphics Card,即图形加速卡,它加速了视窗的普及,加速了PC图形化界面的步伐。

1991年6月,S3公司推出了一款二维图形加速卡S3 86C911。它是最早的视窗加速卡之一,支持16位256种颜色。此后,二维显卡进入了群雄争霸时代。当时,Trident、S3、Matrox三大厂商占据主导地位。

这些二维显卡角逐的激烈程度丝毫不亚于今天的三维显卡的争斗。由此也产生了不少经典产品:Trident的9440、S3的Trio64V+、Matrox的Millennium等。其中性能最优的是Millennium及后继产品,但因其售价昂贵没有得到很多市场份额。当时,最成功的是S3的Trio 64V+。等到了voodoo时代,它仍是voodoo的好搭配。

第一款三维显卡是三维实验室(3Dlabs)制造的GLINT 300SX(见图24-6)。它的三维图形的高洛德著色(Gouraud Shading),深度缓冲,全屏抗锯齿,Aplha混合等特性被沿用至今。300SX正式开启了计算机三维显示的大门,但它也有很多不足,比如没有数模转换晶元(RAMDAC),要加上数模转换晶元才能将内容输出到显示器上。

▲图24-6 300SX GPU

06 多媒体时代的显卡

1994年,支持视频加速的第三代显卡出现了。

这时的PC已经进入了多媒体时代,二维图形处理在第二代显卡面前已不是问题了,但越来越多的视频图形解码让CPU不堪重负,因此集成了简单的视频解码器的第三代显卡出现了。

ATI在1994年推出的Mach64是第一款广为人知的多媒体显卡,它的硬体支持YUVtoRGB颜色转换和硬体缩放。有了它的PC能应付基本的AVI和MPEG-1播放,而不需要昂贵的专用硬体解码器,使得多媒体PC的成本大幅下降。

1994年,第四代显卡,三维加速显卡出现了。

三维显卡前期,令人难忘的是3Dfx Interactive公司(简称了Dfx)。1996年,3Dfx推出的voodoo显卡奠定了3Dfx在图形显示领域的地位,但它并不普及,因为太贵了。当时的RAM很贵,而voodoo需要很大的RAM。

另外voodoo要卖到500美元才能赚钱,voodoo没有二维输出能力,用户必须外加一块100美元左右的二维加速卡才能正常使用它。高昂的成本让个人电脑厂商对它避而远之。据说,3Dfx承诺免费提供半年的voodoo晶元都被拒绝了。图24-7是3Dfx推出的第一款三维显卡。

▲图24-7 3Dfx的第一款三维显卡

3Dfx的运气很好。1996年夏,晶元工艺的更新让RAM价格大跌,3Dfx借机得以推广,而各游戏和个人电脑生产厂家也改变了态度,开始使用voodoo。当voodoo以300美元的价格上市时,市场被引爆了。voodoo支持DVD和OpenGL,但二者还较粗糙,抑制了voodoo的性能。3Dfx只好开发图形API——Glide。

20世纪末,3Dfx的崛起宣布了三维显卡进入了白热化竞争时代。S3、Matrox、3Dlabs等厂商都加入了竞争,但它们均不敌voodoo。除voodoo以外的三维显卡的代表作是ATI的3DRage II+DVD。

这一款1996年秋天发布的显卡,其二维引擎来自Mach64。它具有MPEG-2硬体动态补偿功能,能在播放DVD时起到辅助作用,这是非常先进的。加上ImpacTV晶元,它还可以播放电视节目。3DRage II的驱动支持也非常好,无论是游戏用户还是专业用户都可以得到对应的驱动程序。只是ATI当时专注于OEM市场,而非零售。

3Dfx为了解决voodoo没有二维加速功能的问题,于1997年开发了具有二维加速功能的voodoo rush。但是其性能很差,它以主卡加副卡的方式实现二维加速,且二维晶元来自第三方。voodoo rush成了一款二维显示很差、三维性能又比voodoo差的显卡。它对Glide的支持也很差,经常无法加速。

不久,ATI研发出了3D Rage Pro。因其强大的DVD回放功能成了当时OEM多媒体电脑的首选。ATI尝试过进入零售市场,但因其很差的驱动失败了,等到ATI驱动没问题的时候,Rage Pro已过时了。3D Rage Pro是最早支持AGP介面的显卡之一。

ATI在被AMD收购之前一直是计算机图形领域的领头羊之一。这是一家由三位来自中国香港的华裔在1984年于加拿大创建的计算机图形公司。其主要创始人何国源,1950年出生于中国广东省。

12岁时,何国源来到香港。因家庭贫困,他20岁时只身来到学费和生活费较低的台湾就读大学。1984年,已在电脑领域有了丰富工作经验的何国源移居加拿大,创办了计算机图形公司——ATI。

1998年,3Dfx推出了voodoo2。voodoo2的性能比voodoo提高了2~3倍,它还增加了大量新的画质提升技术。voodoo2降低了对CPU的依赖,很多低端的CPU也可以流畅运行大型三维游戏。

voodoo2还引入了SLI技术,能让两张voodoo2显卡同时运算同一画面。有1/3以上的voodoo2用户是双卡用户。voodoo2让3Dfx成了三维显卡初期的绝对老大。

1998年,3Dfx犯了两个致命的错误:一是收购了一家名为STB的公司,自行生产GPU,舍弃了第三方合作伙伴;二是对Glide API的封锁,导致游戏厂商开始对其敬而远之,表面上看3Dfx因voodoo2风光无限,但这也是其衰落的开始。

3Dfx在1998年犯的错误并没有让它面临危机,这是因为没有竞争对手。到了1999年情况就不同了,几件事让3Dfx面临灭顶之灾。先是DX7带来了硬体TL,硬体TL的出现彻底解放了CPU,即便是低端CPU,搭配了支持硬体TL的显卡也可以流畅地玩游戏。大量视觉技术的添加使得Glide的优势丧失殆尽。

3Dfx于1999年发布的voodoo3不支持新出现的AGP4x,仅支持2x,但只支持介面,不支持AGP的特性。voodoo3的16比特渲染在大势所趋的32比特潮流面前毫无竞争力。

同时,来自英伟达的TNT2以其强大的性能干脆利落地将voodoo3打败了。与同年发布的Gefroce 256相比,它只是一款TNT的改进产品,但这未能阻碍TNT2成为一代经典。

1998年2月,英特尔发布了和Real 3D合作设计的i740显卡(见图24-8)。这是迄今为止英特尔推出过的唯一一款独立显卡。i740支持2X AGP规格,核心频率为80MHz,像素填充率为55MT/s,支持DVD解压、平行信息处理、精准像素描插补等技术。

i740的2D效果并不令人满意,但它的三维性能还不错,它首次在民用显卡中采用散热风扇。后来,英特尔将i740改进后集成进了810晶元组。

▲图24-8 英特尔的i740显卡


矩阵运算当然是唯gpu马首是瞻


推荐阅读:
相关文章