2011-12-06 20 views
2

GPUが同じカーネルを何回も実行するかどうか不思議でした。OpenCL実行モデル複数のキューに入れられたカーネル

私は数百回(おそらく数千回)連続してキューに入れられているカーネルを持っています。そして、AMD App Profilerを使用して、カーネルのクラスタを非常に速く実行することに気づきました。 "ハング"(つまり、実行するには時間がかかります)。私はそれが64番目のカーネルだと思います。

これは、カーネルを通じて毎回同じローカルおよびグローバルサイズで全く同じ操作を実行するため、これは奇妙です。私は同じバッファを再使用しています。

私が逃している実行モデル(おそらく他のプログラム/ GPUにアクセスするOSやGPUメモリのタイミング周波数)については何かありますか?私はこれを、Windows 7(64ビット)のATI HD5650カードと、イン・オーダーのキュー実行を伴うAMD App SDK 2.5でテストしています。

カーネルにグローバルメモリアクセスがない(あまり実用的ではない)場合、プロファイラは速い実行カーネルとそれ以前の遅い実行カーネルとの間にギャップを置きます今では私のカーネルのどれも実行されていない大きな空のギャップです。

フォローアップの質問として、これを修正するためにできることはありますか?

答えて

2

GPUの同時タスクの最大数の影響を確認している可能性があります。エンキューされた各タスクは、同じ呼び出しでエンキューされた同じカーネルの、一度に何百もの作業項目を頻繁に実行できる1つ以上のマルチプロセッサに割り当てられます。おそらくあなたが見ているのは、マルチプロセッサの1つが解放されるのを待っているOpenCLランタイムです。これは、占有問題に最も直接的に関係します。つまり、ワークサイズがマルチプロセッサをビジー状態に保つことができない場合、メモリレイテンシとすべてのアイドルサイクルがあります。ここでの制限は、カーネルが必要とするレジスタの数(ローカルまたはプライベートメモリ)に依存します。まとめると、複数のデータを扱うためには、カーネルを何度もキューに入れるよりも、カーネルを書きたいと思っています。

明らかに高速実行の結果を読み取ることが測定に含まれていましたか?

関連する問題