内核函数可使用专用的只读数据结构,这些数据结构作为文件作用域内的变量来访问。编译器会为此类数据分配有限量的静态堆空间。以如下头文件 (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);
}