AI Engine API Overview - 2023.1 English - UG1079

AI Engine Kernel and Graph Programming Guide (UG1079)

Document ID
UG1079
Release Date
2023-06-23
Version
2023.1 English

AI Engine API is a portable programming interface for AI Engine accelerators. It is implemented as a C++ header-only library that provides types and operations that get translated into efficient low-level intrinsics. The API also provides higher-level abstractions such as iterators.

Usually, two header files are needed in kernel source code:

aie_api/aie.hpp
AI Engine main entry point.
aie_api/aie_adf.hpp
Graph buffer and stream interfaces.

AI Engine API provides a helper file to print aie::vector and aie::mask values in simulation when profiling is enabled:

  • aie_api/utils.hpp: aie::print and aie::print_matrix functions are provided.

To support operator overloading on some operations, include header file aie_api/operators.hpp and use namespace aie::operators. For additional information, see Operator Overloading.

An example code for AI Engine kernel is as follows.

#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){ 
  aie::vector<int32,16> vec1=aie::broadcast(1);//set all elements to 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++;
    aie::print(vdata,true,"vdata=");//print vector in a line 
    aie::print_matrix(vdata,/*col=*/8,"vdata matrix=");//print vdata as a 2x8 matrix
    aie::vector<int32,16> vresult=aie::add(vdata,vec1);//increment each element in vdata by 1
    *outIter++=vresult;
  }
}

Vector data type and operations are covered in following sections.