我的程序有两个内核,第二个内核应该使用已经上传的输入数据和第一个内核的结果,所以我可以节省内存传输。我将如何存档?
这就是我启动内核的方式:
result = gpuarray.zeros(points, dtype=np.float32)
kernel(
driver.In(dataT),result,np.int32(points),
grid = (blocks,1),
block = (block_size, 1, 1),
)
我的程序有两个内核,第二个内核应该使用已经上传的输入数据和第一个内核的结果,所以我可以节省内存传输。我将如何存档?
这就是我启动内核的方式:
result = gpuarray.zeros(points, dtype=np.float32)
kernel(
driver.In(dataT),result,np.int32(points),
grid = (blocks,1),
block = (block_size, 1, 1),
)
在 pycuda 中,除非您明确请求,否则您不会将数据传入和传出设备。例如,如果您通过以下方式分配内存并将一些数据传输到 GPU:
result = float64(zeros( (height,width) )
result_device = gpuarray.to_gpu(result)
变量 result_device 是对 GPU 中数据的引用。您可以将 result_device 传递给任何其他内核,而不会导致内存传输回 CPU。在这种情况下,当您调用时,将再次发生内存传输:
result = result_device.get()