amp受限函数中的非法外部引用 如果我试图使用C++ AMP,并且有静态数组的AMP受限制的函数需要访问的静态数组,那么我怎么能轻松地做到这一点(最好不用太多代码?)

amp受限函数中的非法外部引用 如果我试图使用C++ AMP,并且有静态数组的AMP受限制的函数需要访问的静态数组,那么我怎么能轻松地做到这一点(最好不用太多代码?),c++,c++-amp,C++,C++ Amp,所以我有一个数组: static unsigned char perm[512] = {151,160,137,91,90,15,...}; 以及使用该阵列的amp限制体 float Perlin::noise(float x) restrict(amp) { ... n0 = t0 * t0 * grad(perm[i0 & 0xff], x0); // causes "illegal external reference in amp-restricted functi

所以我有一个数组:

static unsigned char perm[512] = {151,160,137,91,90,15,...};
以及使用该阵列的amp限制体

float Perlin::noise(float x) restrict(amp)
{
  ...
  n0 = t0 * t0 * grad(perm[i0 & 0xff], x0);
  // causes "illegal external reference in amp-restricted function"
}

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


tile\u static
用于告诉编译器存储数据的内存类型<代码>磁贴(static内存是每个磁贴本地的有限内存,速度要快得多。如果C++ cAMPλ读取Prime>代码> AlayyVIEW 的每个值,那么您可以通过将数据放入TyLyStase内存中来看到性能改进。作为Perlin类中的静态数组,然后将
数组\u视图
作为成员变量添加到类中,并在类构造函数中对其进行初始化。然后,您可以在
restrict(amp)
lambda中捕获
[此]
,并在每个函数中访问
perm[]
的内容


tile\u static
用于告诉编译器存储数据的内存类型<代码>磁贴(static内存是每个磁贴本地的有限内存,速度要快得多。如果C++的AMP lambda读取Prime>代码> AlayyVIEW 的每一个值,那么你可以看到性能改进,将数据放入TyLyStase内存。

直接说明在受限函数中不允许全局变量。这太蹩脚了。这意味着我必须将整个数组复制到每个函数中,然后在该函数内部创建一个
array\u视图
?是否“无全局变量”也意味着array\u视图没有成员字段?看起来指南是使用tile_static:-直接声明在受限函数中不允许使用全局变量。这太蹩脚了。这意味着我必须将整个数组复制到每个函数中,然后在该函数内部创建一个
array\u视图
?是否“无全局变量”也意味着array\u视图没有成员字段?看起来指导原则是使用tile_static: