2016-03-27 13 views
0

私のカーネルでは条件をチェックし、真であれば配列にtidを挿入します。 私は次のことを原子的に行う必要があります。Cudaは原子的に操作を実行します

if(condition){ 
    arr[*index_ptr] = tid; 
    (*index_ptr)++ 
} 

基本的に、2つのスレッドが配列の同じ位置にtidを書き込まないようにします。

これを行う簡単な方法はありますか?ロックはCUDAで実装するのが難しいと聞きました。

答えて

1

cudaライブラリには、アトミック関数が組み込まれています。あなたはそれに追加するこの機能は、(タイプは私は信じて一致しなければならない)、intやfloatと別のintまたはfloat型へのポインタを取る

Cuda Programming Guide

)(atomicaddを探していることになります。また、アトミック操作の前にポインタの値を便利に返します。

関連する問題