この段階の目標は、デザインのプロファイルを作成し、スループットを低下させ、デザインがストールする原因となっているドメイン (AI エンジン、PL、NoC) を特定することです。
次の図に、この段階で使用可能なタスクおよび手法を示します。
図 1. システムのプロファイリング
次に、この段階で使用可能な手法を説明します。
AI エンジン コア、インターフェイス、およびメモリ モジュールのプロファイリング
XRT または XSDB フローの AI エンジン コア、インターフェイス、およびメモリ モジュールをプロファイルできます。これは非侵入型の機能で、実行時に XRT.ini ファイルを使用するか、XSDB でスクリプトを実行してイネーブルにできます。この機能では、AI エンジン アレイで使用可能なパフォーマンス カウンターを使用して、プロファイル データを収集します。収集されるデータの量とタイプは、使用可能なパフォーマンス カウンターの数により制限されます。
AI エンジンのメトリクス | |
---|---|
heat_map | アクティブ、ストール、ベクター命令、累積命令の時間をプロファイルします。これらのメトリクスにより、コード効率 (ベクター命令) だけでなくメモリやストリームとの相互作用の観点からも AI エンジンの効率を理解できます。 |
stalls | メモリ、ストリーム、ロック、およびカスケードのストールをプロファイルします。これらのメトリクスにより、heat_map メトリクス セットで検出されたストールの原因をより深く解析できます。 |
execution | ベクター、ロード、ストア命令の時間をプロファイルします。これらのメトリクスにより、カーネル コードの効率を判断できます。 |
floating-point | すべての浮動小数点例外をプロファイルします。浮動小数点演算を使用している場合、これらのメトリクスによりコード内で発生する例外が示されます。 |
aie_trace | AI エンジンおよびメモリ モジュールのトレース ワード カウントおよびストール カウントをプロファイルします。イベント トレース機能を使用する際に、トレース ストリームに密集が発生しているかどうかを判断するのに有効です。 |
write_bandwidths | ストリーム書き込み、カスケード書き込み、ストール時間をプロファイルします。これは、ストリームおよびカスケード出力の効率を示します。ストールが多い場合、グラフ内の次のカーネルが十分な速度でデータを消費できず、デザインのスループットに影響を与える可能性があることを示します。 |
read_bandwidth | ストリーム読み出し、カスケード読み出し、ストール時間をプロファイルします。これは、ストリームおよびカスケード入力の効率を示します。ストールが多い場合、グラフ内の前のカーネルが十分な速度でデータを供給できず、デザインのスループットに影響を与える可能性があることを示します。 |
メモリ モジュールのメトリクス | |
---|---|
conflicts | メモリの競合やメモリ エラーをプロファイルします。メモリ競合は、2 つのメモリ チャンクが同じメモリ バンクに存在し、同じ AI エンジン (2 つの読み出しポートを使用) または 2 つの異なる AI エンジンによってアクセスされた場合に発生します。これらのメモリの位置を異なるバンクに制約することが考えられる 1 つのソリューションです。これらの競合の原因となっているバンクの詳細を取得するには、エミュレーション/AI エンジン シミュレーションからイベントを解析するか、またはハードウェアでイベント トレースを実行する必要があります。 |
dma_locks | 両方の DMA のロック アクティビティをプロファイルします。4 つの DMA チャネル (2 つの S2MM と 2 つの MM2S) は、バッファー ディスクリプター (BD) により駆動されます。Cumulative DMA Activity (累積 DMA アクティビティ) は、すべてのチャネルでロック取得イベントがストールした累積時間です。これらの DMA イベントはすべて、デバイスを介した一部の接続が予測よりも遅い理由を理解するのに役立ちます。 |
dma_stalls_s2mm | ロック取得の競合による s2mm チャネルでの DMA ストールをプロファイルします。s2mm DMA のストールは、ターゲット メモリにアクセスする際に競合が発生していることを示します。これは、ほかの s2mm または mm2s DMA が同じバンクにアクセスした場合、またはカーネルがメモリにアクセスしてロック取得が競合した場合に発生します。 |
dma_stalls_mm2s | ロック取得の競合による mm2s チャネルでの DMA ストールをプロファイルします。mm2s DMA のストールは、ソース メモリにアクセスする際に競合が発生していることを示します。これは、ほかの s2mm または mm2s DMA が同じバンクにアクセスした場合、またはカーネルがメモリにアクセスしてロック取得が競合した場合に発生します。 |
write_bandwidths | s2mm DMA で使用される帯域幅をプロファイルします。帯域幅の目標が達成できたかどうかを評価できます。 |
read_bandwidths | mm2s DMA で使用される帯域幅をプロファイルします。帯域幅の目標が達成できたかどうかを評価できます。 |
インターフェイス タイルのメトリクス | |
---|---|
input_bandwidths | ストールおよびアイドル時間に加え、入力 PLIO チャネルの帯域幅をプロファイルします。入力帯域幅が低すぎる場合、ストール レートが高いことが原因である可能性があります。つまり、AI エンジン アレイでサンプルが適切なレートで消費されていないことを意味します。AI エンジン イベント トレース (段階 4) に進みます。また、アイドル レートが高く、デザインの PL 側で適切なレートでサンプルが生成されていないことが原因である可能性もあります。PL カーネルの解析 (段階 3) に進みます。 |
output_bandwidths | ストールやアイドル タイムに加え、出力 PLIO チャネルの帯域幅をプロファイルします。出力帯域幅が低すぎる場合、アイドル レートが高いことが原因である可能性があります。つまり、AI エンジン アレイでサンプルが適切なレートで生成されていないことを意味します。AI エンジン イベント トレース (段階 4) に進みます。また、ストール レートが高いことが原因である可能性もあります。つまり、デザインの PL 側でサンプルが適切なレートで消費されていないことを意味します。PL カーネルの解析 (段階 3) に進みます。 |
packets | 入力および出力パケットの数をプロファイルします。 |
実行の間にボードを再起動して xrt.ini ファイルの異なるパラメーターを使用することにより、デザインを複数回実行できます。Vitis IDE では、異なる xrt.run.summary ファイル レポートを統合し、インターフェイス レベルでさまざまな帯域幅、ストール、アイドルの全体的なビューを表示できます。
ハードウェアでプロファイリングをイネーブルにし、結果を解釈する方法の詳細は、AI エンジンのプロファイリング を参照してください。
プロファイル結果から、デザイン パフォーマンスの低下に関連する AI エンジンの入力ストリームまたは出力ストリームをすばやく特定できます 。
次の段階:
- PL カーネルがパフォーマンス低下の原因であると判断した場合は、段階 3 に進みます。段階 3 では、パフォーマンスが最適でない PL カーネルを特定できます。
- AI エンジン カーネルがスループット低下の原因であると判断した場合は、段階 4 に進みます。