amp コードで使用される構造体のコンストラクターには、restrict(amp) を含める必要がありますか? 元:
struct Foo
{
inline Foo(void)
{
}
float a;
};
それとも...
struct Foo
{
inline Foo(void) restrict(amp)
{
}
float a;
};
amp コードで使用される構造体のコンストラクターには、restrict(amp) を含める必要がありますか? 元:
struct Foo
{
inline Foo(void)
{
}
float a;
};
それとも...
struct Foo
{
inline Foo(void) restrict(amp)
{
}
float a;
};
はい。これらのオブジェクトを AMP カーネル内に構築する場合。以下の例では、制限stuff
された 内でインスタンスが作成されます。正しくコンパイルするには、コンストラクターを as としてマークする必要があります。amp
parallel_for_each
restrict(amp)
class stuff
{
public:
int a;
stuff(int v) restrict(amp, cpu)
: a(v) { }
};
class test_case
{
public:
test_case() { }
void test_amp()
{
concurrency::array_view<stuff, 1> data(100);
concurrency::parallel_for_each(data.extent,
[data](concurrency::index<1> idx) restrict(amp)
{
data[idx] = stuff(s.a * s.a);
});
data.synchronize();
};
};
また、これをブログ投稿、Using C++ Classes with C++ AMPとして書きました。