cudaThreadSynchronize() 要求

发布于 2024-09-16 19:09:33 字数 575 浏览 7 评论 0原文

我有一个像这样的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() 之前。我尝试与&一起跑步没有,结果是一样的?!? (理论上不应该)

I have a cuda program like this :

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
}

I heard that if I do not put cudaThreadSynchronize(); cpu will continue to run without waiting for the kernel to end so ... Should I call cudaThreadSynchronize() before unbind_x(). I try to run with& without, the result is the same ?!? (And in theory It shouldn't)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画中仙 2024-09-23 19:09:33

任何CUDA操作(特殊的异步操作除外)都会自动引发cudaThreadSynchronize()。所以,结果应该是一样的。

Any CUDA operation (except special asynchronious operations) will cause cudaThreadSynchronize() automatically. So, results should be the same.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文