C++ Amp のindexクラスについて、の簡単明瞭サンプル。


#include
using namespace concurrency;

void test1()
{
std::vector data(10);
for (int count = 0; count < 5; count++)
{
data[count] = count; // 0,1,2,3,4
}

concurrency::array a(2,5, data.begin(), data.end()); // 2x5


parallel_for_each(
a.extent,
[=, &a](index<2> idx) restrict(amp) // 2 is two dimension.
{
int x = idx[0]; // 0-1 (2)
int y = idx[1]; // 0-4 (5)

UINT sum = 0;

for( auto i = 0; i <= y; i++ )
sum += a[ index<2>(0,i) ]; // sum input value

a[ index<2>(1,y) ] = sum;

}
);

data = a;

for (int i = 0; i < 10; i++)
{
std::cout << data[i] << "\n"; // 0,1,2,3,4,0,1,3,6,10
}
}