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

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

8.5. LinuxにおけるOpenCLカーネルのデバッグ

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

デバッグに向けてOpenCLカーネルをコンパイルするには、次のステップを実行します。

  1. 特定のアクセラレーター・ボードをターゲットとするデバッグの.aocxファイルを生成するため、 aoc -march=emulator -fast-emulator -g <your_kernel_filename>.clコマンドを呼び出します。
  2. ホスト・アプリケーションを構築し、ホスト・アプリケーションをKhronos ICD Loader Libraryにリンクします。詳細は、ホスト・アプリケーションとKhronos ICD Loader Libraryのリンク を確認ください。
  3. <your_kernel_filename>.aocxファイルが、ホストが容易に検索できる位置にあることを確認してください。現在の作業ディレクトリーが推奨されます。
  4. アプリケーションの実行には、 env CL_CONFIG_CPU_EMULATE_DEVICES=<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関数でコンテキストを初期化する際に、ランタイムはデフォルトのプリント・アウト・コールバックを使用します。