--profile オプション - 2022.1 日本語

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

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

アプリケーションでのプロファイリングのイネーブル で説明するように、ランタイムの実行中にアプリケーション イベントとカーネル イベントのプロファイリングを有効にするための --profile オプションがいくつかあります。このオプションを使用すると、カーネルとホスト間のデータ トラフィック、カーネルの停止、カーネルと計算ユニット (CU) の実行時間などのトランザクションの詳細を取り込んだり、Versal AI エンジン の動作を監視したりできます。

重要: v++--profile オプションを使用するには、xrt.ini ファイルでプロファイル オプションまたはトレース オプションの 1 つを追加する必要もあります。詳細は、xrt.ini ファイル を参照してください。
--profile コマンドは、コンフィギュレーション ファイルの [profile] セクション ヘッドの下で次のフォーマットを使用して指定できます。
[profile]
data=all:all:all           # Monitor data on all kernels and CUs
data=k1:all:all            # Monitor data on all instances of kernel k1
data=k1:cu2:port3          # Specific CU master
data=k1:cu2:port3:counters # Specific CU master (counters only, no trace)
memory=all                 # Monitor transfers for all memories
memory=<sptag>             # Monitor transfers for the specified memory
stall=all:all              # Monitor stalls for all CUs of all kernels
stall=k1:cu2               # Stalls only for cu2
exec=all:all               # Monitor execution times for all CUs
exec=k1:cu2                # Execution tims only for cu2
aie=all                    # Monitor all AIE streams
aie=DataIn1                # Monitor the specific input stream in the SDF graph
aie=M02_AXIS               # Monitor specific stream interface

このコマンドには、次に示すさまざまなオプションを指定できます。

--profile.aie:<arg>

ADF (Adaptive Data Flow) アプリケーションで AI エンジン ストリームのプロファイリングを有効にします。この場合、<arg> は次のとおりです。

<ADF_graph_argument|pin name|all>
  • <ADF_graph_argument>: ADF グラフ アプリケーションから引数名を指定します。
  • <pin_name>: AI エンジン カーネル上のポートを示します。
  • <all>: ADF アプリケーション内のすべてのストリーム接続を監視します。
たとえば、DataIn1 入力ストリームを監視するには、次のコマンドを使用します。
v++ --link --profile.aie:DataIn1

--profile.data:<arg>

デザインに追加されたモニター IP を介したデータ ポートの監視をイネーブルにします。このオプションは、リンク時には指定する必要があります。

<arg> は次のようになります。

[<kernel_name>|all]:[<cu_name>|all]:[<interface_name>|all](:[counters|all])
  • [<kernel_name>|all]: コマンドを適用する特定のカーネルを定義します。all キーワードを使用して、1 つのオプションで既存のカーネル、計算ユニット、インターフェイスすべてを監視できるよう設定することもできます。
  • [<cu_name>|all]: <kernel_name> が指定されている場合は、コマンドを適用する特定の CU を定義したり、カーネルのすべての CU に適用する必要があることを指定したりできます。
  • [<interface_name>|all]: カーネルまたは CU の特定のインターフェイスを定義して、データ アクティビティを監視するか、すべてのインターフェイスを監視します。
  • [<counters|all]: オプションの引数で、指定しない場合はデフォルトで all になります。大型デザインの場合は情報の収集を counters に制限できますが、all を指定して実際のトレース情報が収集されるようにすることもできます。

たとえば、k1 カーネルのすべての CU およびインターフェイスにデータ プロファイルを割り当てるには、次のコマンドを使用します。

v++ --link --profile.data:k1:all:all

--profile.exec:<arg>

カーネルの実行時間を記録し、システム実行中に最小限のポート データ コレクションを示します。このオプションは、リンク時には指定する必要があります。

ヒント: カーネルの実行時間は、--profile.data または --profile.stall が指定さるとデフォルトで収集されます。--profile.execdata または stall が適用されていない CU すべてに指定できます。

exec プロファイルの構文は、次のとおりです。

[<kernel_name>|all]:[<cu_name>|all](:[counters|all])

たとえば、k1 カーネルの cu2 の実行をプロファイルするには、次のコマンドを使用します。

v++ --link --profile.exec:k1:cu2

--profile.stall:<arg>

重要: このオプションは、v++ コンパイルおよびリンクの両方で指定する必要があります。

デバイス バイナリ (.xclbin) に停止監視ロジックを追加します。これには、カーネル インターフェイスに停止ポートを追加する必要があります。これには、コンパイルおよびリンクの両方で stall オプションを指定する必要があります。

stall プロファイルの構文は、次のとおりです。

[<kernel_name>|all]:[<cu_name>|all](:[counters|all])

たとえば、k1 カーネルの cu2 の停止を監視するには、次のコマンドを使用します。

v++ --compile -k k1 --profile.stall ...
v++ --link --profile.stall:k1:cu2 ...

--profile.trace_memory:<arg>

ヒント: このオプションは、ハードウェア ビルド ターゲット (-t=hw) にのみ適用します。ソフトウェアまたはハードウェア エミュレーション フローには使用しないでください。

ハードウェア ターゲット (-t=hw) をビルド際に、トレース データを取り込むのに使用するメモリのタイプおよび量を指定できます。この引数は、次のように設定できます。

<FIFO>:<size>|<MEMORY>[<n>][:<SLR>]

この引数は、トレース データの収集に使用するメモリのタイプを指定します。xrt.ini ファイル で説明するように、--profile.trace_memory コマンドを使用して使用するタイプまたはメモリを定義し、xrt.ini ファイルで trace_buffer_size オプションを使用して、使用するメモリの容量を定義します。使用されるデフォルトのメモリ タイプは、プラットフォームで定義された最初のメモリで、デフォルトのバッファー サイズは 1 MB です。

xrt.ini ファイルtrace_memory が指定されていなくても、device_trace がイネーブルになっている場合、プロファイル データはデフォルトのプラットフォーム メモリにキャプチャされ、トレース バッファーに 1 MB が割り当てられます。

FIFO:<size>
KB 単位で指定します。最大値は 128K ですが、推奨される値は 64K です。
メモリ
プラットフォームのメモリ リソースのタイプおよび数を指定します。ターゲット プラットフォームのメモリ リソースは、platforminfo コマンドで指定できます。サポートされるメモリ タイプは、HBM、DDR、PLRAM、HP、ACP、MIG、および MC_NOC など。DDR[1] のように範囲で指定します。
[:<SLR>]
オプションで、指定された <SLR> に割り当てられた CU が、<MEMORY> フィールドで指定された DDR または HBM リソースを使用するように指定できます。この構文は、DDR または HBM メモリ バンクにのみ使用できます。

--profile.trace_memory コマンドでは、FIFO:8k のように、メモリ サイズと単位だけ指定したり、DDR[0]HBM[3] のようにメモリ バンクを指定したりできます。この場合、すべての CU のプロファイル データが指定されたメモリにキャプチャされます。

または、プロファイル データのキャプチャに使用するメモリと、そのメモリの SLR 割り当てを指定できます。この場合、SLR 割り当ては、指定された SLR に割り当てられたどの CU にも、指定されたメモリにキャプチャされたプロファイル データが含まれることを示します。これは、次のコンフィギュレーション ファイルの例に示します。

[profile]
trace_memory=DDR[1]:SLR0
trace_memory=DDR[2]:SLR1

上記の例では、SLR0 に割り当てられた CU のプロファイル データが DDR バンク 1 にキャプチャされ、SLR1 に割り当てられた CU が DDR バンク 2 にキャプチャされます。CU は、計算ユニットの SLR への割り当て に説明するように、--connectivity.slr コマンドを使用して SLR に割り当てます。

重要: DDR バンクと HBM メモリ バンクを 1 つのデザインに混在させることはできません。また、<SLR> 構文を指定する場合は、デザイン内のすべての trace_memory コマンドにその構文を使用する必要があります。