我有一个像这样的cuda程序:
for (int i=0;i<100000;i++) {
if (i%2 == 0) {
bind_x(x) // bind x to texture
kernel_code<<A,B>>(M,x,y) // calculate y = M*x
}
else {
bind_x(y)
kernel_code<<A,B>>(M,y,x) // calculate x = M*y
}
cudaThreadSynchronize();
if (i%2 == 0)
unbind_x(x)
else
unbind_x(y) // unbind x from texture
}
我听说如果我不放置cudaThreadSynchronize();
cpu将继续运行而不等待内核结束所以......我应该调用cudaThreadSynchronize()
在 unbind_x() 之前。我尝试使用和不使用运行,结果是相同的?!? (理论上不应该)
最佳答案
任何 CUDA 操作(特殊异步操作除外)都会自动引发 cudaThreadSynchronize()
。因此,结果应该是相同的。
关于cudaThreadSynchronize() 要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606459/