PlasCom2  1.0
XPACC Multi-physics simluation application
CSTestKernelsCXX.C
Go to the documentation of this file.
1 #include <CSTestKernels.H>
2 #include <iostream>
3 //
4 // matrix multiplication
5 //
6 // [ 1 2 3 4 5]
7 // [ 6 7 8 9 10]
8 // [A] = [11 12 13 14 15]
9 // [16 17 18 19 20]
10 // [21 22 23 24 25]
11 //
12 // [ 215 230 245 260 275]
13 // [ 490 530 570 610 650]
14 // [A]*[A] = [ 765 830 895 960 1025]
15 // [1040 1130 1220 1310 1400]
16 // [1315 1430 1545 1660 1775]
17 //
18 int ICEUnrollCxxTestKernel(int &result) {
19 
20  int m = 5, p = 5, q = 5, c, d, k, sum = 0;
21  int first[m][p], second[p][q], multiply[m][q];
22 
23  sum = 0;
24  for (c = 0; c < m; c++) {
25  for (d = 0; d < p; d++) {
26  sum++;
27  first[c][d] = sum;
28  }
29  }
30 
31  sum = 0;
32  for (c = 0; c < p; c++) {
33  for (d = 0; d < q; d++) {
34  sum++;
35  second[c][d] = sum;
36  }
37  }
38 
39  //sum = 0;
40 #pragma @ICE loop=unrollTestCXX
41  for (c = 0; c < m; c++) {
42  for (d = 0; d < q; d++) {
43  for (k = 0; k < p; k++) {
44  //sum = sum + first[c][k]*second[k][d];
45  multiply[c][d] = multiply[c][d] + first[c][k]*second[k][d];
46  }
47  //multiply[c][d] = sum;
48  //sum = 0;
49  }
50  }
51 #pragma @ICE endloop
52 
53  result=multiply[2][2];
54  return 0;
55 }
56 
57 //
58 // matrix multiplication
59 //
60 // [ 1 2 3 4 5]
61 // [ 6 7 8 9 10]
62 // [A] = [11 12 13 14 15]
63 // [16 17 18 19 20]
64 // [21 22 23 24 25]
65 //
66 // [ 215 230 245 260 275]
67 // [ 490 530 570 610 650]
68 // [A]*[A] = [ 765 830 895 960 1025]
69 // [1040 1130 1220 1310 1400]
70 // [1315 1430 1545 1660 1775]
71 //
72 int ICEInterchangeCxxTestKernel(int &result) {
73 
74  int m = 5, p = 5, q = 5, c, d, k, sum = 0;
75  int first[m][p], second[p][q], multiply[m][q];
76 
77  sum = 0;
78  for (c = 0; c < m; c++) {
79  for (d = 0; d < p; d++) {
80  sum++;
81  first[c][d] = sum;
82  }
83  }
84 
85  sum = 0;
86  for (c = 0; c < p; c++) {
87  for (d = 0; d < q; d++) {
88  sum++;
89  second[c][d] = sum;
90  }
91  }
92 
93  for (c = 0; c < m; c++) {
94  for (d = 0; d < q; d++) {
95  multiply[c][d] = 0;
96  }
97  }
98 
99 #pragma @ICE loop=interchangeTestCXX
100  for (c = 0; c < m; c++) {
101  for (d = 0; d < q; d++) {
102  for (k = 0; k < p; k++) {
103  //sum = sum + first[c][k]*second[k][d];
104  multiply[c][d] = multiply[c][d] + first[c][k]*second[k][d];
105  }
106  }
107  }
108 #pragma @ICE endloop
109 
110  result=multiply[2][2];
111  return 0;
112 }
113 
114 //
115 // matrix multiplication
116 //
117 // [ 1 2 3 4 5]
118 // [ 6 7 8 9 10]
119 // [A] = [11 12 13 14 15]
120 // [16 17 18 19 20]
121 // [21 22 23 24 25]
122 //
123 // [ 215 230 245 260 275]
124 // [ 490 530 570 610 650]
125 // [A]*[A] = [ 765 830 895 960 1025]
126 // [1040 1130 1220 1310 1400]
127 // [1315 1430 1545 1660 1775]
128 //
129 int ICETileCxxTestKernel(int &result) {
130 
131  int m = 5, p = 5, q = 5, c, d, k, sum = 0;
132  int first[m][p], second[p][q], multiply[m][q];
133 
134  sum = 0;
135  for (c = 0; c < m; c++) {
136  for (d = 0; d < p; d++) {
137  sum++;
138  first[c][d] = sum;
139  }
140  }
141 
142  sum = 0;
143  for (c = 0; c < p; c++) {
144  for (d = 0; d < q; d++) {
145  sum++;
146  second[c][d] = sum;
147  }
148  }
149 
150  sum = 0;
151 #pragma @ICE loop=tileTestCXX
152  for (c = 0; c < m; c++) {
153  for (d = 0; d < q; d++) {
154  for (k = 0; k < p; k++) {
155  sum = sum + first[c][k]*second[k][d];
156  }
157  multiply[c][d] = sum;
158  sum = 0;
159  }
160  }
161 #pragma @ICE endloop
162 
163  result=multiply[2][2];
164  return 0;
165 }
166 //
167 // matrix multiplication
168 //
169 // [ 1 2 3 4 5]
170 // [ 6 7 8 9 10]
171 // [A] = [11 12 13 14 15]
172 // [16 17 18 19 20]
173 // [21 22 23 24 25]
174 //
175 // [ 215 230 245 260 275]
176 // [ 490 530 570 610 650]
177 // [A]*[A] = [ 765 830 895 960 1025]
178 // [1040 1130 1220 1310 1400]
179 // [1315 1430 1545 1660 1775]
180 //
181 int ICEStripMineCxxTestKernel(int &result) {
182 
183  int m = 5, p = 5, q = 5, c, d, k, sum = 0;
184  int first[m][p], second[p][q], multiply[m][q];
185 
186  sum = 0;
187  for (c = 0; c < m; c++) {
188  for (d = 0; d < p; d++) {
189  sum++;
190  first[c][d] = sum;
191  }
192  }
193 
194  sum = 0;
195  for (c = 0; c < p; c++) {
196  for (d = 0; d < q; d++) {
197  sum++;
198  second[c][d] = sum;
199  }
200  }
201 
202  sum = 0;
203 #pragma @ICE loop=stripMineTestCXX
204  for (c = 0; c < m; c++) {
205  for (d = 0; d < q; d++) {
206  for (k = 0; k < p; k++) {
207  sum = sum + first[c][k]*second[k][d];
208  }
209  multiply[c][d] = sum;
210  sum = 0;
211  }
212  }
213 #pragma @ICE endloop
214 
215  result=multiply[2][2];
216  return 0;
217 }
int ICEUnrollCxxTestKernel(int &result)
int ICEInterchangeCxxTestKernel(int &result)
int ICETileCxxTestKernel(int &result)
int ICEStripMineCxxTestKernel(int &result)