【问题标题】:PyCUDA Passing variable by value to kernelPyCUDA 按值将变量传递给内核
【发布时间】:2011-08-08 07:35:27
【问题描述】:

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

__global__......(int value,.....)

声明和调用的值...

value = 256
...
...
func(value,...)

但是我从 pycuda 收到了我使用错误类型的各种错误。

【问题讨论】:

    标签: python cuda gpgpu pycuda


    【解决方案1】:

    标准的 PyCUDA 函数接口要求参数具有 numpy dtypes,因为它在内部确实映射到引擎盖下的 C 类型。因此,对于按值传递的标量参数,您需要先“转换”为合适的 numpy dtype。类似的东西

    value = 256
    va = numpy.int32(value)
    
    func(va)
    

    应该可以。如果您要传递单精度浮点值或数组,请确保显式使用 np.float32 的 dtype,因为 numpy 默认使用双精度,您会遇到类似的错误。

    【讨论】:

    • 再次感谢您。问题的下一个(迷你)部分是指针;如果我的函数需要一个 int,这仍然会表现为“预期”还是在内核代码中做一些与指针相关的乐趣?我之所以问,是因为为了单个 int 而进行 cudamallocing 似乎有点浪费。
    • pycuda 会将标量映射到由值传递的参数,并将 gpuarrays 映射到指针,而无需在标准函数接口中执行任何操作。还有一个选项可以设置你自己的静态接口列表,如果你必须多次调用一个函数,这会很有用,因为它减少了 Python 解释器一遍又一遍地执行相同的接口列表的开销。这是“最后 5%”的类型优化,不过...
    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多