- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个方法可以将一些数据复制到设备,在各自的流上调用多个内核,然后为不同的流调用 cudaMemcpyAsync
,以便它们在各自的内核之后运行。
因为我已经读到内核和 cudaMemcpyAsync
都已启动并与主机代码并行运行,我可能会在这些完成之前调用它们作为返回,或者它只会与主机代码并行运行宿主代码在同一个函数中?
最佳答案
Might a host method that calls a kernel/cudaMemcpy return before the kernel/memcpy finish?
是的,可能。如果您所做的只是调用内核和 cudaMemcpyAsync
操作,则调用这些操作的 cpu 函数可能会在操作完成之前完成/返回(即使它是您的 main
例程!)
这些操作都是异步的,这意味着它们不会阻塞调用它们的 CPU 线程。
即使您有大量 CPU 代码在内核调用和 cudaMemcpyAsync
调用之后运行,也不能保证 GPU 事件将完成(甚至开始!),除非您使用某些函数将主机线程与设备事件同步,例如普通的 cudaMemcpy
调用或 cudaDeviceSynchronize()
调用或 cudaStreamSynchronize()
或其他类似调用.
这不受您的 cpu/主机代码的功能结构的影响。
关于c++ - CUDA : Might a host method that calls a kernel/cudaMemcpy return before the kernel/memcpy finish?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38984619/
我是一名优秀的程序员,十分优秀!