有时,在多个内核中使用相同的表定义。由于 AI 引擎架构属于分布式地址空间架构,执行此类内核的每个处理器二进制镜像都需要在其自己的本地存储器内定义该表。为了使正确的 graph 链接能遍布多个处理器,您必须在内核源文件以及 graph 类定义文件中将该表声明为 extern
。随后,需要在单独的头文件中指定实际的表定义,此头文件会作为属性附加到该内核,如下所示。
#include <adf.h>
extern int32 lutarray[8];
class simple_lut_graph : public adf::graph {
public:
kernel k;
parameter p;
simple_lut_graph() {
k = kernel::create(simple);
p = parameter::array(lutarray);
connect<>(p,k);
std::vector<std::string> myheaders;
myheaders.push_back("./user_parameter.h")
headers(k) = myheaders;
...
}
}
这样即可确保定义该表的头文件包含在使用该内核的最终二进制链接内,而不会导致发生重新定义错误。
注释: 不支持超大查找表 (>32 KB)。
注释: 共享数据必须作为运行时参数来显式管理,或者在文件作用域内声明,在映射到相同 AI 引擎的所有内核之间都共享此文件作用域。