2
我有這樣的CUDA程序:的cudaThreadSynchronize()要求
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將繼續無需等待內核結束所以......我應該打電話運行在unbind_x()之前的cudaThreadSynchronize()
。我試圖用&運行沒有,結果是一樣的?!? (理論上它不應該)
除此之外......「異步操作」包括cudaMemcpyAsync系列,但重要的是其他內核啓動。 – Tom 2010-08-31 10:51:46
當然。很自然,如果kernel_code <<>>()以異步模式運行,那麼其他內核也將以異步模式運行。謝謝你的補充。 – KoppeKTop 2010-08-31 11:11:00
但是我的綁定和解除綁定不是內核調用。在內核中,我必須從紋理內存中提取x,而如果沒有同步,可能已經解除綁定 – w00d 2010-08-31 15:13:38