首先:
- 我很清楚 OpenCL 并没有神奇地让一切变得更快
- 我很清楚 OpenCL 有局限性
现在回答我的问题,我习惯使用编程进行不同的科学计算。我处理的一些事情在计算的复杂性和数量方面非常激烈。所以我想知道,也许我可以使用 OpenCL 来加快速度。
所以,我很想听到你们对以下一些问题的回答[链接奖励]:
*什么样的计算/算法/一般问题适合OpenCL
*确定某些特定代码是否可以通过迁移到 OpenCL 受益的一般准则是什么?
Regards
我认为这是一个很好的问题,也是我自己的研究中试图解决的问题。
目前,GPU 的功能存在很大的限制,因为它们需要各个线程在不同的数据集上执行完全相同的代码,即问题/算法必须是“数据并行”。显然,数据并行问题包括蒙特卡罗模拟(其中许多MC模拟是并行执行的)、图像处理和不太明显的分子动力学模拟。数值积分(蒙特卡罗或其他)是另一种可以轻松移植到 GPU 上运行的科学应用程序。
另一个主要限制是每个线程的内存非常有限,因此为了在 GPU 上有效执行,算法必须具有高算术强度。算法成为在 GPU 上运行的候选者的必要但非充分条件是,在 CPU 上,该算法必须是强 CPU 绑定的,而不是内存绑定的。
我的观点是,随着时间的推移,越来越多的问题将被硬塞出来,以便可以使用这种范例来解决它们,因为可以实现如此大的性能增益,但容易实现的目标是明显的数据并行问题。在我看来,未来十年,大规模多核编程将在科学界变得越来越重要和普遍。
我对此进行了一些尝试,并设法将回溯问题硬塞到适合在 GPU 上执行的格式(使用 CUDA)。仅供参考,我在一次演讲中对此进行了描述:http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)