我可以仅使用Python编程Nvidia的CUDA,还是必须学习C?

时间:2010-06-01 04:04:51

标签: python cuda opencl

我想这个问题不言而喻。我有兴趣做一些严肃的计算,但不是贸易程序员。我可以将足够多的python串起来完成我想要的任务。但我可以在python中编写程序并让GPU使用CUDA执行它吗?或者我是否必须使用python和C的混合?

Klockner(sp)“pyCUDA”网页上的例子混合了python和C,所以我不确定答案是什么。

如果有人想要了解Opencl,请随意。我几周前就听说过这个CUDA业务,并且不知道你可以使用这样的显卡。

8 个答案:

答案 0 :(得分:20)

您应该查看CUDAmatTheano。两者都是编写在GPU上执行的代码的方法,而不必非常了解GPU编程。

答案 1 :(得分:18)

我相信,使用PyCUDA,您的计算内核将始终必须写为“CUDA C Code”。 PyCUDA负责许多其他繁琐的簿记工作,但不会从Python代码构建计算CUDA内核。

答案 2 :(得分:8)

pyopencl为PyCUDA提供了一个有趣的替代方案。它被描述为PyCUDA的“姐妹项目”。它是围绕OpenCL API的完整包装器。

据我了解,OpenCL具有在Nvidia之外运行GPU的优势。

答案 3 :(得分:5)

已经有了很好的答案,但另一种选择是Clyther。通过将Python的子集编译为OpenCL内核,它可以让您编写OpenCL程序而不使用C语言。

答案 4 :(得分:4)

一个有前途的库是Copperheadalternative link),你只需要装饰你想要由GPU运行的函数(然后你可以选择加入/选择退出它看看cpu或gpu之间的最佳功能)

答案 5 :(得分:1)

有一个很好的,基本的数学结构集,其中已经编写了可以通过pyCUDA的cumath module访问的计算内核。如果你想做更多涉及或特定/自定义的东西,你将不得不在内核定义中写一点C,但是关于pyCUDA的好处是它会为你做大量的C-lifting;它在后端进行了大量的元编程,因此您不必担心严重的C编程,只需要小部分。给出的一个例子是Map / Reduce内核来计算点积:

dot_krnl = ReductionKernel(np.float32, neutral="0", reduce_expr="a+b", map_expr="x[i]*y[i]", arguments="float *x, float *y")

每个参数中的一小段代码都是C行,但它实际上是为您编写程序的。 ReductionKernel是map / reducish类型函数的自定义内核类型,但有不同的类型。官方pyCUDA documentation的示例部分更详细。

祝你好运!

答案 6 :(得分:0)

Scikits CUDA package可能是更好的选择,前提是它不需要任何低级知识或C代码用于任何可以表示为numpy数组操作的操作。

答案 7 :(得分:0)

我想知道同样的事情并进行了一些搜索。我发现下面链接的文章似乎回答了你的问题。但是,你在2014年问过这个问题,而Nvidia的文章没有约会。

https://developer.nvidia.com/how-to-cuda-python

视频通过设置,一个初步的例子,非常重要的是,profiliing。但是,我不知道您是否可以实现所有常用的通用计算模式。我认为你可以,因为尽我所能,NumPy没有任何限制。