Add a "--with-xlen" configure argument (#16)
[riscv-tests.git] / mt / av_matmul.c
1 #include "stdlib.h"
2
3 #include "util.h"
4
5 #include "dataset.h"
6 void __attribute__((noinline)) matmul(const int coreid, const int ncores, const int lda, const data_t A[], const data_t B[], data_t C[] )
7 {
8
9 //-----------------------------------------------------------------version 2.16, optimize v2.15 get rid of tempb. MSI 83K.w/ test one 81K.
10
11
12 static __thread data_t TempA[8];
13 static __thread data_t TempB[8];
14 static __thread data_t TempC[8];
15 static __thread int j,m,n;
16
17 if(coreid == 1 || ncores == 1 )
18 {
19 for ( j = 16; j < 32; j++ )
20 {
21
22 for ( m = 0; m < 4; m++ )
23 {
24
25 TempA[0] = A[j*lda+0+8*m];
26 TempA[1] = A[j*lda+1+8*m];
27 TempA[2] = A[j*lda+2+8*m];
28 TempA[3] = A[j*lda+3+8*m];
29 TempA[4] = A[j*lda+4+8*m];
30 TempA[5] = A[j*lda+5+8*m];
31 TempA[6] = A[j*lda+6+8*m];
32 TempA[7] = A[j*lda+7+8*m];
33
34
35
36 for( n = 0; n < 4; n++)
37 {
38
39
40
41
42
43 TempC[0] = TempA[0] * B[(0+8*m)*lda+0+8*n];
44 TempC[1] = TempA[0] * B[(0+8*m)*lda+1+8*n];
45 TempC[2] = TempA[0] * B[(0+8*m)*lda+2+8*n];
46 TempC[3] = TempA[0] * B[(0+8*m)*lda+3+8*n];
47 TempC[4] = TempA[0] * B[(0+8*m)*lda+4+8*n];
48 TempC[5] = TempA[0] * B[(0+8*m)*lda+5+8*n];
49 TempC[6] = TempA[0] * B[(0+8*m)*lda+6+8*n];
50 TempC[7] = TempA[0] * B[(0+8*m)*lda+7+8*n];
51
52
53 TempC[0] += TempA[1] * B[(1+8*m)*lda+0+8*n];
54 TempC[1] += TempA[1] * B[(1+8*m)*lda+1+8*n];
55 TempC[2] += TempA[1] * B[(1+8*m)*lda+2+8*n];
56 TempC[3] += TempA[1] * B[(1+8*m)*lda+3+8*n];
57 TempC[4] += TempA[1] * B[(1+8*m)*lda+4+8*n];
58 TempC[5] += TempA[1] * B[(1+8*m)*lda+5+8*n];
59 TempC[6] += TempA[1] * B[(1+8*m)*lda+6+8*n];
60 TempC[7] += TempA[1] * B[(1+8*m)*lda+7+8*n];
61
62
63
64 TempC[0] += TempA[2] * B[(2+8*m)*lda+0+8*n];
65 TempC[1] += TempA[2] * B[(2+8*m)*lda+1+8*n];
66 TempC[2] += TempA[2] * B[(2+8*m)*lda+2+8*n];
67 TempC[3] += TempA[2] * B[(2+8*m)*lda+3+8*n];
68 TempC[4] += TempA[2] * B[(2+8*m)*lda+4+8*n];
69 TempC[5] += TempA[2] * B[(2+8*m)*lda+5+8*n];
70 TempC[6] += TempA[2] * B[(2+8*m)*lda+6+8*n];
71 TempC[7] += TempA[2] * B[(2+8*m)*lda+7+8*n];
72
73
74
75 TempC[0] += TempA[3] * B[(3+8*m)*lda+0+8*n];
76 TempC[1] += TempA[3] * B[(3+8*m)*lda+1+8*n];
77 TempC[2] += TempA[3] * B[(3+8*m)*lda+2+8*n];
78 TempC[3] += TempA[3] * B[(3+8*m)*lda+3+8*n];
79 TempC[4] += TempA[3] * B[(3+8*m)*lda+4+8*n];
80 TempC[5] += TempA[3] * B[(3+8*m)*lda+5+8*n];
81 TempC[6] += TempA[3] * B[(3+8*m)*lda+6+8*n];
82 TempC[7] += TempA[3] * B[(3+8*m)*lda+7+8*n];
83
84 TempC[0] += TempA[4] * B[(4+8*m)*lda+0+8*n];
85 TempC[1] += TempA[4] * B[(4+8*m)*lda+1+8*n];
86 TempC[2] += TempA[4] * B[(4+8*m)*lda+2+8*n];
87 TempC[3] += TempA[4] * B[(4+8*m)*lda+3+8*n];
88 TempC[4] += TempA[4] * B[(4+8*m)*lda+4+8*n];
89 TempC[5] += TempA[4] * B[(4+8*m)*lda+5+8*n];
90 TempC[6] += TempA[4] * B[(4+8*m)*lda+6+8*n];
91 TempC[7] += TempA[4] * B[(4+8*m)*lda+7+8*n];
92
93
94 TempC[0] += TempA[5] * B[(5+8*m)*lda+0+8*n];
95 TempC[1] += TempA[5] * B[(5+8*m)*lda+1+8*n];
96 TempC[2] += TempA[5] * B[(5+8*m)*lda+2+8*n];
97 TempC[3] += TempA[5] * B[(5+8*m)*lda+3+8*n];
98 TempC[4] += TempA[5] * B[(5+8*m)*lda+4+8*n];
99 TempC[5] += TempA[5] * B[(5+8*m)*lda+5+8*n];
100 TempC[6] += TempA[5] * B[(5+8*m)*lda+6+8*n];
101 TempC[7] += TempA[5] * B[(5+8*m)*lda+7+8*n];
102
103
104
105 TempC[0] += TempA[6] * B[(6+8*m)*lda+0+8*n];
106 TempC[1] += TempA[6] * B[(6+8*m)*lda+1+8*n];
107 TempC[2] += TempA[6] * B[(6+8*m)*lda+2+8*n];
108 TempC[3] += TempA[6] * B[(6+8*m)*lda+3+8*n];
109 TempC[4] += TempA[6] * B[(6+8*m)*lda+4+8*n];
110 TempC[5] += TempA[6] * B[(6+8*m)*lda+5+8*n];
111 TempC[6] += TempA[6] * B[(6+8*m)*lda+6+8*n];
112 TempC[7] += TempA[6] * B[(6+8*m)*lda+7+8*n];
113
114
115 TempC[0] += TempA[7] * B[(7+8*m)*lda+0+8*n];
116 TempC[1] += TempA[7] * B[(7+8*m)*lda+1+8*n];
117 TempC[2] += TempA[7] * B[(7+8*m)*lda+2+8*n];
118 TempC[3] += TempA[7] * B[(7+8*m)*lda+3+8*n];
119 TempC[4] += TempA[7] * B[(7+8*m)*lda+4+8*n];
120 TempC[5] += TempA[7] * B[(7+8*m)*lda+5+8*n];
121 TempC[6] += TempA[7] * B[(7+8*m)*lda+6+8*n];
122 TempC[7] += TempA[7] * B[(7+8*m)*lda+7+8*n];
123
124
125
126 C[0+8*n+j*lda] += TempC[0];
127 C[1+8*n+j*lda] += TempC[1];
128 C[2+8*n+j*lda] += TempC[2];
129 C[3+8*n+j*lda] += TempC[3];
130 C[4+8*n+j*lda] += TempC[4];
131 C[5+8*n+j*lda] += TempC[5];
132 C[6+8*n+j*lda] += TempC[6];
133 C[7+8*n+j*lda] += TempC[7];
134 }
135 }
136 }
137 }
138 if(coreid == 0)
139 {
140 for ( j = 0; j < 16; j++ )
141 {
142
143 for ( m = 0; m < 4; m++ )
144 {
145
146 TempA[0] = A[j*lda+0+8*m];
147 TempA[1] = A[j*lda+1+8*m];
148 TempA[2] = A[j*lda+2+8*m];
149 TempA[3] = A[j*lda+3+8*m];
150 TempA[4] = A[j*lda+4+8*m];
151 TempA[5] = A[j*lda+5+8*m];
152 TempA[6] = A[j*lda+6+8*m];
153 TempA[7] = A[j*lda+7+8*m];
154
155
156
157 for( n = 0; n < 4; n++)
158 {
159
160
161
162
163
164 TempC[0] = TempA[0] * B[(0+8*m)*lda+0+8*n];
165 TempC[1] = TempA[0] * B[(0+8*m)*lda+1+8*n];
166 TempC[2] = TempA[0] * B[(0+8*m)*lda+2+8*n];
167 TempC[3] = TempA[0] * B[(0+8*m)*lda+3+8*n];
168 TempC[4] = TempA[0] * B[(0+8*m)*lda+4+8*n];
169 TempC[5] = TempA[0] * B[(0+8*m)*lda+5+8*n];
170 TempC[6] = TempA[0] * B[(0+8*m)*lda+6+8*n];
171 TempC[7] = TempA[0] * B[(0+8*m)*lda+7+8*n];
172
173
174 TempC[0] += TempA[1] * B[(1+8*m)*lda+0+8*n];
175 TempC[1] += TempA[1] * B[(1+8*m)*lda+1+8*n];
176 TempC[2] += TempA[1] * B[(1+8*m)*lda+2+8*n];
177 TempC[3] += TempA[1] * B[(1+8*m)*lda+3+8*n];
178 TempC[4] += TempA[1] * B[(1+8*m)*lda+4+8*n];
179 TempC[5] += TempA[1] * B[(1+8*m)*lda+5+8*n];
180 TempC[6] += TempA[1] * B[(1+8*m)*lda+6+8*n];
181 TempC[7] += TempA[1] * B[(1+8*m)*lda+7+8*n];
182
183
184
185 TempC[0] += TempA[2] * B[(2+8*m)*lda+0+8*n];
186 TempC[1] += TempA[2] * B[(2+8*m)*lda+1+8*n];
187 TempC[2] += TempA[2] * B[(2+8*m)*lda+2+8*n];
188 TempC[3] += TempA[2] * B[(2+8*m)*lda+3+8*n];
189 TempC[4] += TempA[2] * B[(2+8*m)*lda+4+8*n];
190 TempC[5] += TempA[2] * B[(2+8*m)*lda+5+8*n];
191 TempC[6] += TempA[2] * B[(2+8*m)*lda+6+8*n];
192 TempC[7] += TempA[2] * B[(2+8*m)*lda+7+8*n];
193
194
195
196 TempC[0] += TempA[3] * B[(3+8*m)*lda+0+8*n];
197 TempC[1] += TempA[3] * B[(3+8*m)*lda+1+8*n];
198 TempC[2] += TempA[3] * B[(3+8*m)*lda+2+8*n];
199 TempC[3] += TempA[3] * B[(3+8*m)*lda+3+8*n];
200 TempC[4] += TempA[3] * B[(3+8*m)*lda+4+8*n];
201 TempC[5] += TempA[3] * B[(3+8*m)*lda+5+8*n];
202 TempC[6] += TempA[3] * B[(3+8*m)*lda+6+8*n];
203 TempC[7] += TempA[3] * B[(3+8*m)*lda+7+8*n];
204
205 TempC[0] += TempA[4] * B[(4+8*m)*lda+0+8*n];
206 TempC[1] += TempA[4] * B[(4+8*m)*lda+1+8*n];
207 TempC[2] += TempA[4] * B[(4+8*m)*lda+2+8*n];
208 TempC[3] += TempA[4] * B[(4+8*m)*lda+3+8*n];
209 TempC[4] += TempA[4] * B[(4+8*m)*lda+4+8*n];
210 TempC[5] += TempA[4] * B[(4+8*m)*lda+5+8*n];
211 TempC[6] += TempA[4] * B[(4+8*m)*lda+6+8*n];
212 TempC[7] += TempA[4] * B[(4+8*m)*lda+7+8*n];
213
214
215 TempC[0] += TempA[5] * B[(5+8*m)*lda+0+8*n];
216 TempC[1] += TempA[5] * B[(5+8*m)*lda+1+8*n];
217 TempC[2] += TempA[5] * B[(5+8*m)*lda+2+8*n];
218 TempC[3] += TempA[5] * B[(5+8*m)*lda+3+8*n];
219 TempC[4] += TempA[5] * B[(5+8*m)*lda+4+8*n];
220 TempC[5] += TempA[5] * B[(5+8*m)*lda+5+8*n];
221 TempC[6] += TempA[5] * B[(5+8*m)*lda+6+8*n];
222 TempC[7] += TempA[5] * B[(5+8*m)*lda+7+8*n];
223
224
225
226 TempC[0] += TempA[6] * B[(6+8*m)*lda+0+8*n];
227 TempC[1] += TempA[6] * B[(6+8*m)*lda+1+8*n];
228 TempC[2] += TempA[6] * B[(6+8*m)*lda+2+8*n];
229 TempC[3] += TempA[6] * B[(6+8*m)*lda+3+8*n];
230 TempC[4] += TempA[6] * B[(6+8*m)*lda+4+8*n];
231 TempC[5] += TempA[6] * B[(6+8*m)*lda+5+8*n];
232 TempC[6] += TempA[6] * B[(6+8*m)*lda+6+8*n];
233 TempC[7] += TempA[6] * B[(6+8*m)*lda+7+8*n];
234
235
236 TempC[0] += TempA[7] * B[(7+8*m)*lda+0+8*n];
237 TempC[1] += TempA[7] * B[(7+8*m)*lda+1+8*n];
238 TempC[2] += TempA[7] * B[(7+8*m)*lda+2+8*n];
239 TempC[3] += TempA[7] * B[(7+8*m)*lda+3+8*n];
240 TempC[4] += TempA[7] * B[(7+8*m)*lda+4+8*n];
241 TempC[5] += TempA[7] * B[(7+8*m)*lda+5+8*n];
242 TempC[6] += TempA[7] * B[(7+8*m)*lda+6+8*n];
243 TempC[7] += TempA[7] * B[(7+8*m)*lda+7+8*n];
244
245
246
247 C[0+8*n+j*lda] += TempC[0];
248 C[1+8*n+j*lda] += TempC[1];
249 C[2+8*n+j*lda] += TempC[2];
250 C[3+8*n+j*lda] += TempC[3];
251 C[4+8*n+j*lda] += TempC[4];
252 C[5+8*n+j*lda] += TempC[5];
253 C[6+8*n+j*lda] += TempC[6];
254 C[7+8*n+j*lda] += TempC[7];
255 }
256 }
257 }
258 }
259 }