PyCUDA将值传递给内核

Bol*_*ter 4 python cuda gpgpu pycuda

应该够简单; 我真的想把一个int发送到一个SourceModule内核声明,其中有C函数

__global__......(int value,.....)
Run Code Online (Sandbox Code Playgroud)

声明并调用值...

value = 256
...
...
func(value,...)
Run Code Online (Sandbox Code Playgroud)

但我从pycuda得到了各种各样的错误,我使用了错误的类型.

tal*_*ies 9

标准的PyCUDA函数接口要求参数有numpy dtypes,因为它在内部映射到引擎盖下的C类型.因此,对于通过值传递的标量参数,您需要首先"转换"为合适的numpy dtype.就像是

value = 256
va = numpy.int32(value)

func(va)
Run Code Online (Sandbox Code Playgroud)

应该管用.如果要传递单精度浮点值或数组,请确保显式使用np.float32的dtype,因为numpy默认使用双精度,并且最终会出现类似的错误.

  • pycuda会将标量映射到由值传递的参数,将gpuarrays映射到指针,而无需在标准函数接口中执行任何操作。还有一个设置您自己的静态接口列表的选项,如果您必须多次调用一个函数,该选项将很有用,因为它可以减少一遍又一遍地执行相同接口列表的python解释器开销。不过,这是“最后5%”的类型优化。 (2认同)