CUDA を使用して、ノードのリストから無向グラフを作成しています。各ノードには 3 次元の座標があり、ノードがカットオフ距離 d 未満で分離されている場合、私のプログラムは 2 つのノード間にエッジを作成します。
現在、エッジを隣接リストの形式で保存しています。問題は、ペアごとの距離を非同期で計算する 1024 のスレッドがあることです。ノード A と B の間でエッジが「発見」されたら、ノード A のエッジの数を増やし、ノード B を隣接リストの「次に利用可能な」位置に配置する必要があります。
ここで、CUDA は私に悪夢を与えています。adjacency-list-update プロセスを重要にしたいのですが、CUDA は atomicAdd() 以外のものを提供していないようです。その結果、コードを実行するたびに、予期しない動作と異なる隣接リストが表示されます。
隣接リストを非同期的に作成する方法はありますか? おそらく、より巧妙なデータ構造を介してですか?