C ++ AMP构造函数

时间:2013-06-20 01:14:03

标签: c++ parallel-processing gpu c++-amp

用于放大器代码的结构的构造函数是否需要包含restrict(amp)?例如:

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

或者应该是......

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

1 个答案:

答案 0 :(得分: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();
    };
};

我也把它写成博客文章Using C++ Classes with C++ AMP