最近、OpenCL アプリケーションを NVIDIA GPU から Ubuntu 12.04 で実行されている Radeon HD 6320 Fusion に移動しましたが、予想外に動作が大幅に遅くなりました。
私のプログラムは、セットアップ時に非常に大きなデータ構造を GPU にコピーします (このデータ構造は、CPU によって再度読み取られたりアクセスされたりすることはありません)。
- いくつかのカーネルと読み取りバッファーをキューに入れます (非常に小さなデータ構造をメイン メモリにコピーして戻すため)。
- clFinish を呼び出して、カーネルと読み取りバッファーが完了するのを待ちます。
- これは継続的に繰り返され、読み取りバッファーによって返される情報に応じて、余分なデータがコピーされることがあります (これは、カーネルの次のラウンドがキューに追加される前に、読み取りバッファーが完了する必要があることを意味します)。
両方の GPU をプロファイリングした後、ATI GPU の遅延は、最初のカーネルがキューに追加される (CL_PROFILING_COMMAND_QUEUED) から最初のカーネルが実行を開始する (CL_PROFILING_COMMAND_START) までのすべてのようです。NVIDIA GPU では、反復ごとに数マイクロ秒かかります。ATI GPU では、これには反復ごとに約 20 ミリ秒かかりますが、これは私の使用には長すぎます。
この大幅な遅延が発生する理由はありますか?