全局 graph 作用域内的表 - 2022.1 简体中文

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

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

前述示例仅包含 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 描述中可确保编译器在为内核输入和输出缓冲器分配存储器时,已明确知晓需要为查找表保留适当大小的存储器。