CUDA异步调用后使用cudaFree是否可行?

3
我想问一下,在进行异步调用后是否可以调用cudaFree函数?例如:
int* dev_a;

// prepare dev_a...

// launch a kernel to process dev_a (asynchronously)

cudaFree(dev_a);

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

3
cudaFree在尝试释放指针之前会同步。 - Jared Hoberock
2个回答

3
根据Jared的评论,我几乎可以确定CUDA驱动程序的free/malloc对是实现为阻塞调用,它们会在执行调用前同步它们操作的上下文。

谢谢!内核中的“free”函数怎么样?如果我在其后立即启动内核,这会起作用吗? - shaoyl85

2

CUDA现在提供了基于流的异步内存管理函数:cudaMallocAsync、cudaMemcpyAsync和cudaMemsetAsync。

这里提供了简短的介绍。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接