CUDA:可能一个宿主方法调用内核/cudaMemcpy在内核/memcpy结束之前返回

CUDA : Might a host method that calls a kernel/cudaMemcpy return before the kernel/memcpy finish?

本文关键字:内核 cudaMemcpy memcpy 结束 返回 调用 方法 宿主 一个 CUDA      更新时间:2023-10-16

我有一个方法,将一些数据复制到设备,在自己的流上调用多个内核,然后为不同的流调用cudaMemcpyAsync,以便它们在各自的内核之后运行。

因为我读到内核和cudaMemcpyAsync都是与主机代码并行启动和运行的,我可能在这些完成之前调用它们的函数,或者它只在同一个函数中与主机代码并行运行?

调用内核/cudaMemcpy的宿主方法可能在内核/memcpy完成之前返回吗?

是的,它可能。如果您所做的只是调用内核和cudaMemcpyAsync操作,那么调用这些操作的cpu函数可能会在操作完成之前结束/返回(即使它是您的main例程!)

这些操作都是异步的,这意味着它们不会阻塞调用它们的CPU线程。

即使你有很多CPU代码在内核调用和cudaMemcpyAsync调用之后运行,也不能保证GPU活动将完成(甚至开始!)除非你使用一些函数来同步主机线程与设备活动,例如普通的cudaMemcpy调用或cudaDeviceSynchronize()调用或cudaStreamSynchronize()或其他类似的调用。

这不受cpu/主机代码的功能结构的影响。