如何让已经编写好的并发程序在 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 阵列上运行?的主要内容,如果未能解决你的问题,请参考以下文章

用完 GPU Ram 的大型 cupy 阵列

如何从 C# 调用 CUDA

如何让代码在 Windows 10 上的 GPU 上运行?

如何让 tensorflow-gpu v2 在带有 NVidia GPU 的 Windows 上运行

如何在 GPU 上的数组上运行 expit 函数?

在 GPU C# 上获取 Vsync 状态