前言:前些年DIY玩家群体里曾经有个讨论,就是未来显卡或许也可用于计算,那么装机应该把钱投到CPU上多一点,还是投到GPU上多一点?时至今日,AMD和Intel的CPU里面都已经整合了支持用于计算的GPU核心,到底这种把GPU用于计算的技术,“通用计算”,是不是能够为电脑处理加速呢?其实用性有多大?限制又在何处?今天我们就来用简单的实例分析,给大家一个更清晰的通用计算了解。
●越加速越慢,从一个有趣的案例开始说起 在很多人的认识里,通用计算就是CPU+GPU一起用,用GPU协助CPU进行计算,从而得到“1+1”等于或者约等于2的性能提升,加速电脑的计算速度。然而实际是这样么?我们就以一个对比测试来展开今天的话题。 我们今天使用LuxMark来作测试参考,LuxMark是一款由Jromang编写的OpenCL通用计算测试工具,基于开源的LuxRender引擎,能够有效地测试GPU和CPU的OpenCL运算性能,并且还支持CPU+GPU一起运算的加速模式,专业性、可参考性非常强,上面是HD7850单卡的测试成绩:590。 大家不用点开大图就可以看到这张图的成绩,475,比上面的图低很多,难道笔者是换了一张低端的显卡?点开大图大家就可以看到,其实笔者不仅没有换卡,还添加了A6-3670K处理器来协助计算!没错,这是CPU+GPU加速后的成绩,它比GPU单卡成绩还低100分有多——也就是我们今天要说的,越加速反而越慢。 到底这是怎么回事呢?通用计算不应该是用来加速的吗?为何还变慢了?下面我们先来从通用计算的知识讲起。 ●重新认识“通用计算” 通用计算是一个很广泛的概念,我们电脑DIY玩家一般说的“通用计算”指的是“GPU通用计算”,意思就是用显卡GPU来处理一些原本CPU可以处理的计算,又常被称为“异构计算”。 目前通用计算规范主要有三种,NVIDIA独家的CUDA,微软主导的DirectCompute,苹果等多家厂商支持的OpenCL。近期有消息指出Intel下一代核显会大幅强化OpenCL性能,因此我们今天要讲的,主要就是其中的OpenCL。 ----------------------------------------------------------------------------- 小提示:上图这个是Intel出的独显? 上图是Intel的Xeon至强Phi处理器,具备多达60个核心,和一般的CPU相比,它不仅外观而且内部设计都更像GPU,但是又不是严格意义上的GPU,它是Intel设计给服务器等场合使用的从处理器,能够和服务器CPU搭配发挥惊人的计算能力,可以说是一款很好地体现通用计算理念的产品。 ----------------------------------------------------------------------------- ●为什么需要通用计算 虽然我们已经喊“CPU性能过剩”已经好几年了,但是实际上有些时候电脑的处理速度还不能让我们满意,因此我们需要通用计算。为什么要用显卡来加速处理呢?我们看看上图就懂了,目前一般的CPU就2~4个核心,高端的6~8个,而GPU轻轻松松就有240个,悬殊的设计差异让显卡能在一些CPU处理得慢的应用中取得更高的效率,而这些应用场合就是通用计算的优势,比如文件压缩、视频转码就是典型。 回到我们开头的问题,LuxMark的图形渲染操作是不是GPU处理更有优势呢?答案是肯定的,但是为什么CPU+GPU一起来运算,效率比单独让GPU去运算还底呢?下面我们就深入浅出给大家解析一下。 ----------------------------------------------------------------------------- 1、8楼,敢把单卡跑分时的cpu写出来么? PConline编辑回复:笔者的确有测跑分,不过这分数有点……不解释。 2、12楼,三大通用,到底哪个强一点? PConline编辑回复:就效率而言,NVIDIA的CUDA是最好的,毕竟它只要针对自家的显卡优化好就行了,而OpenCL和DirectCompute,由于面向非常广泛的硬件,实际编程起来要相对难一些,而且不可能针对所有硬件都有很好的性能优化。 -----------------------------------------------------------------------------
通用计算似乎能够实现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的处理风格就像上图所示,它是线性的,而且是快速的,它快速处理完一截雷区,然后就会再处理同样大小的另一截雷区,直到所有雷区全部处理完。 而GPU方面,由于核心数量极多,因此其处理是大规模并发的,形成的处理效果就好像一个面,一块一块雷区地处理,但是单个雷块的处理速度其实不如CPU,而且也不会因应雷区的形状自动变换处理面的形状,比较僵化,全凭数量形成面去取胜。 如果任务真的就像上面那样,是一个大面积的雷区需要扫雷,那么很明显,GPU的面式处理风格会更有优势。而如果任务是一个只有两行的长条状的雷区,那么GPU的面处理就会有很大部分用不上,结果就是CPU的处理风格更有优势。实际上,大部分任务处理都要求更好的灵活性,而不是更大的覆盖面,因此,说GPU完全秒杀 CPU并不合理。 ●怎样避免出现这种越加速越慢的情况?
如果要坚持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还是非常有必要的。 扩展阅读:通用计算的硬件支持状况如何? DirectCompute是微软主导的通用计算技术,属于DirectX支持之一,默认最低需要Win7系统才能提供支持。目前的独显、核显都能支持,主要应用在一些游戏方面,比如战地3、尘埃3就是两个采用DirectCompute协助的游戏。 CUDA是NVIDIA的独家技术,只有NVIDIA的显卡能够支持,具有比较强劲的性能和相对容易掌控的编程规范,不过有传言称,为了推广CUDA,NVIDIA有意在驱动里降低了自家显卡的OpenCL性能。CUDA能够实现多种多样的运算加速功能,比如视频加速等。 OpenCL是苹果提出、多家厂商支持的开放性规范,能够对不同架构CPU、GPU等硬件提供支持,理论上可以包括我们的手机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版本更强。 |
正在阅读:越加速反而越慢?通用计算实用性浅析越加速反而越慢?通用计算实用性浅析
2012-12-17 00:15
出处:PConline原创
责任编辑:liganlin