如果我正在尝试使用C ++放大器,并且有AMP限制功能需要访问的常量数据的静态数组,我怎样才能轻松实现(最好不要过多地修改代码?)
所以我有一个数组:
static unsigned char perm[512] = {151,160,137,91,90,15,...};
使用该阵列的放大器限制体..
float Perlin::noise(float x) restrict(amp)
{
...
n0 = t0 * t0 * grad(perm[i0 & 0xff], x0);
// causes "illegal external reference in amp-restricted function"
}
答案 0 :(得分:1)
您可以将perm[]
声明为Perlin类中的静态数组,然后将array_view<const unsigned int, 1>
作为成员变量添加到类中,并在类构造函数中初始化它。然后,您可以在[this]
lambda中捕获restrict(amp)
,并在每个函数中访问perm[]
的内容。
tile_static
用于告诉编译器将数据存储在哪种类型的内存中。tile_static
内存是每个磁贴本地更快的内存量。如果您的C ++ AMP lambda多次读取perm array_view
的每个值,那么您可以通过将数据放入tile_static
内存来看到性能改进。