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

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

8.11.3. Linuxにおけるレガシー・エミュレーターでのOpenCLカーネルのデバッグ

Linuxシステムでは、 インテル® FPGA SDK for OpenCL™ レガシー・エミュレーターに、OpenCLカーネルをデバッガーで実行し、ホスト・アプリケーションの一部としてデバッグするよう指示することができます。 デバッグのフィーチャーは、シームレスなホストとカーネルのデバッグを可能にします。コードのステップ実行、ブレークポイントの設定、変数の検証および設定を行うことが可能です。
注: カーネルのデバッグはホストのデバッグから独立しています。WindowsではMicrosoft Visual Studio Debugger、LinuxではGDBなど、既存のツールでホストコードをデバッグしてください。

レガシー・エミュレーションでのデバッグに向けてOpenCLカーネルをコンパイルするには以下を行います。

  1. レガシー・エミュレーターでのエミュレーションに向けたカーネルのコンパイル (-march=emulator) の説明に従い、カーネルをコンパイルしてください。
  2. ホスト・アプリケーションを構築し、Khronos ICD Loader Libraryに接続します。詳細は、ホスト・アプリケーションとKhronos ICD Loader Libraryのリンク を参照ください。
  3. <your_kernel_filename>.aocxファイルが、ホストが特定できる位置にあることを確認します。現在の作業ディレクトリーが推奨されます。
  4. env CL_CONTEXT_EMULATOR_DEVICE_INTELFPGA=<number_of_devices> gdb --args <your_host_program_name> [<host_program_arguments>]コマンドを呼び出し、アプリケーションを実行します。ここで <number_of_devices> は、エミュレーターが提供する必要のある同一のエミュレーション・デバイス数です。
  5. ホストまたはカーネルプログラムを変更した後にテストを行う場合は、変更したホストまたはカーネルプログラムのみを再コンパイルし、デバッガーを再度実行してください。
デバッガーでカーネルを実行するには以下を行います。
  1. プログラムの実行中、デバッガーはホストコードからカーネルコードにステップすることはできません。次の行を追加し、実際にカーネルが呼び出される前にブレークポイントを設定する必要があります。
    1. break <your_kernel>

      この行はカーネルの前にブレークポイントを設定します。

    2. continue

      ホストのデバッグをまだ開始していない場合は、代わりにstartを入力します。

  2. カーネルは、ホストがカーネルをロードする直前に共有ライブラリーとしてロードされます。ホストが実際にカーネル関数をロードするまで、デバッガーはカーネル名を認識しません。そのためデバッガーは、最初のカーネルの実行の前に設定したブレークポイントに対する次の警告を生成します。

    Function "<your_kernel>" not defined.

    Make breakpoint pending on future shared library load? (y or [n])

    yを返答します。最初のプログラムの実行後にデバッガーは、セッション中の関数名と変数名、および行番号の参照を認識します。

注意:
レガシー・エミュレーターは、OpenCLランタイムにいくつかのエラーの詳細を報告します。エミュレーションでは、clCreateContext関数でコンテキストを初期化する際に、ランタイムはデフォルトのプリント・アウト・コールバックを使用します。