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

perm[]Perlin クラス内で静的配列として宣言しarray_view<const unsigned int, 1>、メンバー変数としてクラスに追加して、クラス コンストラクターで初期化することができます。次に、ラムダをキャプチャ[this]して、各関数内の内容にアクセスできます。restrict(amp)perm[]

tile_staticデータを格納するメモリのタイプをコンパイラに伝えるために使用されます。tile_staticメモリは、各タイルにローカルな限られた量のはるかに高速なメモリです。C++ AMP ラムダが perm の各値をarray_view何度も読み取る場合、データをtile_staticメモリに配置することでパフォーマンスが向上することがあります。

于 2013-09-04T07:57:18.203 に答える