Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CUDA中的无序指令不起作用_C++_Cuda_Shuffle - Fatal编程技术网

C++ CUDA中的无序指令不起作用

C++ CUDA中的无序指令不起作用,c++,cuda,shuffle,C++,Cuda,Shuffle,我对CUDA 5.0中的无序指令有问题 这是我的内核片段。它在循环中。打印仅用于调试目的,因为我无法使用普通调试器: ... tex_val = tex2D(srcTexRef, threadIdx.x + w, y_pos); if (threadIdx.x == 0) { left = left_value[y_pos]; } else { printf("thread %d; shfl value: %f \n", threadIdx.x, __shfl_up(value,

我对CUDA 5.0中的无序指令有问题

这是我的内核片段。它在循环中。打印仅用于调试目的,因为我无法使用普通调试器:

...
tex_val = tex2D(srcTexRef, threadIdx.x + w, y_pos);
if (threadIdx.x == 0)
{
    left = left_value[y_pos];
}
else
{
    printf("thread %d; shfl value: %f \n", threadIdx.x, __shfl_up(value, 1));
    left = __shfl_up(value, 1);
}

printf("thread %d; value: %f; tex_val: %f; left: %f \n", threadIdx.x, value, tex_val, left);
...
从中我得到以下输出:

l0:  ITERATION 1
l1:  thread 0; value: 0; tex_val: 1; left: 4
l2: 
l3:  ITERATION 2
l4:  thread 1; shfl value: 0
l5:  thread 0; value: 5; tex_val: 1; left: 5
l6:  thread 1; value: 0; tex_val: 1; left: 0
l7: 
l8:  ITERATION 3
l9:  thread 1; shfl value: 0
l10: thread 2; shfl value: 1
l11: thread 0; value: 6; tex_val: 1; left: 6
l12: thread 1; value: 1; tex_val: 1; left: 0
l13: thread 2; value: 2; tex_val: 1; left: 1
...

从输出中,我可以看到线程1在任何迭代中都不会从线程0获得值,尽管我可以清楚地看到它有值(第4行-shfl值为0;第5行-value为5)。线程2和更高的线程可以从较低的线程获得值。我哪里出错了?这是因为分支吗?

是的,这是因为分支。引述:

\uuushfl()
内部函数允许在warp内的线程之间交换变量,而无需使用共享内存。对warp中的所有活动线程同时进行交换

线程只能从另一个积极参与
\uuu shfl()
命令的线程读取数据。如果目标线程处于非活动状态,则检索到的值未定义


在分支中,活动线程是采用相同执行路径的线程,而采用不同执行路径的线程是非活动线程。在您的情况下,线程0处于非活动状态,因此您无法从中移出。

谢谢。我读过这篇文章,但我不明白什么时候线程是活动的,什么时候不是。这是关于我在学校的项目的问题。我没有nvidia图形卡,所以我必须在校园计算机上执行此项目,我没有管理员权限,因此没有nvidia调试器。