11

特定のカーネルについて、work_groupsが常に同じサイズであるのはなぜですか?私はどこかで(ローカル作業サイズを指定しない場合)、openCLが651個の作業項目(3で割り切れる)を持つカーネル用に3つの作業グループ(それぞれ217個の作業項目)を作成し、653個の作業を作成することを読みました-653は素数であるため、各1つの作業項目のグループ。

local_work_size(つまり、ワークグループ内のワークアイテムの数)を指定するとします。たとえば、5。そして、合計作業項目(global_work_size)を9としています。作業グループはどのように作成されますか?これが、global_work_sizeがlocal_work_sizeの倍数でなければならない理由ですか?データに必要な作業項目が9つだけの場合、データを10(local_work_size、5の倍数)に増やすにはどうすればよいですか?

カーネルを実行するワークグループの数がわからない場合、ホストが結果配列にメモリを割り当てることができないのはなぜですか?

助けてください。私はこれについてこれをすべて読んだ: http ://www.openclblog.com/2011/09/work-group-sizes.html

4

1 に答える 1

9

OpenCLワークグループのサイズは、常に同じサイズである必要はありません。グローバルワークグループのサイズは、問題のサイズに関連していることがよくあります。ローカルワークグループのサイズは、コンピューティングユニットのスループットの最大化とローカルメモリを共有する必要のあるスレッドの数に基づいて選択されます。

いくつかの例を考えてみましょう。

A)画像をNxMからXxYに拡大縮小します。

B)N個の数値を合計します。

のために)

明らかなグローバルワークグループのサイズはX、Y、1です。なぜですか?これにより、出力ピクセルごとに1つのスレッドが得られます。ローカルワークグループのサイズは、出力ピクセルを生成するために処理する必要のある入力ピクセルの数に基づいて選択する必要があります。

例えば。

A.1)画像を4K x3.2Kから64x64にスケーリングします。GWGサイズ[64,64,1]LWGサイズ256A.2)画像を4kx3.2kから800x600にスケーリングします。GWGサイズ[800 、60,1]LWGサイズ256

B)の場合

明らかなグローバルワークグループのサイズはN/2,1,1です。なぜですか?したがって、各スレッドは2つの値を合計することから始まります。ローカルワークグループは、デバイスの最大数に設定する必要があります。

いくつかの注意点があります。

1)グローバルワークグループのサイズは、グローバルメモリサイズと最大グローバルメモリ割り当てサイズによって制約されます。

2)各デバイスのローカルワークグループの最大サイズは、多くの場合256です。

于 2012-07-14T16:30:38.497 に答える