2012-02-03 35 views
2

我的程序有两个内核,第二个内核应该使用已经上传的输入数据和第一个内核的结果,所以我可以保存内存传输。我将如何归档这个?如何让PyCUDA重用早期内核的内存?

这是我启动我的内核:

result = gpuarray.zeros(points, dtype=np.float32) 

kernel(
    driver.In(dataT),result,np.int32(points), 
    grid = (blocks,1), 
    block = (block_size, 1, 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()