Конструкторы AMP C++

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

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

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

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

1 ответ

Решение

Да. Если вы хотите построить эти объекты в ядре 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".

Другие вопросы по тегам