3

最近、OpenCL アプリケーションを NVIDIA GPU から Ubuntu 12.04 で実行されている Radeon HD 6320 Fusion に移動しましたが、予想外に動作が大幅に遅くなりました。

私のプログラムは、セットアップ時に非常に大きなデータ構造を GPU にコピーします (このデータ構造は、CPU によって再度読み取られたりアクセスされたりすることはありません)。

  1. いくつかのカーネルと読み取りバッファーをキューに入れます (非常に小さなデータ構造をメイン メモリにコピーして戻すため)。
  2. clFinish を呼び出して、カーネルと読み取りバッファーが完了するのを待ちます。
  3. これは継続的に繰り返され、読み取りバッファーによって返される情報に応じて、余分なデータがコピーされることがあります (これは、カーネルの次のラウンドがキューに追加される前に、読み取りバッファーが完了する必要があることを意味します)。

両方の GPU をプロファイリングした後、ATI GPU の遅延は、最初のカーネルがキューに追加される (CL_PROFILING_COMMAND_QUEUED) から最初のカーネルが実行を開始する (CL_PROFILING_COMMAND_START) までのすべてのようです。NVIDIA GPU では、反復ごとに数マイクロ秒かかります。ATI GPU では、これには反復ごとに約 20 ミリ秒かかりますが、これは私の使用には長すぎます。

この大幅な遅延が発生する理由はありますか?

4

2 に答える 2

0

スケジューラが時間を解放できるように、完了する必要がある可能性のある他の GPU プログラムを実行していますか?

これに関する問題は、OpenCL 仕様が可能な待機時間を定義していないことです。カーネルをキューに入れてから実行するまでのタイミングに関する要件はありませんが、ある時点で実行する必要があります。私はおそらく ATI OpenCL ボードに投稿したいと思います。そこの開発者はこの問題について十分に理解しており、おそらくあなたに答えてくれるでしょう。

于 2012-12-13T22:57:28.253 に答える