4

我有一个问题:快速线性系统求解(我有很多这样的系统)。我将使用 GPU 和 OpenCL 解决它。

我喜欢动态语言,例如 Ruby 或 Python,并且我已经摆脱了使用 C 等低级语言的习惯。

所以我有两个同时的目标:

  1. 开发这样的 OpenCL 解决方案,以尽可能少的努力尽可能快地求解线性系统。
  2. 不要在性能上损失太多。我不想为了方便而支付 2-10 倍的减速,但我准备为使用高级语言的工作支付 30-50%。

对我来说最好的情况是:几乎在 OpenCL C 中编译 python 代码几乎没有浪费。

我找到了这样的解决方案:pure OpenCL C、PyOpenCLClyther

我应该从什么开始?

4

2 回答 2

4

我的观点是,试图将动态语言硬塞进 OpenCL 是不值得的。你会失去大部分你喜欢 Python 的东西,而且最终可能不会为你的努力节省太多时间。

但我只是说用 Python 编写 OpenCL 内核。还有主机应用程序,它准备和提交内核。如果你喜欢 Python,我建议用 PyOpenCL 之类的包装器用纯 Python 编写主机应用程序来访问 OpenCL API。然后,在纯 OpenCL 中编写您的内核,并让您的 Python 应用按原样提交它们。我相信这将从 Python 中获得您想要的大部分内容,同时几乎不花费任何性能成本。

于 2011-11-15T22:13:05.783 回答
1

使用 OpenCL 编程最困难的部分是并行化您的算法——这意味着编写您的内核。很有可能,您将花费大部分时间来调整和理解您的 OpenCL C 代码,AFAIK 是您编写内核的唯一选择。

既然如此,我说去纯 C/OpenCL 实现。一旦您启动并运行了“样板”OpenCL API 部分,您就不必对其进行太多更改。如果有的话,您将使用诸如传递给的工作组大小之类的东西clEnqueueNDRangeKernel

如果您是 CL 的新手,我建议您保持简单。为问题添加另一个软件层——尤其是定义为线性求解器的问题——只会使您的工作复杂化。

编辑:

我应该补充一点,当您使用标准 OpenCL API 时,您可以扩大在线帮助/支持的潜力。如果您选择使用其中一种 python 绑定,您可能会限制您对来自这些社区的人们的潜在支持。

于 2011-11-15T22:21:39.300 回答