インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

6.3. カーネル実行中におけるプロファイル・データの収集

カーネルの実行がホスト・アプリケーションの完了後に終了する場合、カーネルの実行中にプロファイル・データを収集するよう、FPGAに対し明示的に要求することができます。 ほとんどのアプリケーションでは、カーネルの実行完了時にプロファイル・データを自動的にリードバックするデフォルトの動作で十分です。
コンパイル中にOpenCL™カーネルをプロファイリングすると、profile.monファイルが自動的に生成されます。その後プロファイル・データは、FPGAでカーネルの実行が完了した後にprofile.monに書き込まれます。ただし、カーネルの実行がホスト・アプリケーション終了後に完了した場合、そのカーネル呼び出しのプロファイル情報は、profile.monファイルに存在しなくなります。この場合、プロファイル情報をカーネルの実行中に取得するようホストコードを修正することができます。
重要: カーネルの実行中にプロファイル・データを収集すると、カーネルのレイテンシーが増加し、カーネルの実行にかなりのオーバーヘッドが追加される可能性があります。
カーネルの実行中にプロファイル・データを収集するようFPGAに要求するには、次のホスト・ライブラリー呼び出しを呼び出します。
extern CL_API_ENTRY cl_int CL_API_CALL

clGetProfileInfoIntelFPGA(cl_event);

上記cl_eventは、カーネルのイベントです。このホスト・ライブラリー呼び出しに渡すカーネルイベントは、clEnqueueNDRangeKernel呼び出しに渡すものと同じである必要があります。

重要:
  • clGetProfileInfoIntelFPGAの呼び出し前にカーネルの実行が完了した場合、この関数はイベント・エラー・メッセージを返します。
  • clGetProfileInfoIntelFPGAおよびclGetProfileDataDeviceIntelFPGA関数呼び出しを使用しているホストプログラムには、CL/cl_ext_intelfpga.hヘッダーファイルを含む必要があります。
注意:
カーネルの実行中にclGetProfileInfoIntelFPGA関数を呼び出すと、プロファイル・カウンターが一時的に無効になり、 インテル® FPGA Dynamic Profiler for OpenCL™ がFPGAからデータを収集できるようになります。そのためいくつかのプロファイル情報がこの中断中に失われます。この関数を非常に短い間隔で呼び出すと、プロファイル・データがカーネルの実際のパフォーマンス動作を正確に反映しない可能性があります。
次のホストコードを例に説明します。
int main()
{   ...
    clEnqueueNDRangeKernel(queue, kernel, ..., NULL);
    ...
    clEnqueueNDRangeKernel(queue, kernel, .. , NULL);
    ...
}

このホスト・アプリケーションは、カーネルが2回起動した後に完了するという前提で動作します。カーネルの呼び出しごとに1組のプロファイル・データが生成されるため、profile.monファイルには合計2組のプロファイル・データが生成されます。カーネルの実行中にプロファイル・データを収集するには、ホストコードを次のように変更します。

int main()
{
    ...
    clEnqueueNDRangeKernel(queue, kernel, ..., &event);

    //Get the profile data before the kernel completes
    clGetProfileInfoIntelFPGA(event);

    //Wait until the kernel completes
    clFinish(queue);

    ...
    clEnqueueNDRangeKernel(queue, kernel, ..., NULL);
    ...
}
 

clGetProfileInfoIntelFPGAへの呼び出しにより、profile.monファイルに新しいエントリーが追加されます。 インテル® FPGA Dynamic Profiler for OpenCL™ GUIはその後、レポートにこのエントリーを解析します。

インテル® FPGA Dynamic Profiler for OpenCL™ についての詳細は、次の章を参照ください。
  • インテル® FPGA SDK for OpenCL™ : ベスト・プラクティス・ガイドパフォーマンスのボトルネックを特定するためのカーネルのプロファイリング
  • OpenCLカーネルのプロファイリング