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

Versal ACAP AI 引擎编程环境 用户指南 (UG1076)

Document ID
UG1076
Release Date
2022-05-25
Version
2022.1 简体中文

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

#ifndef USER_PARAMETER_H
#define USER_PARAMETER_H

#include <adf.h>

static int32 lutarray[8] = {1,2,3,4,5,6,0,0} ; 

#endif

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

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

void simple_lut(input_window<int32> * in, output_window<int32> * out){
  aie::vector<int32,16> sbuff;
  aie::accum<acc80,4> acc;
  aie::vector<int32,8> coeffs=aie::load_v<8>((int32*)lutarray);

  window_readincr_v<16>(in, sbuff);
  acc = aie::sliding_mul<4,8>(coeffs, 0, sbuff, 0);
  window_writeincr(out, acc.template to_vector(0));
}