While the previous example only includes an eight entry look-up table accessed as a global variable, many other algorithms require much larger look-up tables. Because AI Engine local memory is at a premium, it is much more efficient for the AI Engine compiler to manage the look-up table explicitly for specific kernels than to leave a large amount of stack or heap space on every processor. Such tables should not be declared static in the kernel header file.
#ifndef USER_PARAMETER_H
#define USER_PARAMETER_H
#include <adf.h>
int32 lutarray[8] = {1,2,3,4,5,6,0,0} ;
#endif
The kernel source continues to include the header
file and use the table as before. But, now you must declare this table as extern
in the graph class header and use the parameter::array(…)
function to create a parameter
object explicitly in the graph. You also need to attach this parameter object to the
kernel as shown in the following code:
#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);
...
}
}
Including this explicit specification of the look-up table in the graph description ensures that the compiler is aware of the requirement to reserve a suitably sized piece of memory for the look-up table when it allocates memory for kernel input and output buffers.