科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道高性能计算GPU不是一切!不适合使用GPU的十大场景

GPU不是一切!不适合使用GPU的十大场景

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

不管从哪个方面看,最近几年高性能计算领域GPU计算的出现已经取得了异乎寻常和空前的发展。我们正在进行的唯一的高性能计算计算平台是巨大的并行而且安达尔定律同样应用于CPU实现。

来源:it168 2011年7月4日

关键字: GPU 高性能计算

  • 评论
  • 分享微博
  • 分享邮件

不管从哪个方面看,最近几年高性能计算领域GPU计算的出现已经取得了异乎寻常和空前的发展。GPU计算具有颠覆性技术的所有标记。它以追随者中一小部分骨干决意勇敢地将像Cg 和OpenGL's GLSL这类图形语言的复杂性引入通用计算开始。它被高性能计算的新军所拥护,在多数情况下相对传统的解决方案提供了比人们承认的更多数量级的性能提升,这是明显的不同之处。

我们即将迎来NVIDIA CUDA发布四周年纪念日,开始争论GPGPU运动的新起点。有很多人已经了解,试用并采用该技术。但是由于各种原因更多人仍旧充当旁观者。在我们的工作中,已经遇到了很多旁观者,因此编辑了一份最常见的问题,关注以及断言的清单,抢先评估该技术。

下文尝试罗列并解读这些反对意见,鉴于最近的发展重新考虑它们,而且我们猜测未来将如何发展。有一点要讲明,GPGPU不是所有高性能计算应用程序的解决方案,但是很多人已经发现该技术在地震成像、电磁学、分子动力学、财务评估、医疗成像以及其他领域性价比很高。

1.我不想重写我的代码或学习新的语言

确实为使用GPU你将不得不重写代码。然而如果你正基于大多数串行代码开发并行CPU实现,那么重写代码是不可避免的。唯一的问题是你的目标平台是什么。把多核CPU作为目标提供了在进程,线程以及处理器级别具有并行性的三层模型。在三个不同的级别你将分别使用MPI,OpenMP/pthreads以及SSE/AVX扩展。使用CUDA进行GPU编程不再困难,而且正如我们将要看到的那样,计算密集型和内存密集型代码的优势可能是重要的。

如果你已经使用并行代码,你将从GPU端口获得什么好处?信封背面(Back-of-the-envelope)计算在芯片到芯片比较典型代码,获得了5倍到40倍的性能提升。这一度量标准我们也已经在许多有关应用程序开启GPU的论文中看到了。这些比较在最近几年保持相对不变,跨越了Intel和NVIDIA的两代产品。

CUDA是C语言的一个扩展,可以相当容易的被有经验的编码者学会。距离将我们带到亿亿次的并行编程模型实现还很远,然而我相信最终的解决方案看起来将更像数据并行CUDA模型而不是任务并行CPU备选方案。在之前的HPCwire投稿中,我已经阐述了以下观点:通过强制开发者在他们的问题中考虑并行工作的束缚级别并映射到线程中,CUDA是一个更好的可扩展的并行编程模型,可以在单个节点的多个GPU或多个节点之间提供更加自然地扩展。

这个方向的探索已经在进行中,例证从学术界在加速器通用内存(GMAC)方面出色的工作(GMAC由Universitat Politecnica de Catalunya和IMPACT研究小组在伊利伊诺大学联合开发)到商业界唯一具有可扩展能力的HUESPACE计算API(由基于奥斯陆初创公司HUE和它的姐妹公司,专注于石油和天然气的Headwave.提供)。

2.我不知道期待哪种性能

高性能计算代码或者是计算密集型或者是内存密集型。对于计算密集型代码我们比较NVIDIA Fermi M2090和Intel Westmere。Fermi有512个核心,主频大约为1.3GHz,而Westmere有6个核心,主频可以达到3.4GHz。总的核心频率大概相差32倍。如果你的CPU代码使用SSE指令是有效的,在CPU端可能提供额外的4倍的性能提升,减少GPU效能达8倍(接近GFLOPS峰值比率)。

对于内存密集型代码,我们比较每个处理器在CPU板上提供的从177 GB/s到32 GB/s的 GPU主存带宽,速率大概是5.5倍。底线是如果你的代码是计算密集型,对于高度优化的SSE实现代码,期望GPU提升性能在5倍到20倍之间,对于典型的代码甚至更多。如果你的代码是内存密集型在芯片到芯片比较中将提升5倍性能。

考虑并行解决方案时,按照边际成本思考问题是有帮助的。如果你的代码是内存密集型,那么你应该考虑最便宜的增加带宽选项。可以增加另一个GPU卡然后花大概15美元购买1GB/s的带宽。另一种选择是可以增加一个单独的节点,名目成本大概是1GB/s 80美元。后一个解决方案同时增加了计算覆盖范围和另一个O/S实例。

对于计算密集型代码可以进行相似的计算得出GFLOPS的边际成本。对于混合了计算密集型和内存密集型的大多数代码,GPU通过欺骗成千上万的线程并持续计算这些线程(这些线程的数据寄存器填满了数据),很好的隐藏内存密集型部分的延迟。通过隐藏内存延迟,GPU能够更好的达到更高的计算密集型性能限制。

3. PCIe带宽将扼杀我的性能

基于PCIe带宽反对GPU计算的论证实际上是一个计算强度。计算强度有各种定义,但是为便于比较,让我们说它是数据传输的每个浮动执行的浮点运算的数目。为了使GPU计算能力是值得的,临界值必须应用到传输数据到GPU板的每个字节。

举例来说,PCIe v2.0 16倍带宽实际上总计大概为6 GB/s,大约1s内它能填满M2090板上的6GB主存。双精度浮点运算峰值性能为6650亿次/s的M2090是一个浮点运算巨人,能够清晰地在秒级别进行大量处理并填满主板内存。举例来说,如果你想要PCIe传输时间不多于计算时间的10%,M2090必须在存储的数据冲掉前进行成千上万的浮点操作。因此GPU算法必须努力尽可能保留主板上的数据。

另外,CUDA允许异步进行PCIe数据传输和计算。聪明的使用这一特性允许开发者隐藏后面计算的一些或者全部PCIe数据的传输时间。工作得很好的算法包括本地物理时间同步算法,比如时域有限差分(FDTD)或经典的分子动力学,其中N2粒子间的相互作用导致有效的数据重用和高计算强度。

GPU隔离无效的算法,比如简单矢量点积的计算强度非常低。如果问题映射到多个GPU,它们应该最小化数据传输,比如在域分解中只传输边界数据。

4.安达尔定律怎么样?

安达尔定律在数量上表述一个事实,如果你打算加速一个大型串行代码的一部分,无论以何种方式,并行化或者魔法侏儒(magic gnomes),你最好加速一个重要的部分或者你将不会获得更多的好处。安达尔定律总是被当作一个护身符固守,反对任何代码性能能够通过并行化改进的建议。

举例来说,想象你可能将一部分串行代码的运行时间减少到0。如果这部分代码占据运行时间的50%,那么总的加速比将是2倍。如果这部分代码占据了运行时间的90%,你的加速比将达到10倍。当然对于更加现实的加速,加速比要稍低。

安达尔定律反对图形处理器计算最有效的是监视,现代架构的性能要求所有的代码被重写为高度并行性,将串行部分减少到最小…没有其他选择。在CPU平台和GPU平台这是真的。

我们正在进行的唯一的高性能计算计算平台是巨大的并行而且安达尔定律同样应用于CPU实现。实际的问题是你将在哪儿运行代码的并行部分,在CPU还是GPU上?

5.如果NVIDIA走开将会怎么样?

高性能计算的历史到处是许多超级计算公司尝试实现并行计算飞跃而失败的尸体。名单包括Thinking Machines,Maspar,KSR,Mitrion以及很多其他公司。应该承认这些英勇的努力和背后人们的想象力以及他们在创意失败中扮演的角色,随着时间的推移应该引起一个更大的共识,那就是什么起作用,什么不起作用。我们欠他们人情债。

然而,NVIDIA不是一个超级计算公司。它是一个50亿美元的公司,大部分收入来自显卡和嵌入式处理器,这些卖给由狂热的PC游戏玩家构成的巨大的市场。它相对独立于高性能计算有一个优势:如果所有的高性能计算使用没有NVIDIA的GPU计算将仍然有一个很好的和有利可图的生意,只要有咖啡因成瘾的青少年乐意玩虚拟战争游戏,NVIDIA就将陪伴周围。事实是NVIDIA在市场上的持久力比长期的高性能计算公司Cray更大而且更加安全。

更进一步说,NVIDIA已经公开公布了大概6年的技术发展的愿景和发展蓝图。字里行间透露出极进取的野心将GPU从靠加速卡为生的辅助性角色转移到在计算基础架构中更加核心的作用。一路上它们已经计划了一些强有力的计算引擎。

6. GPU板没有为我的问题提供足够的主存

GPU板内存现在M2090 和M2070上被限制为6G。对于要求超过6GB大量内存的算法可能特别麻烦。通过访问单个节点上的多块卡稍微缓和了这个问题。

举例来说,Dell C410x PCIe扩展插槽可能包含多达16块NVIDIA板,总共96GB内存。在16个单独的GPU上域分解你的问题可能是一个非常有效的横跨内存限制的方法,而且对于影响本地物理问题,它工作的相当好。

最麻烦的是算法本质上需要随机访问大型阵列,举例来说,大型哈希表或者其他需要随机阵列查找的问题。在这种情况下,当前阶段的GPU板不是有效的解决方案。然而,内存正在变得相对便宜而且密度在不断改进,可以期待将来的GPU板提供足够的内存。

7.我将等待更多的CPU核心/ Knights Corner

更多的核心将为计算密集型应用提供帮助,然而需要考虑随着CPU增加更多的核心,GPU也将增加更多的核心。对比过去两代技术的路线图, CPU和GPU之间在计算和带宽方面显示了持久的差距。差距有时增加有时变小但是始终存在,预计这一差距将继续存在。对于带宽密集型问题,情况更加糟糕。因为增加核心比增加带宽似乎更容易。

Intel的Knights Corner计划大概一年多以前就宣布了,认识到需要x86数据并行和GPU竞争。关于Knights Corner的全部细节仍然未知,然而使用Knights Ferry原型系统的说明书作为一个基准,我们可能期待50个或更多个1.2GHz的核心,每个核心具有512位向量处理单元,最多支持4个线程,使其成为一个可怕的高性能计算竞争者。然而对Intel关于开发模型,价格,发布时间以及其他关键信息的计划目前知之甚少。

Knights Corner要成功必须符合商品市场的论点,允许x86架构支配高性能计算。必须找到一个高性能计算科学家与世隔绝的世界之外的无限市场。Commodity graphic是更广泛市场的一个逻辑选项,但是已经被NVIDIA和AMD很好的解决了。

8.我不喜欢专有语言

专有语言在这是指被一个组织所支持的语言,该语言可能朝一个未知或者不需要的方向发展或者完全放弃支持。CUDA被划入这一分类。使用CUDA的优势是非常明显的:1)能够实现NVIDIA硬件指定的优化;2)没有委员会做出发展蓝图决定;以及3)更快支持新的NVIDIA硬件特性。

然而,如果专有语言在你的组织中受阻,那么对于非专有语言开发,OpenCL是一个绝佳选择。OpenCL被Apple,NVIDIA,AMD,Intel以及许多其他可在多个硬件平台提供功能可移植性的公司所支持。我强调功能可移植性,这和性能可移植性相比仍然落后。OpenCL内核和CUDA内核非常相似,更多的差异发现在基于主机的设置和启动代码。

9.我正在等待神奇的CPU到GPU的代码转换器

既有好消息也有坏消息。好消息是已经存在CPU到GPU的代码转换器。坏消息是它不大可能产生像专家写的本机端口那样高性能的代码。没有经验使用这些工具以及隶属关系的公司使用本地CUDA做重大的技术代码端口。笔者认为这些方法数据的可靠性的来源欠缺公正,然而看起来来自PGI或CAPS HMPP 工作台(这类编译器的两个供应商)的PGI Workstation试用license足够容易获得,而且可以进行测试。当这些编译器指令并入OpenMP,以后我们可能期待它们的标准化。

10. 我有N段代码但是没有IT预算

更通俗的说,这可能被称为“不做大就回家”的困境。为在IT预算固定的大多数组织的基础实施中增加启用GPU的节点需要在更少更强大的异构GPU节点和更多不强大的传统CPU节点之间做出选择。从规模经济的角度,对一些组织来说100%的GPU节点或没有GPU节点是有道理的。基于边缘的业务在集群24*7*365处理数据、竞争激烈的市场上工作时尤为正确。分离IT基础设施使调度和要求变得复杂,更糟的情况下,要面对两个版本的所有问题:集群管理脚本,调度,编译器,测试和验证,应用程序代码等等。

大型商业组织技术的应用必须关注投资回报。“不做大就回家”的论点表明了焦虑。精明、深思的组织尝试量化技术转变的已知成本并推断未知的成本解决这个棘手的问题。最后1点以及前面的9点,以某种方式涉及了投资(代码开发,大众技能,新硬件,再训练)或回报(性能,可扩展性,功率)。

每个公司必须小心谨慎的算出自己的投资回报率公式,面对他们将面临的障碍,尊重保守的利润。使用传统的财务分析资本投资应产生与本组织的资本加权成本相称的回报给股东,必须和公司在其专长领域的其他投资机会相比。

总之,在过去的4年中,GPU计算已经牢牢占据了高性能计算市场而且收益显著。上文提出的10点反对意见是个人和组织最常见的声音,我们已经尝试解决它们。正如文章开始指出的那样,GPGPU不是所有高性能计算问题的解决方案,但是组织由于错误的原因忽视该技术可能正在错过重要的性能收益和成本节省。

最后,组织不应该以以下想法开始GPU计算:它是今年的解决方案而不是经过深思熟虑的战略的结果。深思熟虑的战略决定了GPU计算是既符合目前的成本效益也是基于架构,编程模型以及带我们到亿亿次运算电源参数,向前发展的最佳解决方案。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章