OpenFPM_pdata  4.1.0
Project that contain the implementation of distributed structures
 
Loading...
Searching...
No Matches
compute_optimal_device_grid_unit_tests.hpp
1/*
2 * compute_optimal_device_grid_unit_tests.hpp
3 *
4 * Created on: Oct 1, 2017
5 * Author: i-bird
6 */
7
8#ifndef OPENFPM_DATA_SRC_UTIL_TEST_COMPUTE_OPTIMAL_DEVICE_GRID_UNIT_TESTS_HPP_
9#define OPENFPM_DATA_SRC_UTIL_TEST_COMPUTE_OPTIMAL_DEVICE_GRID_UNIT_TESTS_HPP_
10
11#include "util/compute_optimal_device_grid.hpp"
12
13BOOST_AUTO_TEST_SUITE( compute_optimal_device_grid_test )
14
15BOOST_AUTO_TEST_CASE( compute_optimal_device_use_test )
16{
17 // Check 1D response
18
19 size_t sz[1] = {1};
21 calculate_optimal_device_grid<1>(dg,sz,1,1);
22
23 BOOST_REQUIRE_EQUAL(dg.threads.x,1ul);
24 BOOST_REQUIRE_EQUAL(dg.threads.y,1ul);
25 BOOST_REQUIRE_EQUAL(dg.threads.z,1ul);
26
27 BOOST_REQUIRE_EQUAL(dg.grids.x,1ul);
28 BOOST_REQUIRE_EQUAL(dg.grids.y,1ul);
29 BOOST_REQUIRE_EQUAL(dg.grids.z,1ul);
30
31 // Fill with garbage
32 dg.threads.x = 123;
33 dg.threads.y = 123;
34 dg.threads.z = 123;
35
36 dg.grids.x = 123;
37 dg.grids.y = 123;
38 dg.grids.z = 123;
39
40 calculate_optimal_device_grid<1>(dg,sz,8,4);
41
42 BOOST_REQUIRE_EQUAL(dg.threads.x,1ul);
43 BOOST_REQUIRE_EQUAL(dg.threads.y,1ul);
44 BOOST_REQUIRE_EQUAL(dg.threads.z,1ul);
45
46 BOOST_REQUIRE_EQUAL(dg.grids.x,1ul);
47 BOOST_REQUIRE_EQUAL(dg.grids.y,1ul);
48 BOOST_REQUIRE_EQUAL(dg.grids.z,1ul);
49
50 sz[0] = 6;
51 calculate_optimal_device_grid<1>(dg,sz,8,4);
52
53 BOOST_REQUIRE_EQUAL(dg.threads.x,6ul);
54 BOOST_REQUIRE_EQUAL(dg.threads.y,1ul);
55 BOOST_REQUIRE_EQUAL(dg.threads.z,1ul);
56
57 BOOST_REQUIRE_EQUAL(dg.grids.x,1ul);
58 BOOST_REQUIRE_EQUAL(dg.grids.y,1ul);
59 BOOST_REQUIRE_EQUAL(dg.grids.z,1ul);
60
61 sz[0] = 6;
62
63 // Fill with garbage
64 dg.threads.x = 123;
65 dg.threads.y = 123;
66 dg.threads.z = 123;
67
68 dg.grids.x = 123;
69 dg.grids.y = 123;
70 dg.grids.z = 123;
71 calculate_optimal_device_grid<1>(dg,sz,28,10);
72
73 BOOST_REQUIRE_EQUAL(dg.threads.x,6ul);
74 BOOST_REQUIRE_EQUAL(dg.threads.y,1ul);
75 BOOST_REQUIRE_EQUAL(dg.threads.z,1ul);
76
77 BOOST_REQUIRE_EQUAL(dg.grids.x,1ul);
78 BOOST_REQUIRE_EQUAL(dg.grids.y,1ul);
79 BOOST_REQUIRE_EQUAL(dg.grids.z,1ul);
80
81 sz[0] = 17;
82
83 calculate_optimal_device_grid<1>(dg,sz,28,10);
84
85 BOOST_REQUIRE_EQUAL(dg.threads.x,17ul);
86 BOOST_REQUIRE_EQUAL(dg.threads.y,1ul);
87 BOOST_REQUIRE_EQUAL(dg.threads.z,1ul);
88
89 BOOST_REQUIRE_EQUAL(dg.grids.x,1ul);
90 BOOST_REQUIRE_EQUAL(dg.grids.y,1ul);
91 BOOST_REQUIRE_EQUAL(dg.grids.z,1ul);
92
93 sz[0] = 17;
94
95 calculate_optimal_device_grid<1>(dg,sz,1,1);
96
97 BOOST_REQUIRE_EQUAL(dg.threads.x,1ul);
98 BOOST_REQUIRE_EQUAL(dg.threads.y,1ul);
99 BOOST_REQUIRE_EQUAL(dg.threads.z,1ul);
100
101 BOOST_REQUIRE_EQUAL(dg.grids.x,17ul);
102 BOOST_REQUIRE_EQUAL(dg.grids.y,1ul);
103 BOOST_REQUIRE_EQUAL(dg.grids.z,1ul);
104
105 sz[0] = 17;
106
107 // Fill with garbage
108 dg.threads.x = 123;
109 dg.threads.y = 123;
110 dg.threads.z = 123;
111
112 dg.grids.x = 123;
113 dg.grids.y = 123;
114 dg.grids.z = 123;
115 calculate_optimal_device_grid<1>(dg,sz,5,3);
116
117 BOOST_REQUIRE_EQUAL(dg.threads.x,1ul);
118 BOOST_REQUIRE_EQUAL(dg.threads.y,1ul);
119 BOOST_REQUIRE_EQUAL(dg.threads.z,1ul);
120
121 BOOST_REQUIRE_EQUAL(dg.grids.x,17ul);
122 BOOST_REQUIRE_EQUAL(dg.grids.y,1ul);
123 BOOST_REQUIRE_EQUAL(dg.grids.z,1ul);
124
125
126 // 2D test
127
128 size_t sz2[] = {64,64};
129 device_grid<2> dg2;
130
131 calculate_optimal_device_grid<2>(dg2,sz2,1536,512);
132
133 BOOST_REQUIRE_EQUAL(dg2.threads.x,64ul);
134 BOOST_REQUIRE_EQUAL(dg2.threads.y,16ul);
135 BOOST_REQUIRE_EQUAL(dg2.threads.z,1ul);
136
137 BOOST_REQUIRE_EQUAL(dg2.grids.x,1ul);
138 BOOST_REQUIRE_EQUAL(dg2.grids.y,4ul);
139 BOOST_REQUIRE_EQUAL(dg2.grids.z,1ul);
140
141 // 2D test
142
143 sz2[0] = 126;
144 sz2[1] = 126;
145
146 calculate_optimal_device_grid<2>(dg2,sz2,1536,512);
147
148 BOOST_REQUIRE_EQUAL(dg2.threads.x,18ul);
149 BOOST_REQUIRE_EQUAL(dg2.threads.y,18ul);
150 BOOST_REQUIRE_EQUAL(dg2.threads.z,1ul);
151
152 BOOST_REQUIRE_EQUAL(dg2.grids.x,7ul);
153 BOOST_REQUIRE_EQUAL(dg2.grids.y,7ul);
154 BOOST_REQUIRE_EQUAL(dg2.grids.z,1ul);
155
156 sz2[0] = 162;
157 sz2[1] = 126;
158
159 calculate_optimal_device_grid<2>(dg2,sz2,1536,512);
160
161 BOOST_REQUIRE_EQUAL(dg2.threads.x,162ul);
162 BOOST_REQUIRE_EQUAL(dg2.threads.y,6ul);
163 BOOST_REQUIRE_EQUAL(dg2.threads.z,1ul);
164
165 BOOST_REQUIRE_EQUAL(dg2.grids.x,1ul);
166 BOOST_REQUIRE_EQUAL(dg2.grids.y,21ul);
167 BOOST_REQUIRE_EQUAL(dg2.grids.z,1ul);
168
169 size_t sz3[3] = {126,126,126};
170
171 device_grid<3> dg3;
172
173 calculate_optimal_device_grid<3>(dg3,sz3,1536,512);
174
175 BOOST_REQUIRE_EQUAL(dg3.threads.x,18ul);
176 BOOST_REQUIRE_EQUAL(dg3.threads.y,18ul);
177 BOOST_REQUIRE_EQUAL(dg3.threads.z,2ul);
178
179 BOOST_REQUIRE_EQUAL(dg3.grids.x,7ul);
180 BOOST_REQUIRE_EQUAL(dg3.grids.y,7ul);
181 BOOST_REQUIRE_EQUAL(dg3.grids.z,63ul);
182}
183
184BOOST_AUTO_TEST_SUITE_END()
185
186#endif /* OPENFPM_DATA_SRC_UTIL_TEST_COMPUTE_OPTIMAL_DEVICE_GRID_UNIT_TESTS_HPP_ */
dim3_ grids
number of grid for the kernel execution
Definition map_grid.hpp:481
dim3_ threads
number of treads in each block
Definition map_grid.hpp:478
unsigned int z
size in z dimension
Definition map_grid.hpp:471
unsigned int x
size in x dimension
Definition map_grid.hpp:465
unsigned int y
size in y dimension
Definition map_grid.hpp:468