如何让已经编写好的并发程序在 GPU 阵列上运行?
Posted
技术标签:
【中文标题】如何让已经编写好的并发程序在 GPU 阵列上运行?【英文标题】:How do I make an already written concurrent program run on a GPU array? 【发布时间】:2010-09-17 19:40:27 【问题描述】:我有一个用 Erlang 编写的神经网络,我刚买了一张带有 240 核 GPU 的 GeForce GTX 260 卡。使用CUDA 作为胶水在显卡上运行它是不是很简单?
【问题讨论】:
很棒的问题,您可能想考虑在 erlang 社区中提出这个问题,它可能会激发 erlang 中一些真正显着的变化! :-) @none:我对此表示怀疑。 erlang 并发模型与 CUDA 或 OpenCL 等并发模型语言的使用效果不佳。我已经为 erlang 编写 openCL 绑定做了一些(尚未发表的)努力,但我目前看到的唯一真正的应用是做快速矩阵转换之类的东西。 【参考方案1】:不,使用 CUDA 并非易事。
CUDA 编程模型基本上使用 C(添加了一些内容),但为了充分利用 GPGPU 的功能,您必须确保您的算法遵循 CUDA 指南。 (见NVidia CUDA Programming Guide)
例如,为了获得最佳内存性能(大约 70Gbps),您需要在流模式下通过合并访问内存,而且分支在 GPU 上的成本也非常高,因此您应该尽可能避免使用条件语句。查看 SDK 提供的指南和示例,它们将提供一个很好的起点
【讨论】:
是的,工作量很大。要获得显着的加速,您必须了解如何安排数据以及如上所述的半扭曲和合并的概念。另外我相信目标机器代码会根据 GPU 系列而变化...【参考方案2】:我希望我能告诉你如何使用 Erlang... ;-),但至少,MS Research 的 Satnam Singh 已经使用 Haskell (Lava) 和 F# 完成了一些非常有趣的工作。也许这篇论文可以让您对它可以如何做到有一些直觉:
http://research.microsoft.com/en-us/people/satnams/
【讨论】:
链接断开。 Satnam 的主页在这里:research.microsoft.com/en-us/people/satnams以上是关于如何让已经编写好的并发程序在 GPU 阵列上运行?的主要内容,如果未能解决你的问题,请参考以下文章