AXI 違反のためカーネルがハングする - 2019.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese
カーネルとメモリ コントローラー間の AXI トランザクションが無効であるため、カーネルがハングする可能性があります。これらの問題をデバッグするには、カーネルをインストルメント化する必要があります。
  1. Vitis コア開発キットには、v++ リンク (-l) 時に適用可能なインストルメンテーション オプションが 2 つあります。これらのオプションは両方ともインプリメンテーションにハードウェアが追加されるので、リソース使用率に基づいてインストルメンテーションを制限する必要があることがあります。
    1. 軽量 AXI プロトコル チェッカー (lapc) を追加します。これらのプロトコル チェッカーは、-–dk オプションを使用して追加します。次の構文を使用します。
      --dk [protocol|list_ports]:<compute_unit_name>:<interface_name>
      通常、<interface_name> の使用はオプションです。指定しない場合、すべてのポートが解析されます。プロトコル チェッカーが挿入されるように定義するには、protocol オプションを使用します。このオプションでは、<compute_unit_name> および <interface_name> のいずれかまたは両方に、キーワード all を使用できます。list_ports オプションは、現在のデザインの有効な計算ユニットとポート組み合わせのリストを生成します。
      注記: コマンド ライン 1 行に複数の --dk オプションを含めて、インターフェイス モニター機能を追加できます。
    2. パフォーマンス モニター (am, aim, asm) を追加すると、詳細な通信統計 (カウンター) のリストがイネーブルになります。これはパフォーマンス解析に最も役立ち、未処理のポート アクティビティのデバッグにおいて有益な情報を得ることができます。パフォーマンス モニターを追加するには、profile_kernel オプションを使用します。profile_kernel オプションの基本的な構文は、次のとおりです。
      --profile_kernel data:<krnl_name>|all:<cu_name>|all:<intrfc_name>|all:<counters>|all
      パフォーマンス モニターを追加する正確なインターフェイスを指定するには、3 つのフィールドが必要ですが、リソース使用量が問題ではない場合は、all キーワードを使用すると、1 つのオプションで既存のカーネル、計算ユニット、インターフェイスすべてを監視できるよう設定できます。または、kernel_namecu_name、および interface_name を明示的に指定してインストルメンテーションを制限します。
      最後のオプション <counters>|all は、大型デザインで情報の収集を counters に制限するか、all (デフォルト) を指定して実際のトレース情報が収集されるようにします。
      注記: コマンド ライン 1 行に複数の --profile_kernel オプションを含めて、パフォーマンス機能を追加できます。
      --profile_kernel data:kernel1:cu1:m_axi_gmem0 
      --profile_kernel data:kernel1:cu1:m_axi_gmem1 
      --profile_kernel data:kernel2:cu2:m_axi_gmem
  2. アプリケーションをビルドし直したら、追加した AIM IP および LAPC IP を含め、xclbin を使用してホスト アプリケーションを実行し直します。
  3. アプリケーションがハングしたら、xbutil status を使用してエラーや異常を確認します。
  4. 次のように AIM 出力を確認します。
    • xbutil status --aim を数回実行して、動いているカウンターがあるかを確認します。カウンターが動いている場合、カーネルはアクティブです。
      ヒント: AIM 出力のテストは、GDB デバッグでも xstatus spm コマンドを使用してサポートされます。
    • カウンターが止まっている場合、未処理のカウントが 0 より大きいということは、AXI トランザクションにハングしているものがある可能性があります。
  5. 次のように LAPC 出力を確認します。
    • xbutil status --lapc を実行して、AXI 違反がないかどうかを確認します。
      ヒント: LAPC 出力のテストは、GDB デバッグでも xstatus lapc コマンドを使用してサポートされます。
    • AXI 違反がある場合は、カーネル インプリメンテーションに問題があることを意味します。