PyCUDA 如何将变量按值传递给内核
这应该很简单;我就是想把一个整数发送到一个 SourceModule 的内核声明中,也就是 C 语言的函数。
__global__......(int value,.....)
在这里我声明并调用这个值……
value = 256
...
...
func(value,...)
但是我从 pycuda 得到了一些错误,提示我使用了错误的类型。
1 个回答
11
标准的PyCUDA函数接口要求参数使用numpy的数据类型,因为它在内部会把这些数据类型转换成C语言的类型。所以对于那些按值传递的标量参数,你需要先“转换”成合适的numpy数据类型。你可以这样做:
value = 256
va = numpy.int32(value)
func(va)
这样应该就能正常工作。如果你传递的是单精度浮点数值或者数组,记得要明确使用np.float32这个数据类型,因为numpy默认使用的是双精度,这样可能会导致类似的错误。