__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デバイス> = 2.0
int __syncthreads_count(int predicate);
int __syncthreads_and(int predicate);
int __syncthreads_or(int predicate);
のための3つのsyncthread拡張があることを見てきました。しかし、私は、彼らは、原子カウンターのように見えるので、彼らは役立つとは思いません。
自分自身のようなことは一度もしていませんが、認識しているかどうかを確認するために、コードに入れるsome_conditionは同じブロック内のすべてのスレッドについて同じものを評価する必要があります。それはデッドロックします。 – jmsu
はい、それも私が恐れているものです。 – Pascal
質問を明確にできますか?私はあなたがここで何を求めているのか本当に理解していない。 – Tom