如果我正在尝试使用C++ amp,并且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"
}发布于 2013-09-04 15:57:18
您可以在Perlin类中将perm[]声明为静态数组,然后将array_view<const unsigned int, 1>作为成员变量添加到该类中,并在类构造函数中对其进行初始化。然后,您可以在restrict(amp) lambda中捕获[this],并在每个函数中访问perm[]的内容。
tile_static用于告诉编译器在哪种类型的内存中存储数据。tile_static内存是每个磁贴本地的有限数量的更快的内存。如果您的C++ AMP lambda多次读取perm array_view的每个值,那么通过将数据放入tile_static内存中,您可能会看到性能改进。
https://stackoverflow.com/questions/17126182
复制相似问题