параллельная обработка — C ++ AMP Constructors

Должны ли конструкторы для структуры, которая будет использоваться в коде amp, включать ограничение (amp)? Пример:

struct Foo
{
inline Foo(void)
{
}
float a;
};

Или это должно быть как …

struct Foo
{
inline Foo(void) restrict(amp)
{
}
float a;
};

2

Решение

Да. Если вы хотите построить эти объекты в ядре AMP. В приведенном ниже примере stuff экземпляры создаются внутри 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();
};
};

Я также написал это как пост в блоге, Использование классов C ++ с C ++ AMP.

1

Другие решения

Других решений пока нет …