前述示例仅包含 8 个作为全局变量来访问的入口查找表,但许多算法都需要更大的查找表。由于 AI 引擎局部存储器极为重要,因此相比于在每个处理器上保留大量堆或栈空间,由 AI 引擎编译器为特定内核显式管理查找表更为高效。在内核头文件中,此类表不应声明为静态表。
#ifndef USER_PARAMETER_H
#define USER_PARAMETER_H
#include <adf.h>
int32 lutarray[8] = {1,2,3,4,5,6,0,0} ;
#endif
内核源文件继续照常包含头文件和使用该表。但您现在必须在 graph 类头文件中将该表声明为 extern
,并使用 parameter::array(…)
函数在 graph 中显式创建参数对象。您还需要将此参数对象附加到内核中,如以下代码所示:
#include <adf.h>
extern int32 lutarray[8];
class simple_lut_graph : public graph {
public:
kernel k;
parameter p;
simple_lut_graph() {
k = kernel::create(simple);
p = parameter::array(lutarray);
connect<>(p,k);
...
}
}
将此查找表的显式规范包含在 graph 描述中可确保编译器在为内核输入和输出缓冲器分配存储器时,已明确知晓需要为查找表保留适当大小的存储器。