【发布时间】:2011-07-19 10:01:06
【问题描述】:
我想使用 __syncthreads() 来进行类似的递归
__device__ void foo(int k) {
if (some_condition) {
for (int i=0;i<8;i++) {
foo(i+k); // foo might take longer with some inputs
__syncthreads();
}
}
}
这个 __syncthreads() 现在如何应用?我知道它只在一个块内应用。据我了解,这适用于所有本地线程,与递归深度无关?但是如果我想确保这个 __syncthreads() 达到一定的递归深度呢?这甚至可能吗?我可以检查递归深度,但我相信这也行不通。
有没有可能的替代品?
我已经看到 CUDA Device >= 2.0 有 3 个同步线程扩展
int __syncthreads_count(int predicate);
int __syncthreads_and(int predicate);
int __syncthreads_or(int predicate);
但我认为它们不会有帮助,因为它们看起来像一个原子计数器。
【问题讨论】:
-
我没有确切的答案,因为我自己从未做过类似的事情,只是为了检查您是否知道,您在代码中输入的 some_condition 必须对相同的块,否则会死锁。
-
是的,这也是我害怕的。
-
请问您能澄清您的问题吗?我真的不明白你在这里问什么。