如何告诉 PyCUDA 重用早期内核的内存?
我的程序有两个内核,第二个内核应该使用已经上传的输入数据和第一个内核的结果,这样我就可以节省内存传输。我该如何存档这个?
这就是我启动内核的方式:
result = gpuarray.zeros(points, dtype=np.float32)
kernel(
driver.In(dataT),result,np.int32(points),
grid = (blocks,1),
block = (block_size, 1, 1),
)
My program has two kernels and the second kernel should use the already uploaded input data and the results from the first kernel, so I can save the memory transfers. How would I archive this?
This is how I launch my kernels:
result = gpuarray.zeros(points, dtype=np.float32)
kernel(
driver.In(dataT),result,np.int32(points),
grid = (blocks,1),
block = (block_size, 1, 1),
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 pycuda 中,除非您明确请求,否则您不会与设备传输数据。
例如,如果您使用以下方式分配内存并将一些数据传输到 GPU:
变量 result_device 是对 GPU 中数据的引用。您可以将 result_device 传递给任何其他内核,而不会导致内存传输回 CPU。
在这种情况下,当您调用以下命令时,内存传输将再次发生:
In pycuda you won't transfer data to and from the device unless you explicitly request it.
For example, if you allocate memory and transfer some data to the GPU with:
The variable result_device is a reference to the data in the GPU. You can pass result_device to any other kernel without incurring a memory transfer back to the CPU.
In this case a memory transfer will happen again when you call: