Asynchronous 异步调用后的cudaFree工作吗?

Asynchronous 异步调用后的cudaFree工作吗?,asynchronous,cuda,Asynchronous,Cuda,我想问一下在一些异步调用之后调用cudaFree是否有效?比如说 int* dev_a; // prepare dev_a... // launch a kernel to process dev_a (asynchronously) cudaFree(dev_a); 在这种情况下,由于内核启动是异步的,当到达cudaFree部分时,内核可能还没有完成运行。那么cudaFree(dev_a)会在销毁数据后立即销毁吗?根据Jared的评论,我大约99%确定CUDA无驱动程序/malloc对

我想问一下在一些异步调用之后调用cudaFree是否有效?比如说

int* dev_a;

// prepare dev_a...

// launch a kernel to process dev_a (asynchronously)

cudaFree(dev_a);

在这种情况下,由于内核启动是异步的,当到达cudaFree部分时,内核可能还没有完成运行。那么cudaFree(dev_a)会在销毁数据后立即销毁吗?

根据Jared的评论,我大约99%确定CUDA无驱动程序/malloc对被实现为阻塞调用,这将在执行调用之前同步它们操作的上下文。

非常确定
cudaFree
将在尝试释放指针之前同步。谢谢!内核中的“free”函数怎么样?如果我有一个内核启动立即进行,这工作吗?