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
[] )
9 //-----------------------------------------------------------------version 2.16, optimize v2.15 get rid of tempb. MSI 83K.w/ test one 81K.
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
;
17 if(coreid
== 1 || ncores
== 1 )
19 for ( j
= 16; j
< 32; j
++ )
22 for ( m
= 0; m
< 4; m
++ )
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
];
36 for( n
= 0; n
< 4; n
++)
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
];
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
];
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
];
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
];
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
];
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
];
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
];
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
];
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];
140 for ( j
= 0; j
< 16; j
++ )
143 for ( m
= 0; m
< 4; m
++ )
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
];
157 for( n
= 0; n
< 4; n
++)
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
];
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
];
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
];
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
];
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
];
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
];
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
];
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
];
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];