GPGPU:还在流血边缘?

时间:2011-04-18 17:11:35

标签: performance cuda gpgpu

GPGPU是否已准备好用于生产和原型设计,或者您是否仍将其视为研究/前沿技术?我在计算生物学领域工作,它开始吸引更多来自计算机科学的人在该领域的注意力,但大多数工作似乎是移植众所周知的算法。算法的移植本身就是研究项目,并且该领域的绝大多数人对此并不了解。

我在传统的多核上做了一些非常计算密集的项目。我想知道GPGPU有多接近可用于原型化新算法以及日常生产用途。从阅读维基百科,我得到的印象是编程模型很奇怪(严重SIMD)并且有些限制(没有递归或虚函数,虽然这些限制正在慢慢被删除;没有比C更高级的语言或C ++的有限子集),而且有几个相互竞争的,不相容的标准。我也得到的印象是,与常规多核不同,细粒度并行性是城里唯一的游戏。需要重写基本库函数。与传统的多核不同,只需并行化程序的外循环并调用旧式串行库函数,就无法获得巨大的加速。

这些限制在实践中有多严重? GPGPU现在准备好用了吗?如果没有,你会猜多久?

编辑:我正试图解决的一个主要问题是,编程模型与常规多核CPU有多少不同,后者有很多很多非常慢的内核。

编辑#2:我想我总结我得到的答案的方式是GPGPU足够实用,适合早期采用者,它非常适合,但仍然不足以被视为不适合“标准”工具,如多核或分布式并行,即使在性能很重要的那些利基中也是如此。

5 个答案:

答案 0 :(得分:5)

毫无疑问,人们可以使用GPU进行有用的,生产和计算。

大多数在这里表现良好的计算是那些非常接近于令人尴尬的并行性的计算。 CUDA和OpenCL都会让你以一种中等痛苦的方式表达这些计算。因此,如果您可以按照这种方式进行计算,那么您可以做得很好。 我不认为这种限制会被严重删除;如果他们能做到这一点,那么普通的CPU也可以做到这一点。至少我不会屏住呼吸。

您应该能够通过查看现有代码来判断您当前的应用程序是否合适。与大多数并行编程语言一样,在编写完整的应用程序之前,您不会知道自己的真实性能。不幸的是,经验无可​​替代。

答案 1 :(得分:4)

我是CS的研究生,曾在GPGPU工作过一段时间。我还知道至少有一个组织正在将其部分软件移植到CUDA。是否这样做是值得的,这取决于性能对您的重要程度。

我认为使用CUDA会给你的项目增加很多费用。首先,GPU领域非常破碎。即使在NVIDIA显卡中,您也拥有相当多的功能集,而在一个GPU上运行的某些代码可能无法在另一个GPU上运行。其次,CUDA以及视频卡的功能集正在快速变化。今年写的任何内容都不可能在2 - 3年内重写,以充分利用新的显卡。最后,正如您所指出的那样,编写GPGPU程序非常困难,以至于并行化现有的GPGPU算法通常是一个可发布的研究项目。

您可能希望查看已经存在的CUDA库,例如CUBLAS,您可以将它们用于您的项目,这可以帮助您避免这些问题。

答案 2 :(得分:1)

CUDA现在正在金融服务的生产代码中使用,并且一直在增加。

现在不仅“准备好认真使用”了,你几乎错过了这条船。

答案 3 :(得分:1)

是一种间接答案,但我在药理学领域的非线性混合效应建模领域工作。我听说过CUDA已经尝试过的二手资料。有各种各样的算法在使用,而且新的算法一直在出现,有些看起来比SIMD模型更友好,特别是基于Markov-Chain Monte Carlo的算法。这是我怀疑财务申请的地方。

已建立的建模算法在Fortran中是如此庞大的代码块,而最里面的循环是如此复杂的目标函数,即使可以找到SIMD加速的机会,也很难看到如何完成转换。可以并行化外循环,这就是我们所做的。

答案 4 :(得分:0)

与许多成功移植到GPU的金融算法相比,计算生物学算法在结构上往往不那么规律。这意味着它们需要在算法级别进行一些重新设计,以便从GPU中发现的大量并行性中受益。您希望拥有密集和方形的数据结构,并使用很少的“if”语句围绕大型“for”循环构建代码。

这需要一些思考,但这是可能的,我们开始使用与Ateji PX并行化的蛋白质折叠代码获得有趣的性能。