1

如果我正在尝试使用 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"
}
4

1 回答 1

1

您可以在 Perlin 类中声明perm[]为静态数组,然后将 anarray_view<const unsigned int, 1>作为成员变量添加到类中并在类构造函数中对其进行初始化。[this]然后,您可以在restrict(amp)lambda中捕获并访问perm[]每个函数中的内容。

tile_static用于告诉编译器将数据存储在哪种类型的内存中。tile_static内存是每个图块本地的有限数量的更快内存。array_view如果您的 C++ AMP lambda多次读取 perm 的每个值,那么通过将数据放入tile_static内存,您可能会看到性能改进。

于 2013-09-04T07:57:18.203 回答