アプリケーションでのプロファイリングのイネーブル で説明するように、ランタイムの実行中にアプリケーション イベントとカーネル イベントのプロファイリングを有効にするための --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.aie_trace_offload:<arg>
ADF (Adaptive Data Flow) アプリケーションで AI エンジン ストリームのプロファイリングを有効にします。この場合、<arg>
は HSDP または高速デバッグ ポートです。
v++ --link --profile.aie_trace_offload:HSDP
HSDP の使用方法は、 『AI エンジン ツールおよびフロー ユーザー ガイド』 (UG1076) の「高速デバッグ ポートによるイベント トレース オフロード」を参照してください。
--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.exec
は data
または 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 は、Alveo アクセラレータ カードでの演算ユニットの SLR への割り当て に説明するように、--connectivity.slr
コマンドを使用して SLR に割り当てます。
<SLR>
構文を指定する場合は、デザイン内のすべての trace_memory
コマンドにその構文を使用する必要があります。