静态文件作用域内的表 - 2023.2 简体中文

AI 引擎内核与计算图编程指南 (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 简体中文

内核函数可使用专用的只读数据结构,这些数据结构作为文件作用域内的变量来访问。编译器会为此类数据分配有限量的静态堆空间。以如下头文件 (user_parameter.h) 为例。

#ifndef USER_PARAMETER_H
#define USER_PARAMETER_H

#include <adf.h>
static int16 lutarray[8] = {1,2,3,4,5,6,0,0} ; 

#endif

此头文件可包含在内核源文件内,可在内核函数内直接对查找表进行寻址。static 修饰符用于确保阵列定义位于此文件本地。随后,aiecompiler 即可在静态堆空间内为使用此内核的处理器分配此阵列。

#include <aie_api/aie.hpp>
#include <aie_api/aie_adf.hpp>
#include "user_parameter.h"

using namespace adf;
void simple_lut(input_buffer<int16> &in, output_buffer<int16> &out){
  aie::vector<int16,32> sbuff;
  aie::vector<int16,8> coeffs=aie::load_v<8>((int16*)lutarray);
  auto inIter=aie::begin_vector<32>(in);
  sbuff=*inIter++;
  auto acc = aie::sliding_mul<8,16>(coeffs, 0, sbuff, 0);
  auto outIter=aie::begin_vector<8>(out);
  *outIter++=acc.to_vector<int16>(0);
}