【发布时间】:2013-04-12 17:21:04
【问题描述】:
我对一些关于阻塞和 cudaMemcpy 的 cmets 感到困惑。据我了解,Fermi HW 可以同时执行内核并执行 cudaMemcpy。
我读到 Lib func cudaMemcpy() 是一个阻塞函数。这是否意味着 func 将阻止进一步执行,直到副本完全完成?或者这是否意味着在之前的内核完成之前不会开始复制?
例如此代码是否提供相同的阻塞操作?
SomeCudaCall<<<25,34>>>(someData);
cudaThreadSynchronize();
对
SomeCudaCall<<<25,34>>>(someParam);
cudaMemcpy(toHere, fromHere, sizeof(int), cudaMemcpyHostToDevice);
【问题讨论】:
-
我如何知道哪些呼叫被阻塞,哪些不是?我在库描述中没有看到任何“我是阻塞 API 调用”的内容。即在 cudaMemcpy 描述中没有提到阻塞。 (也许我找错地方了?)
-
我怀疑任何涉及 host 和 device 的函数都会被阻塞,除非它的名称中包含
async。除了cudaDeviceSynchronize(),所有其他函数都是非阻塞的
标签: cuda