• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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