0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GPU如何加快软件应用程序的运行速度

电子工程师 来源:lq 2019-01-15 17:47 次阅读

CPUGPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。

这个视频,非常具象的表述了CPU和GPU在图像处理时的不同的原理和方法。看到GPU的模型喷射出的一瞬间,你就秒懂了。

根据上面视频中的比喻,你应该很清楚CPU和GPU就呈现出非常不同的架构:

绿色的是计算单元

橙红色的是存储单元

橙黄色的是控制单元

GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。

GPU 如何加快软件应用程序的运行速度

GPU 加速计算可以提供非凡的应用程序性能,能将应用程序计算密集部分的工作负载转移到 GPU,同时仍由 CPU 运行其余程序代码。从用户的角度来看,应用程序的运行速度明显加快.

GPU 与 CPU 性能比较

理解 GPU 和 CPU 之间区别的一种简单方式是比较它们如何处理任务。CPU 由专为顺序串行处理而优化的几个核心组成,而 GPU 则拥有一个由数以千计的更小、更高效的核心(专为同时处理多重任务而设计)组成的大规模并行计算架构。

从上图可以看出:

Cache, local memory: CPU > GPU

Threads(线程数): GPU > CPU

Registers: GPU > CPU

SIMD Unit(单指令多数据流,以同步方式,在同一时间内执行同一条指令): GPU > CPU。

CPU 基于低延时的设计:

CPU有强大的ALU(算术运算单元),它可以在很少的时钟周期内完成算术计算。

当今的CPU可以达到64bit 双精度。执行双精度浮点源算的加法和乘法只需要1~3个时钟周期。

CPU的时钟周期的频率是非常高的,达到1.532~3gigahertz(千兆HZ, 10的9次方).

大的缓存也可以降低延时。保存很多的数据放在缓存里面,当需要访问的这些数据,只要在之前访问过的,如今直接在缓存里面取即可。

复杂的逻辑控制单元。当程序含有多个分支的时候,它通过提供分支预测的能力来降低延时。

数据转发。 当一些指令依赖前面的指令结果时,数据转发的逻辑控制单元决定这些指令在pipeline中的位置并且尽可能快的转发一个指令的结果给后续的指令。这些动作需要很多的对比电路单元和转发电路单元。

GPU是基于大的吞吐量设计

GPU的特点是有很多的ALU和很少的cache. 缓存的目的不是保存后面需要访问的数据的,这点和CPU不同,而是为thread提高服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram(因为需要访问的数据保存在dram中而不是cache里面),获取数据后cache会转发这个数据给对应的线程,这个时候是数据转发的角色。但是由于需要访问dram,自然会带来延时的问题。

GPU的控制单元(左边黄色区域块)可以把多个的访问合并成少的访问。

GPU的虽然有dram延时,却有非常多的ALU和非常多的thread. 为啦平衡内存延时的问题,我们可以中充分利用多的ALU的特性达到一个非常大的吞吐量的效果。尽可能多的分配多的Threads.通常来看GPU ALU会有非常重的pipeline就是因为这样。

所以与CPU擅长逻辑控制,串行的运算。和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。

GPU的工作大部分就是这样,计算量大,但没什么技术含量,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已。而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?GPU就是这样,用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。很多涉及到大量计算的问题基本都有这种特性,比如你说的破解密码,挖矿和很多图形学的计算。这些计算可以分解为多个相同的简单小任务,每个任务就可以分给一个小学生去做。但还有一些任务涉及到“流”的问题。比如你去相亲,双方看着顺眼才能继续发展。总不能你这边还没见面呢,那边找人把证都给领了。这种比较复杂的问题都是CPU来做的。

总而言之,CPU和GPU因为最初用来处理的任务就不同,所以设计上有不小的区别。而某些任务和GPU最初用来解决的问题比较相似,所以用GPU来算了。GPU的运算速度取决于雇了多少小学生,CPU的运算速度取决于请了多么厉害的教授。教授处理复杂任务的能力是碾压小学生的,但是对于没那么复杂的任务,还是顶不住人多。当然现在的GPU也能做一些稍微复杂的工作了,相当于升级成初中生高中生的水平。但还需要CPU来把数据喂到嘴边才能开始干活,究竟还是靠CPU来管的。

什么类型的程序适合在GPU上运行?

(1)计算密集型的程序。所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。可以做一下对比,读内存的延迟大概是几百个时钟周期;读硬盘的速度就不说了,即便是SSD, 也实在是太慢了。

(2)易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构, 他有成百上千个核,每一个核在同一时间最好能做同样的事情。

CPU会利用较高的主频、cache、分支预测等技术,使处理每条指令所需的时间尽可能少,从而减低具有复杂跳转分支程序执行所需的时间。GPU则通过数量丧心病狂的流处理器实现大量线程并行,使同时走一条指令的数据变多,从而提高数据的吞吐量。

举个GPU通用计算教材上比较常见的例子,一个向量相加的程序,你可以让CPU跑一个循环,每个循环对一个分量做加法,也可以让GPU同时开大量线程,每个并行的线程对应一个分量的相加。CPU跑循环的时候每条指令所需时间一般低于GPU,但GPU因为可以开大量的线程并行地跑,具有SIMD(准确地说是SIMT)的优势。

再以挖BIT币举例:

比特币的挖矿和节点软件是基于P2P网络、数字签名、密码学证据来发起和验证交易的。节点向网络广播交易,这些广播出来的交易在经过矿工的验证后,矿工用自己的工作证明结果来表达确认,确认后的交易会被打包到数据块中,数据块会串起来形成连续的数据块链。

每一个比特币的节点都会收集所有尚未确认的交易,并将其归集到一个数据块中,这个数据块会和前面一个数据块集成在一起。矿工节点会附加一个随机调整数,并计算前一个数据块的SHA-256哈希运算值。挖矿节点不断重复进行尝试,直到它找到的随机调整数使得产生的哈希值低于某个特定的目标。

如果希望判定一个人提供的的信息是本着正常使用,具备一定价值的。那么我们倾向认为提供这个信息的人,愿意为此付出一定工作量来证明他的诚实。假如有一种机制,能够容易的证明提供信息的人为此付出了一定工作量,那么此信息是可以接受,并被认为合理的。

比如,我收邮件的时候,做了一个规定:“把邮件内容数据,加入一个随机数,求一个sha256散列数值。这个散列值一共256bit 。前20bit 必须都为0”.这样,要给我发信的人,就必须反复尝试一个随机数,以保证邮件内容数据加上这个随机数,能够产生sha256 的结果------前20bit 都是0.(这个计算过程本身毫无意义)。如何产生出指定要求的整数?完全靠运气和CPU 运算时间。这就是一个工作量。工作本身毫无意义。但是如果谁愿意付出这个工作量,就意味着他给我的邮件多半是有意义的。这就叫“工作量证明”。也就是意味着这个人很有可能是诚实的。这里把邮件换成Block也是等效的。这个机制被广泛用于防止垃圾邮件等。因为群发垃圾邮件的人,不可能有那么多时间去给每个人算一个毫无意义的数字,浪费时间,降低发垃圾邮件的效率。挖矿的目的是确认交易。寻找随机数的过程是为了保证每一个挖矿节点不会往外发送垃圾block。发送的BlockId是这个Block的Hash,它必然是首20bit为0的。

可以预见的是对于比特币的Hash计算而言,它几乎都是独立并发的整数计算,GPU简直就是为了这个而设计生产出来的。相比较CPU可怜的2-8线程和长度惊人的控制判断和调度分支,GPU可以轻易的进行数百个线程的整数计算并发(无需任何判断的无脑暴力破解乃是A卡的强项)。OpenCL可以利用GPU在片的大量unified shader都可以用来作为整数计算的资源。而A卡的shader(流处理器)资源又是N的数倍(同等级别的卡)。

比特币早期通过CPU来获取,而随着GPU通用计算的优势不断显现以及GPU速度的不断发展,矿工们逐渐开始使用GPU取代CPU进行挖矿。前面我们已经介绍,比特币挖矿采用的是SHA-256哈希值运算,这种算法会进行大量的32位整数循环右移运算。有趣的是,这种算法操作在AMD GPU里可以通过单一硬件指令实现,而在NVIDIA GPU里则需要三次硬件指令来模拟,仅这一条就为AMD GPU带来额外的1.7倍的运算效率优势。凭借这种优势,AMD GPU因此深受广大矿工青睐。

现在你知道为什么AMD搞得跟蓝翔技校似得了吧?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10827

    浏览量

    211167
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4702

    浏览量

    128712
  • 图像处理
    +关注

    关注

    27

    文章

    1282

    浏览量

    56650

原文标题:GPU和CPU对比

文章出处:【微信号:zhenjingshe,微信公众号:华尔街】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问dspc6748怎么加快程序运行速度

    dspc6748想加快程序运行速度,应该怎么处理,急需急需!!!!!!!!
    发表于 10-11 06:56

    如何加快32的运行速度

    如何会加快32的运行速度
    发表于 11-06 07:58

    西瓜影音APP视频软件应用程序免费下载

    本文档的作用内容详细介绍的是西瓜影音APP软件应用程序免费下载。
    发表于 09-13 08:00 35次下载

    noise图像降噪软件应用程序免费下载

    本文档的主要内容详细介绍的是noise图像降噪软件应用程序免费下载。
    发表于 09-18 16:56 1次下载

    PDF转CAD软件应用程序免费下载

    本文档的主要内容详细介绍的是PDF转CAD软件应用程序免费下载。
    发表于 11-06 17:33 56次下载
    PDF转CAD<b class='flag-5'>软件应用程序</b>免费下载

    OMRON解密软件应用程序免费下载

    本文档的主要内容详细介绍的是OMRON解密软件应用程序免费下载。
    发表于 02-20 08:00 39次下载
    OMRON解密<b class='flag-5'>软件应用程序</b>免费下载

    Labview激活软件应用程序免费下载

    本文档的主要内容详细介绍的是Labview激活软件应用程序免费下载
    发表于 04-10 08:00 15次下载
    Labview激活<b class='flag-5'>软件应用程序</b>免费下载

    CAD看图软件应用程序免费下载

    本文档的主要内容详细介绍的是CAD看图软件应用程序免费下载。
    发表于 04-09 15:35 3次下载

    蓝牙芯片软件应用程序免费下载

    本文档的主要内容详细介绍的是蓝牙芯片软件应用程序免费下载。
    发表于 04-08 08:00 6次下载
    蓝牙芯片<b class='flag-5'>软件应用程序</b>免费下载

    无线链路设计软件应用程序免费下载

    本文档的主要内容详细介绍的是无线链路设计软件应用程序免费下载。
    发表于 04-30 17:26 8次下载

    锁相环设计软件应用程序免费下载

    本文档的主要内容详细介绍的是锁相环设计软件应用程序免费下载。
    发表于 04-30 17:26 48次下载
    锁相环设计<b class='flag-5'>软件应用程序</b>免费下载

    虚拟示波器软件应用程序免费下载

    本文档的主要内容详细介绍的生活虚拟示波器软件应用程序免费下载。
    发表于 05-06 16:16 45次下载
    虚拟示波器<b class='flag-5'>软件应用程序</b>免费下载

    电脑屏幕录像软件应用程序免费下载

    本文档的主要内容详细介绍的是电脑屏幕录像软件应用程序免费下载。
    发表于 05-28 08:00 8次下载
    电脑屏幕录像<b class='flag-5'>软件应用程序</b>免费下载

    Fliqlo桌面时钟软件应用程序免费下载

    本文档的主要内容详细介绍的是Fliqlo桌面时钟软件应用程序免费下载
    发表于 03-30 08:00 0次下载

    语音串口调试软件应用程序免费下载

    本文档的主要内容详细介绍的是语音串口调试软件应用程序免费下载。
    发表于 06-10 08:00 10次下载
    语音串口调试<b class='flag-5'>软件应用程序</b>免费下载