void Addx(float *z, float *x, float *y, size_t m, size_t n)
{
vector<float > vx(m*n);
vector<float > vy(m*n);
vector<float > vz(m*n);
vx.assign(x, x + n*m);
vy.assign(y, y + n*m);
pick_accelerator();
extent<2> e(m, n);
array_view<const float, 2> xg(e, vx), yg(e, vy);
array_view<float, 2> zg(e, vz);
zg.discard_data();
parallel_for_each(e, [=](index<2> idx) restrict(amp)
{
zg[idx] = xg[idx] + yg[idx];
});
zg.synchronize();
for (int count = 0; count < m*n; count++)
{
z[count] = vz[count];
}
}
私の GPU は、matlab mex で実装されたプログラムである HD 7790 です。C++AMP。CPU Phenom II X6 (1055T) 2.8GHZ と比較して、プログラムが遅いことがわかります。
Size Array 1024x1024
GPU Elapsed time is 0.026684 seconds.
CPU Elapsed time is 0.004970 seconds.
CPU Phenom II X6 (1055T) 800MHZ (4 倍遅い) と比較して、プログラムが遅いことがわかります。
Size Array 1024x1024
GPU Elapsed time is 0.064891 seconds.
CPU Elapsed time is 0.009650 seconds.
CPU と GPU 転送の関係 メモリ。GPU プログラムを高速化するにはどうすればよいですか?
CPU 130 Gflops AIDA64x FP (Phenom II X6 1055T)
GPU 1820 Gflops AIDA64x FP (HD 7790 OC)