ストリーム ストールの解析 - 2023.2 日本語

AI エンジン ツールおよびフロー ユーザー ガイド (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 日本語

Performance Metrics ビューでは、ストリーム ストールを解析する必要があるかどうかを判断し、ストールの原因となっているタイル/タイルを特定できます。

Vitis IDE の Performance Metrics ビューから開始して、ストリーム ストールを解析するには、次の手順に従います。

  1. Performance Metrics ビューで Stream Stall Time (%) を選択し、すべてのタイルにおけるストリーム ストールを表示します。解析するタイルを特定します。Performance Metrics ビューのオブジェクトは、Trace ビュー、Graph ビュー、および Array ビューにクロスプローブできます。たとえば、 Performance Metrics ビューでタイルを選択すると、Trace ビューでタイルがハイライトされ、すばやく見つけることができます。

  2. Trace ビューを選択します。

  3. Stream Stalls ビューを選択します。Stalls ビューでは、ストリーム ストールに関する次の情報が表示され、青で表示されているオブジェクトをクリックするとほかのビューにクロスプローブできます。
    NAME
    ストリーム ストールには、SS_<NUM> という名前が付けられます。発生した順番に番号が付けられます。番号は、ストールのすべてのタイプの間で固有です。
    Stalled Tile
    ストールしたカーネルが存在する AI エンジン タイル。
    Stalled Kernel
    ストールしたカーネル。<Kernel_function_name>.<Schedule_ID>.<Graph_instance_name> という名前です。 _main と表示されることもあり、その場合はクロスプローブして実際のカーネル関数を見つける必要があります。
    Start (ps)
    ストールの開始時間。
    Duration (ps)
    ストール時間の長さ。
    [PC]
    ストールが発生したときのプログラム カウンター。
    Stalled Port
    ストールしたカーネルのポート。
    Related Stalls
    ストールを発生させる可能性のあるほかのストール。
    Full Destination
    フルであるためにストールしたカーネルで書き込むことができなかったポート。
    Empty Source
    空であるためにストールしたカーネルで読み出すことができなかったポート。
  4. Stalls ビューでストリーム ストールをクリックすると、そのストールの開始に移動します。必要に応じてストールを右クリックし、Filter Trace をクリックします。トレースをフィルターすると、Trace ビューにストールに関連する信号が表示されます。関連しない信号は非表示になります。デザインが大きい場合は、フィルター トレースを使用してトレースを調べるとわかりやすくなります。
  5. Stalls ビューで青で表示されるオブジェクトは、クリックしてクロスプローブできます。たとえば、Stalls ビューでカーネルをクリックすると、そのカーネルが Trace ビューでハイライトされます。
  6. Trace ビューを拡大/縮小して、ストールを調べます。ストールの位置から、類似のストールが発生する頻度、ストール前のイベント、関連するストール (ある場合) から、その発生理由を示すヒントが得られます。
  7. フィルターされたトレースをクリアするには、右クリックして Clear All Filters をクリックします。
  8. Graph ビューでストール パスの全体図を表示すると有益です。Graph ビューを選択し、ドロップダウン リストから Tile View をクリックします。

  9. Stalls ビューを選択し、ドロップダウン リストから Stream Stalls をクリックします。
  10. Stalls ビューでストリーム ストールを確認します。[Stalls] ビューでストリーム ストールをクリックすると、そのストールの全体図がグラフに表示されます。ストールが発生しているパスは赤で示されます。ストールしたカーネルから完全なデスティネーション ポート、または空のソース ポートからストールしたカーネルです。
    ヒント: ストリームが複数のデスティネーションにマルチキャストされ、ストリームにすべてのデスティネーションに対する十分な FIFO がない場合、ハイライトされているストールしたカーネルとストールしたネットが接続されていないことがあります (別々に赤で表示)。つまり、ストリーム ストールの解析では、マルチキャスト ストリーム全体のすべてのデスティネーション調べる必要があります。次の図に、Graph ビューのマルチキャスト ストリーム ストールの例を示します。


  11. Graph ビューまたは Array ビューから、のソース コードまたはカーネルのソース コードを開くことができます。Stalls ビューでカーネル オブジェクトをクリックするか、Graph ビューでカーネルをクリックして、カーネル インスタンスを選択します。

  12. Graph ビューでカーネル インスタンスを右クリックし、Goto Graph Source または Goto Kernel Source をクリックします。グラフのソース コードまたはカーネルのソース コードが開きます。
  13. グラフのソース コードとカーネルのソース コードを、解析しているストールに関連付け、必要に応じてソース コードを編集します。

次の表に、ストリーム ストールが発生する状況と可能なソリューションを示します。

表 1. ストリーム ストールが発生する状況とソリューション
ソース デスティネーション ストール タイプ 可能なソリューション 注記
ストリーム ストリーム ストリーム ストール
  • FIFO の深さを増加します。FIFO の深さ制約 を参照してください。
  • ソースまたはデスティネーション カーネルで、ストリームの読み出しおよび書き込み命令を調整します。
ストリーム 複数のストリーム ストリーム ストール
  • FIFO の深さを増加します。FIFO の深さ制約 を参照してください。
  • DMA FIFO を挿入するか、異なるデスティネーション ネットに異なる FIFO の深さを設定します。FIFO の深さ制約 を参照してください。
マルチキャスト
ストリーム 同じ AI エンジンにある複数のカーネルの複数のストリーム ストリーム ストール
  • 複数のカーネルを異なる AI エンジンに配置します。
  • カーネルへのストリームに十分な FIFO を追加します。
マルチキャスト
複数のストリーム 複数のストリーム ストリーム ストール
  • 異なるストリーム間が一致するよう命令を調整します。
  • FIFO の深さを増加します (ssFIFO または DMA FIFO)。
 
PLIO ストリーム ストリーム ストール
  • AI エンジンと PL 間のインターフェイスの帯域幅を最大にします。たとえば、64 ビット インターフェイスでは、PL の最大周波数 (AI エンジン周波数の 1/2) を使用します。128 ビット インターフェイスでは、1 つのインターフェイスに 2 つの 64 ビットチャネルがあることに注意してください。 『AI エンジン カーネルおよびグラフ プログラミング ガイド』 (UG1079)AI エンジンと PL のインターフェイスのパフォーマンスを参照してください。
ストリーム PLIO ストリーム ストール 同上。
ストリーム (反復につき 32 ビット) PLIO ストリーム ストール 32 ビットごとに TLAST を送信します。 『AI エンジン カーネルおよびグラフ プログラミング ガイド』 (UG1079)AI エンジンと PL のインターフェイスのパフォーマンスを参照してください。