1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
#include <amp.h>
#include <iostream>
using namespace concurrency;
struct data
{
data(float var1,float var2,size_t idx) :
var1(var1),var2(var2),idx(idx)
{}
// ... a whole bunch of constructors and functions that shouldn't matter, right?
// these are all AMP-supported types, right?
float var1;
float var2;
int idx;
};
void MyFirstAmpFunction()
{
size_t size = 5;
std::array<data,size> myarr1
// fill myarr1 with stuff
std::array<data,size> myarr2
// fill myarr2 with stuff
int resultarr[size];
// Create C++ AMP objects.
array_view<const data, 1> a1(size, myarr1);
array_view<const data, 1> a2(size, myarr2);
array_view<int, 1> result(size, resultarr);
result.discard_data();
parallel_for_each(
result.extent,
[=](index<1> idx) restrict(amp)
{
result[idx] = a1.idx * (int) (a1.var1 + a2.var2);
}
);
}
|