カーネル関数は、ファイル スコープ変数としてアクセス可能な非公開の読み取り専用データ構造を使用できます。コンパイラは、そのようなデータに限られた量のスタティック ヒープ空間を割り当てます。例として、次のようなヘッダー ファイル (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);
}