AI 引擎 API 是适用于 AI 引擎加速器的便携式编程接口。 AI 引擎 API 用户指南(UG1529) 指明了该 API 是否仅在特定的架构上受支持。此 API 是作为仅限 C++ 头文件的库来实现的,可以提供多种类型和运算,以供转换为高效的低级内部函数。此 API 还提供了更高层的抽象,例如,迭代器。
通常,在内核源代码中需要两个头文件:
-
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
。如需了解更多信息,请参阅 运算符重载。
以下提供了为 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
以下章节中涵盖了有关矢量数据类型和操作的内容。