0

私の pyopencl カーネル プログラムはグローバル サイズ (512,512) で開始され、512x512=262,144 回実行されると想定しています。512x512 の画像で関数の最小値を見つけたいのですが、最小値を計算するために 262,144 個の浮動小数点数を CPU に返したくありません。すべての 262,144 ピクセルの最小値を見つけて、その 1 つのフロートを CPU に送信するために、別のカーネル (おそらくキューで待機中) を実行したいと考えています。この方が早いと思います。待機中のカーネルのグローバル サイズは (1,1) にする必要がありますか? 次のカーネルを呼び出す前に、mf.COPY_HOST_PTR を使用して作成した float の大きな 262,144 バッファーが GPU/CPU バスを通過しないことを願っています。

ありがとうティム

4

2 に答える 2

2

Andreas の言うとおりです。削減が解決策です。これは、単純な削減を実装する方法を説明する AMDの素晴らしい記事です。さまざまなアプローチと、それらがもたらすパフォーマンスの観点からの利点について説明します。この記事の例は、すべての要素を合計することであり、最小値を見つけることではありませんが、指定されたコードを変更するのはかなり簡単です。

ところで、最初の文がよくわからないかもしれませんが、(512, 512) のグローバル サイズで起動されたカーネルは 262,144 回実行されず、262,144 スレッドがスケジュールされて 1 回だけ実行されます。

于 2013-10-15T14:31:07.460 に答える
1

リダクション カーネルを使用して最小値を見つけます。

于 2013-10-14T17:06:11.647 に答える