PyCUDA 如何将变量按值传递给内核

6 投票
1 回答
5473 浏览
提问于 2025-04-16 16:00

这应该很简单;我就是想把一个整数发送到一个 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默认使用的是双精度,这样可能会导致类似的错误。

撰写回答