gpt4 book ai didi

cuda - 我怎么知道 cudaMemcpyAsync 已完成读取主机内存?

转载 作者:行者123 更新时间:2023-12-05 00:52:26 26 4
gpt4 key购买 nike

例如...这是我在 NVIDIA 文档中看到的内容:

cudaMemcpyAsync(a_d, a_h, size, cudaMemcpyHostToDevice, 0);
kernel<<<grid, block>>>(a_d);
cpuFunction();

假设这是包装在一个函数中......
void consume() {
cudaMemcpyAsync(a_d, a_h, size, cudaMemcpyHostToDevice, 0);
kernel<<<grid, block>>>(a_d);
}

如果我也有一个函数怎么办
void produce() {
// do stuff
a_h[0] = 1;
a_h[1] = 3;
a_h[2] = 5;
//...
}

如果我打电话:
produce();
consume();
produce(); // problem??

第二个 producer() 将开始更改主机上的内存 a_h
我怎么知道 CUDA 在异步内存复制例程期间仍然没有读取主机内存?

如何安全地写信给主机 a_h内存而不破坏该异步内存副本?

编辑 - -

我知道我可以调用 cudaDeviceSynchronize()cudaStreamSynchronize()但这也将等待 kernel去完成。我宁愿不要等到 kernel已经完成了。

我想开始写信给主机 a_h尽快,而不是等待 kernel完成。

最佳答案

如果您对 cudaMemcpyAsync 使用流调用,您可以在异步传输之后将事件插入流中,然后使用 cudaEventSynchronize 同步该事件。这保证了复制已经完成,但不依赖于设备空闲或流为空。

关于cuda - 我怎么知道 cudaMemcpyAsync 已完成读取主机内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42719528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com