同じテーブル定義が複数のカーネルで使用されることがあります。AI エンジン アーキテクチャは分配アドレス空間アーキテクチャなので、そのようなカーネルを実行する各プロセッサのバイナリ イメージには、そのローカル メモリで定義されたテーブルが必要です。正しいグラフ リンケージを複数のプロセッサに分配するには、カーネル ソース ファイルとグラフ クラスの定義ファイルで、テーブルを extern
として宣言する必要があります。そして、次に示すように、プロパティとして追加されている個別のヘッダー ファイルで実際のテーブル定義を指定します。
#include <adf.h>
extern int16 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;
location<parameter>(p)={address(0,1,0x1000)};
...
}
}
これにより、このカーネルが使用される箇所でテーブルを定義するヘッダー ファイルが最終バイナリ リンクに含まれ、再定義エラーが発生しなくなります。
注記: 32 KB を超える大型のルックアップ テーブルはサポートされません。
注記: 共有データは、ランタイム パラメーターとして明示的に管理するか、同じ AI エンジンにマップされるすべてのカーネルで共有されるファイル スコープで宣言する必要があります。