cuda - 对 cuda 同步函数的调用会阻止 GPU 上的所有先前任务吗?

标签 cuda

调用同步 cuda 函数(例如 cudaMalloc()cudaBindTextureToArray() 等)是否会阻塞主机,直到设备上所有先前请求的任务都完成完全的?或者它只会在对该同步函数的调用完成之前阻塞?

换句话说,调用同步 cuda 函数是否与 cudaDeviceSynchronize() 具有相同的效果?

最佳答案

是的,它应该阻塞直到前面的所有任务都完成。

您可以通过在 CPU 端定时执行语句来测试这一点:

放置一个异步任务,如内核执行,然后是一个同步任务,如 cudaMemcpy(),并分别执行两者的时间。如果将 cudaDeviceSynchronize() 紧跟在内核之后,则两次调用的时间都是正确的。但是,如果删除 cudaDeviceSynchronize() 调用,您会看到执行内核的时间似乎附加到 cudaMemcpy() 调用上。

关于cuda - 对 cuda 同步函数的调用会阻止 GPU 上的所有先前任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166172/

相关文章:

c++ - 关于从设备向主机复制数据时的推力::execution_policy

cuda - openacc 与 openmp 和 mpi 的区别?

linux - 如何为 gcc/g++ 4.5 建立软链接(soft link)

cuda - GPU从CPU读取还是CPU写入GPU?

CUDA输出变量始终为0

CUDA 框过滤器索引错误

c++ - 如果调用 cudaMalloc,简单的控制台程序将不会退出

c++ - 在 GPU 上使用 CUDA 并行化简单算法

cuda - 推力:删除键值数组中的重复项

cuda - Nvidia Profiling NVPROF 的 CPU 启动和 GPU 启动的开始和结束边界在哪里?