正在阅读:越加速反而越慢?通用计算实用性浅析越加速反而越慢?通用计算实用性浅析

2012-12-17 00:15 出处:PConline原创 作者:Valest 责任编辑:liganlin
1居然越加速越慢?重新看通用计算回顶部

  前言:前些年DIY玩家群体里曾经有个讨论,就是未来显卡或许也可用于计算,那么装机应该把钱投到CPU上多一点,还是投到GPU上多一点?时至今日,AMD和IntelCPU里面都已经整合了支持用于计算的GPU核心,到底这种把GPU用于计算的技术,“通用计算”,是不是能够为电脑处理加速呢?其实用性有多大?限制又在何处?今天我们就来用简单的实例分析,给大家一个更清晰的通用计算了解。

通用计算
越加速反而越慢?通用计算实用性浅析

●越加速越慢,从一个有趣的案例开始说起

  在很多人的认识里,通用计算就是CPU+GPU一起用,用GPU协助CPU进行计算,从而得到“1+1”等于或者约等于2的性能提升,加速电脑的计算速度。然而实际是这样么?我们就以一个对比测试来展开今天的话题。

通用计算测试
不加速的测试成绩(HD7850)

  我们今天使用LuxMark来作测试参考,LuxMark是一款由Jromang编写的OpenCL通用计算测试工具,基于开源的LuxRender引擎,能够有效地测试GPU和CPU的OpenCL运算性能,并且还支持CPU+GPU一起运算的加速模式,专业性、可参考性非常强,上面是HD7850单卡的测试成绩:590

通用计算测试
加速后的测试成绩(A6-3670K + HD7850)

  大家不用点开大图就可以看到这张图的成绩,475,比上面的图低很多,难道笔者是换了一张低端的显卡?点开大图大家就可以看到,其实笔者不仅没有换卡,还添加了A6-3670K处理器来协助计算!没错,这是CPU+GPU加速后的成绩,它比GPU单卡成绩还低100分有多——也就是我们今天要说的,越加速反而越慢

  到底这是怎么回事呢?通用计算不应该是用来加速的吗?为何还变慢了?下面我们先来从通用计算的知识讲起。

●重新认识“通用计算”

通用计算
通用计算:用GPU来处理CPU的任务

  通用计算是一个很广泛的概念,我们电脑DIY玩家一般说的“通用计算”指的是“GPU通用计算”,意思就是用显卡GPU来处理一些原本CPU可以处理的计算,又常被称为“异构计算”。

  目前通用计算规范主要有三种,NVIDIA独家的CUDA,微软主导的DirectCompute,苹果等多家厂商支持的OpenCL。近期有消息指出Intel下一代核显会大幅强化OpenCL性能,因此我们今天要讲的,主要就是其中的OpenCL。

-----------------------------------------------------------------------------

小提示:上图这个是Intel出的独显?

  上图是Intel的Xeon至强Phi处理器,具备多达60个核心,和一般的CPU相比,它不仅外观而且内部设计都更像GPU,但是又不是严格意义上的GPU,它是Intel设计给服务器等场合使用的从处理器,能够和服务器CPU搭配发挥惊人的计算能力,可以说是一款很好地体现通用计算理念的产品。

-----------------------------------------------------------------------------

●为什么需要通用计算

通用计算
CPU 4核 VS GPU 240核

  虽然我们已经喊“CPU性能过剩”已经好几年了,但是实际上有些时候电脑的处理速度还不能让我们满意,因此我们需要通用计算。为什么要用显卡来加速处理呢?我们看看上图就懂了,目前一般的CPU就2~4个核心,高端的6~8个,而GPU轻轻松松就有240个,悬殊的设计差异让显卡能在一些CPU处理得慢的应用中取得更高的效率,而这些应用场合就是通用计算的优势,比如文件压缩、视频转码就是典型。

  回到我们开头的问题,LuxMark的图形渲染操作是不是GPU处理更有优势呢?答案是肯定的,但是为什么CPU+GPU一起来运算,效率比单独让GPU去运算还底呢?下面我们就深入浅出给大家解析一下。

-----------------------------------------------------------------------------

1、8楼,敢把单卡跑分时的cpu写出来么?

  PConline编辑回复:笔者的确有测跑分,不过这分数有点……不解释。

A6 A6
A6-3670K纯CPU / CPU+自带显示核心:195分 / 294分

2、12楼,三大通用,到底哪个强一点?

  PConline编辑回复:就效率而言,NVIDIA的CUDA是最好的,毕竟它只要针对自家的显卡优化好就行了,而OpenCL和DirectCompute,由于面向非常广泛的硬件,实际编程起来要相对难一些,而且不可能针对所有硬件都有很好的性能优化。

-----------------------------------------------------------------------------

2为什么加速反而慢?怎样避免此情况回顶部

●为什么CPU+GPU一起算还不如GPU单独算?

500
LuxMark将任务划分开来给CPU和GPU处理

  通用计算似乎能够实现CPU和GPU一起运算,但其实由于GPU并不能读懂CPU的指令,因此他们之间的工作方式不是“合体”,而是“各自为政”。因此实际上OpenCL,或者其他通用计算,都有个任务分工的问题。如果我们点开LuxMark让它全屏化,就会看到软件实际把100%的工作划分成了46.4%和53.6%分别给了GPU和CPU去处理,让它们各自完成自己的工作,然后把结果汇总呈现给用户。

  问题来了,如果GPU的处理效率低下,那么情况就会是CPU处理完了GPU还在处理,拖慢了整体的进度;而另一种状况,就是我们上面遇到的,GPU的处理效率比CPU更高,把任务分给CPU做,还不如直接把所有任务给GPU做

●这是说现在GPU能够秒杀CPU了吗?

  越加速越慢的问题出在CPU处理效率上,那么是否说GPU已经足以秒杀CPU,以后大家装电脑就买强力显卡搭配垃圾CPU就行了呢?完全不是,这只是“术业有专攻”,它们有着不同的处理方式,如果论规格,如逻辑判断力、运算精度,CPU还是要比GPU更强的。那么它们是怎样运作的呢?

处理风格
CPU的处理风格:快速,线性

  我们以扫雷为例来分析,如果能通过电脑自己运算来扫雷,那么CPU的处理风格就像上图所示,它是线性的,而且是快速的,它快速处理完一截雷区,然后就会再处理同样大小的另一截雷区,直到所有雷区全部处理完。

处理风格
GPU的处理风格:较慢,一整块处理

  而GPU方面,由于核心数量极多,因此其处理是大规模并发的,形成的处理效果就好像一个面,一块一块雷区地处理,但是单个雷块的处理速度其实不如CPU,而且也不会因应雷区的形状自动变换处理面的形状,比较僵化,全凭数量形成面去取胜。

  如果任务真的就像上面那样,是一个大面积的雷区需要扫雷,那么很明显,GPU的面式处理风格会更有优势。而如果任务是一个只有两行的长条状的雷区,那么GPU的面处理就会有很大部分用不上,结果就是CPU的处理风格更有优势。实际上,大部分任务处理都要求更好的灵活性,而不是更大的覆盖面,因此,说GPU完全秒杀 CPU并不合理

●怎样避免出现这种越加速越慢的情况?

加速有效
三代i5加速前后

  如果要坚持CPU+GPU一起运算,怎样避免这种越加速越慢的情况呢?我们来看一个三代i5成功加速的案例,三代i5单CPU默认LuxMark成绩为346分,而加上其自带的核显2500之后,成绩稍微得到了提升,变成了385分,这还是得益于正确的任务量分配

  没错,如果软件能够根据CPU和GPU之间的性能强弱来调整任务量的分配,其实CPU+GPU还是能在大多数通用计算适用场合下实现加速的。比如LuxMark运行的详细参数中就可以看到一个“Prf Idx”的数据,这个就是Performance Index性能指数,通过这个指数,软件能够判断CPU和GPU大概的性能强弱对比,从而按性能大致分配好任务,实现加速,而A6+D7850加速失败,深层原因其实在于A6有个错误的性能指数( 1.15 ),比HD7850( 1.0 )更高,却实际性能更差,因此效果就是非但没有加速,速度还拖得比GPU自己算更慢了。

  怎样让软件知道硬件之间的强弱对比呢?建立一个在线的性能指数数据库可能会是最可行的办法。但是这个数据库的建立有个大难点,就是怎样收集相关数据,因为OpenCL面向广泛、不定的硬件,软件不运行过是不会知道哪个硬件的性能更强的,而从硬件厂商角度出发,这种大规模硬件性能对比数据库实在太直接,对于市场营销竞争会有负面效果,因此不会免费提供硬件来做测试,那么跑测试的任务,就自然而然落到各位用户身上了——这不大科学。

  因此综合来说,短期之内“越加速越慢”还是个很难根治的难题,把性能的希望寄托在CPU身上还是比较靠谱的。

  总结:硬件加速技术虽然能大幅优化部分应用的处理效率,具有很好的应用前景,但它现在其实还处于比较初级的阶段,很多技术难题一时间还不大可能解决,未来如果通用计算变得大行其道,也不会是这两三年内的事,到时候大家的电脑早换代了,因此对于目前来说,高性能的CPU还是非常有必要的

3扩展阅读:三大通用计算规范详解回顶部
 

扩展阅读:通用计算的硬件支持状况如何?

通用计算
DirectX计算:微软DirectCompute

  DirectCompute是微软主导的通用计算技术,属于DirectX支持之一,默认最低需要Win7系统才能提供支持。目前的独显、核显都能支持,主要应用在一些游戏方面,比如战地3、尘埃3就是两个采用DirectCompute协助的游戏。

通用计算
NVIDIA独家:CUDA计算

  CUDA是NVIDIA的独家技术,只有NVIDIA的显卡能够支持,具有比较强劲的性能和相对容易掌控的编程规范,不过有传言称,为了推广CUDA,NVIDIA有意在驱动里降低了自家显卡的OpenCL性能。CUDA能够实现多种多样的运算加速功能,比如视频加速等。

通用计算
最开放最复杂:OpenCL计算

  OpenCL是苹果提出、多家厂商支持的开放性规范,能够对不同架构CPUGPU等硬件提供支持,理论上可以包括我们的手机CPU和手机GPU。目前OpenCL常见有1.1和1.2两个版本,区别主要在于1.2具备更好的性能优化。OpenCL的硬件支持是比较复杂的,我们分开三家来说:

  Intel:在一代/二代Core i时代,Intel的核显都并没有提供OpenCL支持,而到了三代Core i,Intel大幅提升核显性能,并加入了OpenCL1.1支持,未来Intel可能会继续强化核显性能,并加入OpenCL1.2支持。

  NVIDIA:NVIDIA的OpenCL开始得比较早,不过支持力度并不特别大,毕竟CUDA才是亲儿子。NVIDIA上一代架构费米具备不错的OpenCL性能,新一代开普勒则更加集中到游戏性能上,OpenCL性能似乎不如上一代。NVIDA的OpenCL只能支持1.1版本。

  AMD:AMD很重视OpenCL,支持开始得比较早,而且将其作为重要卖点,它所宣传的APU百核加速,很大程度上就是OpenCL应用。目前来说AMD的OpenCL性能是比较强的,而且支持的是1.2版本的OpenCL,性能比NVIDIA和Intel的1.1版本更强。

为您推荐

加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
加载更多
热门排行

DIY论坛帖子排行

最高点击 最高回复 最新
最新资讯离线随时看 聊天吐槽赢奖品