1 #ifndef TEST_PROD_OPENCL_HH 2 #define TEST_PROD_OPENCL_HH 3 #include "test_opencl.hpp" 4 5 6 template <class T, class F, int number_of_tests, int max_dimension> 7 class bench_prod 8 { 9 public: 10 11 typedef test_opencl<T, F> test; 12 run()13 void run() 14 { 15 opencl::library lib; 16 int passedOperations = 0; 17 // get default device and setup context 18 compute::device device = compute::system::default_device(); 19 compute::context context(device); 20 compute::command_queue queue(context, device); 21 22 std::srand(time(0)); 23 24 ublas::matrix<T, F> a; 25 ublas::matrix<T, F> b; 26 ublas::matrix<T, F> resultUBLAS; 27 ublas::matrix<T, F> resultOPENCL; 28 ublas::vector<T> va; 29 ublas::vector<T> vb; 30 ublas::vector<T> result_vector_ublas_mv; 31 ublas::vector<T> result_vector_ublas_vm; 32 ublas::vector<T> result_vector_opencl_mv; 33 ublas::vector<T> result_vector_opencl_vm; 34 35 36 37 for (int i = 0; i<number_of_tests; i++) 38 { 39 int rowsA = std::rand() % max_dimension + 1; 40 int colsA = std::rand() % max_dimension + 1; 41 int colsB = std::rand() % max_dimension + 1; 42 43 a.resize(rowsA, colsA); 44 b.resize(colsA, colsB); 45 va.resize(colsA); 46 vb.resize(rowsA); 47 48 49 test::init_matrix(a, 200); 50 test::init_matrix(b, 200); 51 test::init_vector(va, 200); 52 test::init_vector(vb, 200); 53 54 //matrix_matrix 55 resultUBLAS = prod(a, b); 56 resultOPENCL = opencl::prod(a, b, queue); 57 58 59 //matrix_vector 60 result_vector_ublas_mv = ublas::prod(a, va); 61 result_vector_opencl_mv = opencl::prod(a, va, queue); 62 63 64 //vector-matrix 65 result_vector_ublas_vm = ublas::prod(vb, a); 66 result_vector_opencl_vm = opencl::prod(vb, a, queue); 67 68 69 if ((!test::compare(resultUBLAS, resultOPENCL)) || (!test::compare(result_vector_opencl_mv, result_vector_ublas_mv)) || (!test::compare(result_vector_opencl_vm, result_vector_ublas_vm))) 70 { 71 std::cout << "Error in calculations" << std::endl; 72 73 std::cout << "passed: " << passedOperations << std::endl; 74 return; 75 } 76 77 passedOperations++; 78 79 } 80 std::cout << "All is well (matrix opencl prod) of " << typeid(T).name() << std::endl; 81 82 83 84 } 85 86 }; 87 88 #endif