我可以使用Python编程Nvidia的CUDA还是必须学习C?
我想这个问题本身就说明了。 我有兴趣做一些严肃的计算,但不是交易程序员。 我可以串起足够的python来完成我想要的。 但是,我可以用python编写一个程序,让GPU使用CUDA来执行它吗? 或者我必须使用Python和C的混合?
Klockner(sp)“pyCUDA”网页上的例子有python和C的混合,所以我不确定答案是什么。
如果有人想要谈谈Opencl的话,请随意。 我几个星期前才听说过这个CUDA业务,不知道你可以使用这样的显卡。
你应该看看CUDAmat和Theano 。 这两种方法都是编写在GPU上执行的代码,而不必真正了解GPU编程。
我相信,使用PyCUDA,您的计算内核总是必须写成“CUDA C代码”。 PyCUDA负责许多繁琐的簿记工作,但并不是从Python代码构build计算CUDA内核。
pyopencl提供了一个有趣的替代PyCUDA。 它被形容为PyCUDA的“姊妹项目”。 这是OpenCL API的完整包装。
据我所知,OpenCL具有在Nvidia之外的GPU上运行的优势。
已经有了很好的答案,但另一个select是Clyther 。 通过编译Python的一个子集到OpenCL内核,它可以让你编写OpenCL程序,甚至不需要使用C语言。
一个有前途的库是Copperhead ( 替代链接 ),你只需要装饰你想要由GPU运行的function(然后你可以selectjoin/退出它看看什么是最好的CPU或GPU之间的function)
有一个很好的基本的math结构集合,已经编写的计算内核可以通过pyCUDA的cumath
模块访问。 如果你想做更多的参与或特定的/定制的东西,你将不得不在内核定义中写一点C,但是关于pyCUDA的好处是它会为你做很重的C提升, 它在后端做了很多元编程,所以你不必担心严重的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行,但实际上它是为你编写程序的。 ReducingKernel是map / reducishtypes函数的自定义内核types,但有不同的types。 官方pyCUDA 文档的示例部分更详细。
祝你好运!
Scikits CUDA包可能是一个更好的select,只要它不需要任何底层知识或C代码的任何操作,可以表示为numpy数组操作。
我想知道同样的事情,并进行了一些search。 我发现下面链接的文章似乎回答你的问题。 不过,你在2014年问过这个问题,Nvidia的文章没有date。
https://developer.nvidia.com/how-to-cuda-python
video经历了一个初始的例子,而且非常重要的是,这个video已经被certificate是非常有用的。 但是,我不知道你是否可以实现所有通常的计算模式。 我会认为你可以,因为我尽可能在NumPy中没有任何限制。