fork download
  1. #include <algorithm>
  2. #include <amp.h>
  3. #include <chrono>
  4. #include <iostream>
  5. #include <numeric>
  6. #include <vector>
  7.  
  8. namespace amp = concurrency;
  9. #define GPU
  10.  
  11. int main(int argc, char* argv[])
  12. {
  13. unsigned int matrixRank = 8192;
  14. std::vector<int> matrixA(matrixRank*matrixRank, 1);
  15. std::vector<int> matrixB(matrixRank*matrixRank, 0);
  16. std::vector<int> matrixC(matrixRank*matrixRank, 0);
  17. std::iota(matrixB.begin(), matrixB.end(), 0);
  18.  
  19. amp::extent<2> e(matrixRank, matrixRank);
  20. amp::array_view<int, 2> a(e, matrixA);
  21. amp::array_view<int, 2> b(e, matrixB);
  22. amp::array_view<int, 2> sum(e, matrixC);
  23.  
  24. auto begin = std::chrono::high_resolution_clock::now();
  25. #ifdef GPU
  26. amp::parallel_for_each(sum.extent, [=](amp::index<2> idx) restrict(amp)
  27. {
  28. sum[idx] = a[idx] + b[idx];
  29. });
  30. sum.synchronize();
  31. #else
  32. for(unsigned int i=0; i<matrixRank*matrixRank; i++)
  33. {
  34. matrixC[i] = matrixA[i] + matrixB[i];
  35. }
  36. #endif
  37. auto end = std::chrono::high_resolution_clock::now();
  38. std::cout << "Computation took: " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms" << std::endl;
  39.  
  40. std::cin.get();
  41. return 0;
  42. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty