source: CIVL/examples/omp/m4ri/tests/test_trsm.c

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 9.4 KB
Line 
1#include <m4ri/config.h>
2#include <stdlib.h>
3#include <m4ri/m4ri.h>
4
5int test_trsm_upper_right (rci_t m, rci_t n, int offset){
6 printf("upper_right:: m: %4d n: %4d offset: %4d ... ", m, n, offset);
7
8 mzd_t* Ubase = mzd_init (2048, 2048);
9 mzd_t* Bbase = mzd_init (2048, 2048);
10 mzd_randomize(Ubase);
11 mzd_randomize(Bbase);
12 mzd_t* Bbasecopy = mzd_copy (NULL, Bbase);
13
14 mzd_t* U = mzd_init_window (Ubase, 0, offset, n, n + offset);
15 mzd_t* B = mzd_init_window (Bbase, 0, offset, m, n + offset);
16 mzd_t* W = mzd_copy (NULL, B);
17
18 for (rci_t i = 0; i < n; ++i){
19 for (rci_t j = 0; j < i; ++j)
20 mzd_write_bit(U,i,j, 0);
21 mzd_write_bit(U,i,i, 1);
22 }
23 mzd_trsm_upper_right (U, B, 2048);
24
25 mzd_addmul(W, B, U, 2048);
26
27 int status = 0;
28 for (rci_t i = 0; i < m; ++i)
29 for (rci_t j = 0; j < n; ++j){
30 if (mzd_read_bit (W,i,j)){
31 status = 1;
32 }
33 }
34
35 // Verifiying that nothing has been changed around the submatrices
36 mzd_addmul(W, B, U, 2048);
37 mzd_copy (B, W);
38
39 for (rci_t i = 0; i < 2048; ++i)
40 for (wi_t j = 0; j < 2048 / m4ri_radix; ++j){
41 if (Bbase->rows[i][j] != Bbasecopy->rows[i][j]){
42 status = 1;
43 }
44 }
45 mzd_free_window (U);
46 mzd_free_window (B);
47 mzd_free (W);
48 mzd_free(Ubase);
49 mzd_free(Bbase);
50 mzd_free(Bbasecopy);
51
52 if (!status)
53 printf("passed\n");
54 else
55 printf("FAILED\n");
56 return status;
57}
58
59int test_trsm_lower_right (rci_t m, rci_t n, int offset){
60 printf("lower_right:: m: %4d n: %4d offset: %4d ... ", m, n, offset);
61 mzd_t* Lbase = mzd_init (2048, 2048);
62 mzd_t* Bbase = mzd_init (2048, 2048);
63 mzd_randomize (Lbase);
64 mzd_randomize (Bbase);
65 mzd_t* Bbasecopy = mzd_copy (NULL, Bbase);
66
67 mzd_t* L = mzd_init_window(Lbase, 0, offset, n, n + offset);
68 mzd_t* B = mzd_init_window (Bbase, 0, offset, m, n + offset);
69 mzd_t* W = mzd_copy (NULL, B);
70
71 for (rci_t i = 0; i < n; ++i){
72 for (rci_t j = i + 1; j < n; ++j)
73 mzd_write_bit(L,i,j, 0);
74 mzd_write_bit(L,i,i, 1);
75 }
76 mzd_trsm_lower_right (L, B, 2048);
77
78 mzd_addmul(W, B, L, 2048);
79
80 int status = 0;
81 for (rci_t i = 0; i < m; ++i)
82 for (rci_t j = 0; j < n; ++j){
83 if (mzd_read_bit (W,i,j)){
84 status = 1;
85 }
86 }
87
88 // Verifiying that nothing has been changed around the submatrices
89 mzd_addmul(W, B, L, 2048);
90 mzd_copy (B, W);
91
92 for (rci_t i = 0; i < 2048; ++i)
93 for (wi_t j = 0; j < 2048 / m4ri_radix; ++j){
94 if (Bbase->rows[i][j] != Bbasecopy->rows[i][j]){
95 status = 1;
96 }
97 }
98 mzd_free_window (L);
99 mzd_free_window (B);
100 mzd_free (W);
101 mzd_free(Lbase);
102 mzd_free(Bbase);
103 mzd_free(Bbasecopy);
104
105 if (!status)
106 printf("passed\n");
107 else
108 printf("FAILED\n");
109 return status;
110}
111
112
113int test_trsm_lower_left (rci_t m, rci_t n, int offsetL, int offsetB){
114 printf("lower_left:: m: %4d n: %4d offset L: %4d offset B: %4d ... ", m, n, offsetL, offsetB);
115 mzd_t* Lbase = mzd_init (2048, 2048);
116 mzd_t* Bbase = mzd_init (2048, 2048);
117 mzd_randomize (Lbase);
118 mzd_randomize (Bbase);
119 mzd_t* Bbasecopy = mzd_copy (NULL, Bbase);
120
121 mzd_t* L = mzd_init_window (Lbase, 0, offsetL, m, m + offsetL);
122 mzd_t* B = mzd_init_window (Bbase, 0, offsetB, m, n + offsetB);
123 mzd_t* W = mzd_copy (NULL, B);
124
125 for (rci_t i = 0; i < m; ++i){
126 for (rci_t j = i + 1; j < m; ++j)
127 mzd_write_bit(L,i,j, 0);
128 mzd_write_bit(L,i,i, 1);
129 }
130 mzd_trsm_lower_left(L, B, 2048);
131
132 mzd_addmul(W, L, B, 2048);
133
134 int status = 0;
135 for (rci_t i = 0; i < m; ++i)
136 for (rci_t j = 0; j < n; ++j){
137 if (mzd_read_bit (W,i,j)){
138 status = 1;
139 }
140 }
141
142 // Verifiying that nothing has been changed around the submatrices
143 mzd_addmul(W, L, B, 2048);
144
145 mzd_copy (B, W);
146
147 for (rci_t i = 0; i < 2048; ++i)
148 for (wi_t j = 0; j < 2048 / m4ri_radix; ++j){
149 if (Bbase->rows[i][j] != Bbasecopy->rows[i][j]){
150 status = 1;
151 }
152 }
153 mzd_free_window (L);
154 mzd_free_window (B);
155 mzd_free_window (W);
156 mzd_free(Lbase);
157 mzd_free(Bbase);
158 mzd_free(Bbasecopy);
159
160 if (!status)
161 printf(" ... passed\n");
162 else
163 printf(" ... FAILED\n");
164 return status;
165}
166
167
168
169int test_trsm_upper_left (rci_t m, rci_t n, int offsetU, int offsetB) {
170 printf("upper_left:: m: %4d n: %4d offset U: %4d offset B: %4d ... ", m, n, offsetU, offsetB);
171 mzd_t* Ubase = mzd_init (2048, 2048);
172 mzd_t* Bbase = mzd_init (2048, 2048);
173 mzd_randomize (Ubase);
174 mzd_randomize (Bbase);
175 mzd_t* Bbasecopy = mzd_copy (NULL, Bbase);
176
177 mzd_t* U = mzd_init_window (Ubase, 0, offsetU, m, m + offsetU);
178 mzd_t* B = mzd_init_window (Bbase, 0, offsetB, m, n + offsetB);
179 mzd_t* W = mzd_copy (NULL, B);
180
181 for (rci_t i = 0; i < m; ++i){
182 for (rci_t j = 0; j < i; ++j)
183 mzd_write_bit(U,i,j, 0);
184 mzd_write_bit(U,i,i, 1);
185 }
186 mzd_trsm_upper_left(U, B, 2048);
187
188 mzd_addmul(W, U, B, 2048);
189
190 int status = 0;
191 for (rci_t i = 0; i < m; ++i)
192 for (rci_t j = 0; j < n; ++j){
193 if (mzd_read_bit (W,i,j)){
194 status = 1;
195 }
196 }
197 // Verifiying that nothing has been changed around the submatrices
198 mzd_addmul(W, U, B, 2048);
199
200 mzd_copy (B, W);
201
202 for (rci_t i = 0; i < 2048; ++i)
203 for (wi_t j = 0; j < 2048 / m4ri_radix; ++j){
204 if (Bbase->rows[i][j] != Bbasecopy->rows[i][j]){
205 status = 1;
206 }
207 }
208 mzd_free_window (U);
209 mzd_free_window (B);
210 mzd_free_window (W);
211 mzd_free(Ubase);
212 mzd_free(Bbase);
213 mzd_free(Bbasecopy);
214
215 if (!status)
216 printf("passed\n");
217 else
218 printf("FAILED\n");
219 return status;
220}
221
222int main() {
223 int status = 0;
224
225 srandom(17);
226
227 status += test_trsm_upper_right( 63, 63, 0);
228 status += test_trsm_upper_right( 64, 64, 0);
229 status += test_trsm_upper_right( 65, 65, 0);
230 status += test_trsm_upper_right( 53, 53, 0);
231 status += test_trsm_upper_right( 54, 54, 0);
232 status += test_trsm_upper_right( 55, 55, 0);
233 status += test_trsm_upper_right( 57, 10, 0);
234 status += test_trsm_upper_right( 57, 150, 0);
235 status += test_trsm_upper_right( 57, 3, 0);
236 status += test_trsm_upper_right( 57, 4, 64);
237 status += test_trsm_upper_right( 57, 80, 64);
238 status += test_trsm_upper_right(1577, 1802, 128);
239
240 printf("\n");
241
242 status += test_trsm_lower_right( 63, 63, 0);
243 status += test_trsm_lower_right( 64, 64, 0);
244 status += test_trsm_lower_right( 65, 65, 0);
245 status += test_trsm_lower_right( 53, 53, 0);
246 status += test_trsm_lower_right( 54, 54, 0);
247 status += test_trsm_lower_right( 55, 55, 0);
248 status += test_trsm_lower_right( 57, 10, 0);
249 status += test_trsm_lower_right( 57, 150, 0);
250 status += test_trsm_lower_right( 57, 3, 0);
251 status += test_trsm_lower_right( 57, 4, 64);
252 status += test_trsm_lower_right( 57, 80, 64);
253 status += test_trsm_lower_right(1577, 1802, 128);
254
255 printf("\n");
256
257 status += test_trsm_lower_left( 63, 63, 0, 0);
258 status += test_trsm_lower_left( 64, 64, 0, 0);
259 status += test_trsm_lower_left( 65, 65, 0, 0);
260 status += test_trsm_lower_left( 53, 53, 0, 0);
261 status += test_trsm_lower_left( 54, 54, 0, 0);
262 status += test_trsm_lower_left( 55, 55, 0, 0);
263 status += test_trsm_lower_left( 10, 20, 0, 0);
264 status += test_trsm_lower_left( 10, 80, 0, 0);
265 status += test_trsm_lower_left( 10, 20, 0, 0);
266 status += test_trsm_lower_left( 10, 80, 0, 0);
267 status += test_trsm_lower_left( 10, 20, 0, 0);
268 status += test_trsm_lower_left( 10, 80, 0, 0);
269 status += test_trsm_lower_left( 10, 20, 0, 0);
270 status += test_trsm_lower_left( 10, 80, 0, 0);
271 status += test_trsm_lower_left( 70, 20, 0, 0);
272 status += test_trsm_lower_left( 70, 80, 0, 0);
273 status += test_trsm_lower_left( 70, 10, 0, 0);
274 status += test_trsm_lower_left( 70, 80, 0, 0);
275 status += test_trsm_lower_left( 70, 20, 0, 0);
276 status += test_trsm_lower_left( 70, 80, 0, 0);
277 status += test_trsm_lower_left( 70, 20, 0, 0);
278 status += test_trsm_lower_left( 70, 80, 64, 64);
279 status += test_trsm_lower_left( 770, 1600, 64, 128);
280 status += test_trsm_lower_left(1764, 1345, 256, 64);
281
282 printf("\n");
283
284 status += test_trsm_upper_left( 63, 63, 0, 0);
285 status += test_trsm_upper_left( 64, 64, 0, 0);
286 status += test_trsm_upper_left( 65, 65, 0, 0);
287 status += test_trsm_upper_left( 53, 53, 0, 0);
288 status += test_trsm_upper_left( 54, 54, 0, 0);
289 status += test_trsm_upper_left( 55, 55, 0, 0);
290 status += test_trsm_upper_left( 10, 20, 0, 0);
291 status += test_trsm_upper_left( 10, 80, 0, 0);
292 status += test_trsm_upper_left( 10, 20, 0, 0);
293 status += test_trsm_upper_left( 10, 80, 0, 0);
294 status += test_trsm_upper_left( 10, 20, 0, 0);
295 status += test_trsm_upper_left( 10, 80, 0, 0);
296 status += test_trsm_upper_left( 10, 20, 0, 0);
297 status += test_trsm_upper_left( 10, 80, 0, 0);
298 status += test_trsm_upper_left( 70, 20, 0, 0);
299 status += test_trsm_upper_left( 63, 1, 0, 0);
300 status += test_trsm_upper_left( 70, 80, 0, 0);
301 status += test_trsm_upper_left( 70, 10, 0, 0);
302 status += test_trsm_upper_left( 70, 80, 0, 0);
303 status += test_trsm_upper_left( 70, 20, 0, 0);
304 status += test_trsm_upper_left( 70, 80, 0, 0);
305 status += test_trsm_upper_left( 70, 20, 0, 0);
306 status += test_trsm_upper_left( 70, 80, 64, 64);
307 status += test_trsm_upper_left( 770, 1600, 64, 128);
308 status += test_trsm_upper_left( 1764, 1345, 256, 64);
309
310 if (!status) {
311 printf("All tests passed.\n");
312 return 0;
313 } else {
314 return -1;
315 }
316}
Note: See TracBrowser for help on using the repository browser.