PyOpenCL vs Clyther vs纯OpenCL和C99:新手最好的是什么?

时间:2011-11-15 20:14:58

标签: python performance opencl pyopencl

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

我喜欢Ruby或Python等动态语言,而且我不习惯使用像C这样的低级语言。

所以我同时有两个目标:

  1. 开发这样的OpenCL解决方案,以便像我一样快速地解决线性系统问题 尽可能少的努力。
  2. 性能不要太大。为方便起见,我不想支付2-10倍的减速费用,但我愿意用高级语言支付30-50%的费用。
  3. 对我来说最好的情况是:几乎没有浪费在OpenCL C中编译python代码。

    我找到了这样的解决方案:纯OpenCL C,PyOpenCLClyther

    我该怎么办?

2 个答案:

答案 0 :(得分:4)

我的观点是,尝试将动态语言强加于OpenCL并不值得付出努力。你将失去大部分你喜欢的Python,并且最终可能不会为你的努力节省很多时间。

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

答案 1 :(得分:1)

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

在这种情况下,我说要去实现纯C / OpenCL实现。一旦启动并运行“样板”OpenCL API部分,您就不太可能需要对其进行大量更改。如果有的话,您将使用传递给clEnqueueNDRangeKernel的工作组大小等内容。

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

编辑:

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