4

与えられた数値のセットの最大値を見つけるために、CUDAでコードを書き込もうとしています。

20個の番号があり、カーネルが5スレッドの2ブロックで実行されていると仮定します。ここで、10個のスレッドが最初の10個の値を同時に比較し、スレッド2が最大値を検出すると、スレッド2はグローバルメモリの最大値変数を更新するとします。スレッド2が更新されている間、古い値を使用して比較する残りのスレッド(1,3-10)はどうなりますか?

atomcas()を使用してグローバル変数をロックした場合、スレッド(1,3-10)は古い最大値を使用して比較しますか?どうすればこの問題を克服できますか?

4

4 に答える 4

10

これは純粋に削減の問題です。これは、GPU の削減を最適化するための NVIDIA による優れたプレゼンテーションです。同じ手法を使用して、すべての要素の最小値、最大値、または合計を見つけることができます。

于 2011-03-10T06:12:04.630 に答える
-1

リダクションカーネルを作成しようとしているのでない限り、最も簡単な方法は単にCUBLASを使用することです。

于 2011-03-10T07:42:13.153 に答える