AI エンジン API の概要 - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

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

AI エンジン API は、AI エンジン アクセラレータ用の移植可能なプログラミング インターフェイスです。 『AI エンジン API ユーザー ガイド』 (UG1529) に、この API が特定のアーキテクチャでのみサポートされているかどうかを。この API は C++ ヘッダーのみのライブラリとしてインプリメントされ、データ型および演算を効率的な低レベのル組み込み関数に変換します。反復子などの高度な抽象化も提供されています。

通常、カーネル ソース コードに 2 つのヘッダー ファイルが必要です。

aie_api/aie.hpp
AI エンジンのメインのエントリ ポイント。
aie_api/aie_adf.hpp
グラフ バッファーおよびストリーム インターフェイス。

AI エンジン API には、プロファイリングをイネーブルにしたときに、シミュレーションで aie::vector および aie::mask の値を表示するヘルパー ファイルがあります。

  • aie_api/utils.hpp: aie::print および aie::print_matrix 関数を提供します。

一部の演算に対して演算子のオーバーロードをサポートするには、ヘッダー ファイル aie_api/operators.hpp を含め、名前空間 aie::operators を使用します。詳細は、Operator Overloading (演算子のオーバーロード)を参照してください。

AI エンジン カーネルの API を使用する一般的な例は次のとおりです。

#include <aie_api/aie.hpp>
#include <aie_api/aie_adf.hpp>
#include <aie_api/utils.hpp>
using namespace adf;
void vec_incr(input_buffer<int32>& data, output_buffer<int32>& out) { 

  //set all elements to 1 
  aie::vector<int32,16> vec1=aie::broadcast(1);

  auto inIter=aie::begin_vector<16>(data);
  auto outIter=aie::begin_vector<16>(out);

  for(int i=0;i<16;i++) chess_prepare_for_pipelining { 
    aie::vector<int32,16> vdata=*inIter++;

    //print vector in a line
    aie::print(vdata,true,"vdata="); 

    //print vdata as a 2x8 matrix
    aie::print_matrix(vdata,8,"vdata matrix=");

    //increment each element in vdata by 1
    aie::vector<int32,16> vresult=aie::add(vdata,vec1);

    *outIter++=vresult;
  }
}
このコードを実行すると、コンソールに次のテキストが表示されます。
vdata=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
vdata matrix=0 1 2 3 4 5 6 7 
             8 9 10 11 12 13 14 15 
vdata=16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
vdata matrix=16 17 18 19 20 21 22 23 
             24 25 26 27 28 29 30 31 
vdata=32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 
vdata matrix=32 33 34 35 36 37 38 39 
             40 41 42 43 44 45 46 47 
vdata=48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 
vdata matrix=48 49 50 51 52 53 54 55 
             56 57 58 59 60 61 62 63 
vdata=64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 
vdata matrix=64 65 66 67 68 69 70 71 
             72 73 74 75 76 77 78 79 

...

vdata=208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 
vdata matrix=208 209 210 211 212 213 214 215 
             216 217 218 219 220 221 222 223 
vdata=224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 
vdata matrix=224 225 226 227 228 229 230 231 
             232 233 234 235 236 237 238 239 
vdata=240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 
vdata matrix=240 241 242 243 244 245 246 247 
             248 249 250 251 252 253 254 255 

ベクターのデータ型および演算については、この後のセクションで説明します。