2010-05-19 55 views
6

首先:我清楚地知道,OpenCL的不会奇迹般地使一切更快什么样的工作典型应用该类超支的由OpenCL的

  • 我深知,OpenCL的有局限性

所以现在我的问题,我习惯使用编程做不同的科学计算。我所使用的一些东西在计算的复杂性和数量方面非常强烈。所以我想知道,也许我可以使用OpenCL加快bu的速度。

所以,我很乐意从你们听到的是答案,下面的一些[奖金链接]的:

*什么样的计算/算法/一般问题适用于OpenCL的

*通过迁移到OpenCL来确定某些特定代码是否会受益的一般准则是什么?

问候

回答

9

我认为这是一个很好的问题,这也是我正在努力为自己的研究工作。

目前,GPU可以执行的操作有很大的局限性,因为它们需要单独的线程在不同的数据集上执行完全相同的代码,即问题/算法必须是“数据并行”。显然数据并行问题包括蒙特卡罗模拟(其中许多MC模拟并行执行),图像处理以及不太明显的分子动力学模拟。数值积分(Monte Carlo或其他)是另一种可以轻松移植到GPU上运行的科学应用程序。

另一个主要限制是每个线程的内存非常有限,因此要在GPU上高效执行,该算法必须具有较高的算术强度。算法在GPU上运行的候选者的一个必要但不充分的条件是,在CPU上,该算法必须强烈受CPU约束而不受内存限制。

我的观点是,随着时间的推移,越来越多的问题会变得越来越严重,只有这样才能解决这个问题,只是因为要获得如此大的性能增益,但低悬的果实却是明显的数据并行问题。在我看来,大规模多核编程在未来十年将在科学界日益重要和普遍。

我已经玩了一下,并设法将回溯问题转化为在GPU上执行的适当格式(使用CUDA)。仅供参考,我在谈话中对此进行了描述:http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf

3

它非常适合于可表示为一个有点小程序并行过简单的数据结构的大块的工作任务。

如果要计算两个图像之间的差异,OpenCL是为你准备的。如果你想对一个场景进行光线追踪,这有点困难但仍然可行。如果您已经回答了大量的Web服务请求,OpenCL并不是解决方案。

2

就算法而言,它们必须是数据并行的。这是一组数据不应该依赖于以前的设置。为了进行类比,考虑插入排序,其中一个元素与其他元素进行比较以找到正确的位置。这是“不”数据并行,因为每一步都需要访问N-1个元素。现在,如果你需要使用OpenCL的排序,你将不得不实行双调排序是一种类型的排序网络。

即使它们是数据并行,FLOPS和内存延迟之间也存在权衡的问题。如果每一个数据必须从全局存储器中取出,然后将性能改善可能并不显著。 GPU的内存延迟远高于CPU。为了解决这个问题,GPU中可以使用本地存储器。