gpt4 book ai didi

c++ - 放大器限制功能中的非法外部引用

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:26 27 4
gpt4 key购买 nike

如果我正在尝试使用 C++ amp,并且存在 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 function"
}

最佳答案

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

tile_static用于告诉编译器存储数据的内存类型。tile_static内存是每个图 block 本地的有限数量的更快的内存。如果您的 C++ AMP lambda 读取 perm array_view 的每个值很多时候,您可能会看到通过将数据放入 tile_static 来提高性能内存。

关于c++ - 放大器限制功能中的非法外部引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126182/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com