调用同步 cuda 函数(例如 cudaMalloc()
、cudaBindTextureToArray()
等)是否会阻塞主机,直到设备上所有先前请求的任务都完成完全的?或者它只会在对该同步函数的调用完成之前阻塞?
换句话说,调用同步 cuda 函数是否与 cudaDeviceSynchronize()
具有相同的效果?
最佳答案
是的,它应该阻塞直到前面的所有任务都完成。
您可以通过在 CPU 端定时执行语句来测试这一点:
放置一个异步任务,如内核执行,然后是一个同步任务,如 cudaMemcpy()
,并分别执行两者的时间。如果将 cudaDeviceSynchronize()
紧跟在内核之后,则两次调用的时间都是正确的。但是,如果删除 cudaDeviceSynchronize()
调用,您会看到执行内核的时间似乎附加到 cudaMemcpy()
调用上。
关于cuda - 对 cuda 同步函数的调用会阻止 GPU 上的所有先前任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166172/