0

いくつかの説明が必要なクエリがいくつかあります..非常に基本的なように思われる場合は申し訳ありません。

  1. clEnqueueNDRangeKernel を使用してカーネルを開始すると、ホスト コードに実際に何が起こるか、カーネルが完了するのを待つか、..?

  2. 複数のカーネルがあるとします。この場合はどうなりますか? カーネルの 1 つが完了した場合、ホストは他のカーネルがまだ計算を行っている間にそのカーネルから結果を取得できますか?

  3. clCreateBuffer の OpenCL 仕様を読んでいました (ここにリンク)。フラグ CL_MEM_USE_HOST_PTR の説明を確認してください。便宜上、ここに投稿しました: 「これは、メモリ オブジェクトのストレージ ビットとして、host_ptr によって参照されるメモリを OpenCL 実装でアプリケーションが使用することを望んでいることを示しています。」

「アプリケーション」と「opencl実装」が正確に何を意味するのかわかりません。さらに、「OpenCL 実装はバッファの内容をキャッシュすることが許可されている」とも書かれています。

4

1 に答える 1

1
  1. カーネル モジュールはキューに入れられ、非同期で実行されます。clEnqueueNDRangeKernel はすぐに戻り、ホスト プログラムは実行を続けます。この呼び出しを同期させるには、最後のオプション パラメータからのイベントを待機するか、clFinish を呼び出してキューに入れられたすべてのコマンドを待機します。

  2. 複数のカーネルは、同じコマンド キューに属している場合、キューに入れられたのと同じ順序で順次実行されます。

  3. アプリケーションとは、ホスト上で実行されるコードを意味します。OpenCL 実装は、OpenCL インターフェイスを実装するライブラリです。AMD、NVidia など、いくつかの OpenCL 実装があります。

OpenCL プログラムには、CPU で実行されるホスト コード、OpenCL ライブラリ (実装)、および GPU で実行されるカーネル モジュールの 3 つのコンポーネントが含まれます。

于 2012-07-12T07:25:30.230 に答える