AI エンジン グラフのための Python API - 2023.2 日本語

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

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

次は、AI エンジン 固有の API のリストと、トラフィック ジェネレーターを統合する際の使用方法です。Python API を使用すると、PL カーネルに渡すデータを生成したり、AI エンジン グラフからデータを収集するトラフィック ジェネレーター コードを作成できます。データを送信および受信するオブジェクトをインスタンシエートするには、次の API を使用します。send_data または receive_data には、任意のデータ型ベクター/リストを指定できます。

データを送信または受信するクラスのインスタンシエート
aie_input_plio( name, datatype)
aie_output_plio(name, datatype)

パラメーター:

  • name: グラフの PLIO 名と一致する文字列。
  • datatype: サポートされる値、[ "int8", "uint8","int16", "uint16","int32", "uint32","int64", "uint64","float", "bfloat16"] を使用した文字列
表 1. サポートされる AI エンジンのデータ型
#num AIE カーネルのデータ型 API 列挙型文字列 使用法 ユーザー値リストの表記 (Python)
1 int8 int8 input_port = aie_input_plio('input_port_name',"int8") data = [12 23 2 -2 23]
2 int16 int16 input_port = aie_input_plio('input_port_name',"int16") data = [1212 121 232 -2323]
3 int32 int32 input_port = aie_input_plio('input_port_name',"int32") data = [ 121 23234 2323232 23 -878787]
4 int64 int64 input_port = aie_input_plio('input_port_name',"int64") data = [232 2342232 -23482947 238273]
5 uint8 uint8 input_port = aie_input_plio('input_port_name',"uint8") data = [23 23 12]
6 uint16 uint16 input_port = aie_input_plio('input_port_name',"uint16") data = [236 23728 2378 8237]
7 uint32 uint32 input_port = aie_input_plio('input_port_name',"uint32") data = [267 2376 2362736 232767362]
8 uint64 uint64 input_port = aie_input_plio('input_port_name',"uint64") data = [347 2348 327 98932 872389]
9 float float input_port = aie_input_plio('input_port_name',"float") data = [3.14 2.3234 3472.23]
10 bfloat16 bfloat16 input_port = aie_input_plio('input_port_name',"bfloat16") data = [3.14 2.3234 3472.23]

注記: 浮動小数点での Float と Bfloat16 の表記法は類似しています。ただし、AIE に転送する場合、float は 32 ビットで転送され、bfloat16 は 16 ビットで転送される点が異なります。

11 cfloat float input_port = aie_input_plio('input_port_name', "float")

data = [3.14 2.2323 23.3 23.33]

注記: 左から、偶数位置が実数位置、奇数位置が虚数位置となります。

12 cint16 int16 input_port = aie_input_plio('input_port_name',"int16")

data = [32 232 232 234]

注記: 左から、偶数位置が実数位置、奇数位置が虚数位置となります。

13 cint32 int32 input_port = aie_input_plio('input_port_name',"int32")

data = [23 -23 23 -232]

注記: 左から、偶数位置が実数位置、奇数位置が虚数位置となります。

注記: cint32 のように、データ型によっては、実数値と虚数値のペアを同じリストで提供するために、int32 を使用できます。つまり、複合型のユーザー リストのサイズは常に偶数になります。

たとえば、外部ポートを作成する前に、AI エンジン デザインでのトラフィック ジェネレーターの使用 の説明に従って AI エンジン グラフを変更しておく必要があります。グラフの変更が終了したら、Python スクリプトで AI エンジン のセンダーおよびレシーバー オブジェクトを作成できます。

input = aie_input_plio("in_data", 'int16')
output = aie_output_plio("out_data", 'int16')

この場合、in_dataout_data はグラフ コードで PLIO のマッチを定義します。inputoutput は作成されたオブジェクトです。

2 つ目のパラメーター int16 は、トラフィック ジェネレーターとインターフェイスされた AI エンジン カーネルのデータ型です。

send_data()
send_data(data, tlast)
creates a non-blocking call to send data

パラメーター:

  • data: 指定されたデータ型のリスト
  • tlast: ブール値 (true (1) または false (0))
注記: datatype は、オブジェクトのインスタンシエーション時に指定する必要があります。
次は、トラフィック ジェネレーター オブジェクトを作成し、それを使ってデータを送信する例です。
input = aie_input_plio("in_data", "uint32")
input.send_data(<data_list>, "false")

この API 呼び出しは、トラフィック ジェネレーターに接続された "in_data " PLIO を介して、AI エンジン カーネルにデータを送信します。

receive_data()
receive_data()
creates a blocking call to receive data
指定されたデータ型のリストを返します。
注記: データ型は、オブジェクトのインスタンシエーション時に指定する必要があります。
次に例を示します。
recv_data = output.receive_data()

recv_data は、receive_data() の返り値を含むリストです。

receive_data_with_size()
receive_data_with_size(data_size)
creates a blocking call to receive a specified amount of data

パラメーター:

  • data_size: 受信するデータ量をバイト単位で示した整数値
指定されたデータ型のリストを返します。
注記: データのサイズはバイト単位でのみ指定します。
次に例を示します。
recv_data = output.receive_data_with_size(1024)

指定されたバイト数のデータを受信するまでブロックするブロッキング API です。

receive_data_on_tlast()
receive_data_on_tlast()
creates a blocking call returning data after receiving tlast packet

指定されたデータ型のリストを返します。

注記: datatype は、オブジェクトのインスタンシエーション時に指定する必要があります。
次に例を示します。
recv_data = output.receive_data_on_tlast()

recv_data には、receive_data_on_tlast() から返されたデータが含まれます。TLAST 信号を受信するまで待機するブロッキング API です。