Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CUDA:调用kernel/cudaMemcpy的主机方法可能会在kernel/memcpy完成之前返回吗?_C++_Cuda - Fatal编程技术网

C++ CUDA:调用kernel/cudaMemcpy的主机方法可能会在kernel/memcpy完成之前返回吗?

C++ CUDA:调用kernel/cudaMemcpy的主机方法可能会在kernel/memcpy完成之前返回吗?,c++,cuda,C++,Cuda,我有一种方法,可以将一些数据复制到设备上,在各自的流上调用多个内核,然后为不同的流调用cudaMemcpyAsync,以便它们在各自的内核之后运行 既然我已经读到内核和cudaMemcpyAsync都是启动的,并且与主机代码并行运行,那么在这些操作完成之前,我会调用它们作为回报,还是只与同一个函数中的主机代码并行运行 调用kernel/cudaMemcpy的主机方法是否会在kernel/memcpy完成之前返回 是的,可能会。如果您只需调用内核和cudaMemcpyAsync操作,那么调用这些操

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

既然我已经读到内核和cudaMemcpyAsync都是启动的,并且与主机代码并行运行,那么在这些操作完成之前,我会调用它们作为回报,还是只与同一个函数中的主机代码并行运行

调用kernel/cudaMemcpy的主机方法是否会在kernel/memcpy完成之前返回

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

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

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

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