首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >amp-restricted函数中的外部引用非法

amp-restricted函数中的外部引用非法
EN

Stack Overflow用户
提问于 2013-06-16 01:33:16
回答 1查看 262关注 0票数 1

如果我正在尝试使用C++ amp,并且AMP受限函数需要访问常量数据的静态数组,我如何才能轻松地做到这一点(最好不要过多地破坏代码?)

所以我有一个数组:

代码语言:javascript
复制
static unsigned char perm[512] = {151,160,137,91,90,15,...};

和一个使用该数组的放大器受限主体..

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

回答 1

Stack Overflow用户

发布于 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内存中,您可能会看到性能改进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17126182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档