cudaThreadSynchronize() 要求

标签 c cuda

我有一个像这样的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/

相关文章:

C 乘法或加法浮点结果 NaN

c语言memove()函数输出错误?

c - in_addr 随机结果

c - 如何从控制台获取线程调度策略

c++ - 我应该汇集 CUDA 流吗?

cuda - CUDA 内核中主机浮点常量的使用

从其字节计算整数会给出奇怪的错误结果

sorting - 使用 CUDA Thrust 同时对多个数组进行排序

python - 理解和优化 pyCUDA 中的线程、 block 和网格

r - R 中的矩阵运算 : parallelization, 稀疏运算,GPU 计算