我猜对于专家来说这是一个相当简单的问题,但我在网络上找不到任何答案。给出一个简单的案例:
问题:
这个列表将被传输到GPU进行进一步处理。然后我将继续使用通用的CUDA过程进行内存复制:
然后调用内核本身。然而,列表没有缓冲区接口,因此
问题:
listToProcess = []
for i in range(0, 10):
listToProcess.append(i)
这个列表将被传输到GPU进行进一步处理。然后我将继续使用通用的CUDA过程进行内存复制:
import sys
import pycuda.autoinit
import pycuda.driver as cuda
listToProcess_gpu = cuda.mem_alloc(sys.getsizeof(listToProcess))
cuda.memcpy_htod(listToProcess_gpu, listToProcess)
然后调用内核本身。然而,列表没有缓冲区接口,因此
memcpy_htod()
会崩溃。我也尝试了不同的方法,但最终都导致了以下问题:
问题
- 如何将包含内容的列表从Python程序传输到GPU内核?
- 如何为内核指定列表的数据类型(例如浮点数、整数等)?
dtype=np.float32
,在CUDA/Kernel端请使用float*
。否则,格式不正确,您将无法将实际值分配给数组。 - user3085931