1 #ifndef TEST_ELEMENT_CONSTANT_OPENCL_HH 2 #define TEST_ELEMENT_CONSTANT_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_elementwise_constant 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> m; 25 ublas::matrix<T, F> m_result_add_ublas; 26 ublas::matrix<T, F> m_result_sub_ublas; 27 ublas::matrix<T, F> m_result_add_opencl; 28 ublas::matrix<T, F> m_result_sub_opencl; 29 ublas::vector<T> v; 30 ublas::vector<T> v_result_add_ublas; 31 ublas::vector<T> v_result_sub_ublas; 32 ublas::vector<T> v_result_add_opencl; 33 ublas::vector<T> v_result_sub_opencl; 34 35 36 37 for (int i = 0; i<number_of_tests; i++) 38 { 39 int rows = std::rand() % max_dimension + 1; 40 int cols = std::rand() % max_dimension + 1; 41 42 m.resize(rows, cols); 43 v.resize(rows); 44 45 test::init_matrix(m, 200); 46 test::init_vector(v, 200); 47 48 T constant = rand() % max_dimension; 49 ublas::matrix<T, F> m_constant_holder(rows, cols, constant); 50 ublas::vector<T> v_constant_holder(rows, constant); 51 52 m_result_add_ublas = m + m_constant_holder; 53 m_result_sub_ublas = m - m_constant_holder; 54 m_result_add_opencl = opencl::element_add(m, constant, queue); 55 m_result_sub_opencl = opencl::element_sub(m, constant, queue); 56 57 v_result_add_ublas = v + v_constant_holder; 58 v_result_sub_ublas = v - v_constant_holder; 59 v_result_add_opencl = opencl::element_add(v, constant, queue); 60 v_result_sub_opencl = opencl::element_sub(v, constant, queue); 61 62 63 64 if ((!test::compare(m_result_add_ublas, m_result_add_opencl)) 65 || (!test::compare(m_result_sub_ublas, m_result_sub_opencl)) || 66 (!test::compare(v_result_add_ublas, v_result_add_opencl)) 67 || (!test::compare(v_result_sub_ublas, v_result_sub_opencl))) 68 { 69 std::cout << "Error in calculations" << std::endl; 70 71 std::cout << "passed: " << passedOperations << std::endl; 72 return; 73 } 74 75 passedOperations++; 76 77 } 78 std::cout << "All is well (matrix opencl elementwise operations with constants) of " << typeid(T).name() << std::endl; 79 80 81 82 } 83 84 }; 85 86 #endif