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
[] )
10 static __thread
int i
, j
, k
;
11 static __thread data_t tempA0
, tempA1
, tempA2
, tempA3
, tempA4
, tempA5
, tempA6
, tempA7
;
12 static __thread data_t tempC0
, tempC1
, tempC2
, tempC3
, tempC4
, tempC5
, tempC6
, tempC7
; //tempC8, tempC9, tempC10, tempC11, tempC12, tempC13, tempC14, tempC15;
14 static __thread
int start
, end
, jStride
, jToRow
, jToCol
, iToRow
;
17 end
= ((ncores
== 1) ? 2 : (coreid
+1)) << 9;
20 for (j
=start
; j
< end
; j
+=jStride
) {
40 for ( i
=0; i
< lda
; i
+=2 ) {
43 tempA0
= A
[i
+ jToRow
];
44 tempA1
= A
[i
+1 + jToRow
];
45 //tempA2 = A[i+2 + jToRow];
46 //tempA3 = A[i+3 + jToRow];
47 //tempA4 = A[i+4 + jToRow];
48 //tempA5 = A[i+5 + jToRow];
49 //tempA6 = A[i+6 + jToRow];
50 //tempA7 = A[i+7 + jToRow];
52 tempC0
+= tempA0
* B
[(jToCol
) + (iToRow
)];
53 tempC1
+= tempA0
* B
[(jToCol
+1 ) + (iToRow
)];
54 tempC2
+= tempA0
* B
[(jToCol
+2 ) + (iToRow
)];
55 tempC3
+= tempA0
* B
[(jToCol
+3 ) + (iToRow
)];
56 tempC4
+= tempA0
* B
[(jToCol
+4 ) + (iToRow
)];
57 tempC5
+= tempA0
* B
[(jToCol
+5 ) + (iToRow
)];
58 tempC6
+= tempA0
* B
[(jToCol
+6 ) + (iToRow
)];
59 tempC7
+= tempA0
* B
[(jToCol
+7 ) + (iToRow
)];
60 //tempC8 += tempA0 * B[(jToCol+8 ) + (iToRow)];
61 //tempC9 += tempA0 * B[(jToCol+9 ) + (iToRow)];
62 //tempC10 += tempA0 * B[(jToCol+10) + (iToRow)];
63 //tempC11 += tempA0 * B[(jToCol+11) + (iToRow)];
64 //tempC12 += tempA0 * B[(jToCol+12) + (iToRow)];
65 //tempC13 += tempA0 * B[(jToCol+13) + (iToRow)];
66 //tempC14 += tempA0 * B[(jToCol+14) + (iToRow)];
67 //tempC15 += tempA0 * B[(jToCol+15) + (iToRow)];
70 tempC0
+= tempA1
* B
[(jToCol
) + (iToRow
)];
71 tempC1
+= tempA1
* B
[(jToCol
+1 ) + (iToRow
)];
72 tempC2
+= tempA1
* B
[(jToCol
+2 ) + (iToRow
)];
73 tempC3
+= tempA1
* B
[(jToCol
+3 ) + (iToRow
)];
74 tempC4
+= tempA1
* B
[(jToCol
+4 ) + (iToRow
)];
75 tempC5
+= tempA1
* B
[(jToCol
+5 ) + (iToRow
)];
76 tempC6
+= tempA1
* B
[(jToCol
+6 ) + (iToRow
)];
77 tempC7
+= tempA1
* B
[(jToCol
+7 ) + (iToRow
)];
78 //tempC8 += tempA1 * B[(jToCol+8 ) + (iToRow+32)];
79 //tempC9 += tempA1 * B[(jToCol+9 ) + (iToRow+32)];
80 //tempC10 += tempA1 * B[(jToCol+10) + (iToRow+32)];
81 //tempC11 += tempA1 * B[(jToCol+11) + (iToRow+32)];
82 //tempC12 += tempA1 * B[(jToCol+12) + (iToRow+32)];
83 //tempC13 += tempA1 * B[(jToCol+13) + (iToRow+32)];
84 //tempC14 += tempA1 * B[(jToCol+14) + (iToRow+32)];
85 //tempC15 += tempA1 * B[(jToCol+15) + (iToRow+32)];
88 //tempC0 += tempA2 * B[(jToCol ) + (iToRow)];
89 //tempC1 += tempA2 * B[(jToCol+1 ) + (iToRow)];
90 //tempC2 += tempA2 * B[(jToCol+2 ) + (iToRow)];
91 //tempC3 += tempA2 * B[(jToCol+3 ) + (iToRow)];
92 //tempC4 += tempA2 * B[(jToCol+4 ) + (iToRow)];
93 //tempC5 += tempA2 * B[(jToCol+5 ) + (iToRow)];
94 //tempC6 += tempA2 * B[(jToCol+6 ) + (iToRow)];
95 //tempC7 += tempA2 * B[(jToCol+7 ) + (iToRow)];
96 //tempC8 += tempA2 * B[(jToCol+8 ) + (iToRow)];
97 //tempC9 += tempA2 * B[(jToCol+9 ) + (iToRow)];
98 //tempC10 += tempA2 * B[(jToCol+10) + (iToRow)];
99 //tempC11 += tempA2 * B[(jToCol+11) + (iToRow)];
100 //tempC12 += tempA2 * B[(jToCol+12) + (iToRow)];
101 //tempC13 += tempA2 * B[(jToCol+13) + (iToRow)];
102 //tempC14 += tempA2 * B[(jToCol+14) + (iToRow)];
103 //tempC15 += tempA2 * B[(jToCol+15) + (iToRow)];
106 //tempC0 += tempA3 * B[(jToCol ) + (iToRow)];
107 //tempC1 += tempA3 * B[(jToCol+1 ) + (iToRow)];
108 //tempC2 += tempA3 * B[(jToCol+2 ) + (iToRow)];
109 //tempC3 += tempA3 * B[(jToCol+3 ) + (iToRow)];
110 //tempC4 += tempA3 * B[(jToCol+4 ) + (iToRow)];
111 //tempC5 += tempA3 * B[(jToCol+5 ) + (iToRow)];
112 //tempC6 += tempA3 * B[(jToCol+6 ) + (iToRow)];
113 //tempC7 += tempA3 * B[(jToCol+7 ) + (iToRow)];
114 //tempC8 += tempA3 * B[(jToCol+8 ) + (iToRow)];
115 //tempC9 += tempA3 * B[(jToCol+9 ) + (iToRow)];
116 //tempC10 += tempA3 * B[(jToCol+10) + (iToRow)];
117 //tempC11 += tempA3 * B[(jToCol+11) + (iToRow)];
118 //tempC12 += tempA3 * B[(jToCol+12) + (iToRow)];
119 //tempC13 += tempA3 * B[(jToCol+13) + (iToRow)];
120 //tempC14 += tempA3 * B[(jToCol+14) + (iToRow)];
121 //tempC15 += tempA3 * B[(jToCol+15) + (iToRow)];
124 //tempC0 += tempA4 * B[(jToCol ) + (iToRow)];
125 //tempC1 += tempA4 * B[(jToCol+1 ) + (iToRow)];
126 //tempC2 += tempA4 * B[(jToCol+2 ) + (iToRow)];
127 //tempC3 += tempA4 * B[(jToCol+3 ) + (iToRow)];
128 //tempC4 += tempA4 * B[(jToCol+4 ) + (iToRow)];
129 //tempC5 += tempA4 * B[(jToCol+5 ) + (iToRow)];
130 //tempC6 += tempA4 * B[(jToCol+6 ) + (iToRow)];
131 //tempC7 += tempA4 * B[(jToCol+7 ) + (iToRow)];
134 //tempC0 += tempA5 * B[(jToCol ) + (iToRow)];
135 //tempC1 += tempA5 * B[(jToCol+1 ) + (iToRow)];
136 //tempC2 += tempA5 * B[(jToCol+2 ) + (iToRow)];
137 //tempC3 += tempA5 * B[(jToCol+3 ) + (iToRow)];
138 //tempC4 += tempA5 * B[(jToCol+4 ) + (iToRow)];
139 //tempC5 += tempA5 * B[(jToCol+5 ) + (iToRow)];
140 //tempC6 += tempA5 * B[(jToCol+6 ) + (iToRow)];
141 //tempC7 += tempA5 * B[(jToCol+7 ) + (iToRow)];
144 //tempC0 += tempA6 * B[(jToCol ) + (iToRow)];
145 //tempC1 += tempA6 * B[(jToCol+1 ) + (iToRow)];
146 //tempC2 += tempA6 * B[(jToCol+2 ) + (iToRow)];
147 //tempC3 += tempA6 * B[(jToCol+3 ) + (iToRow)];
148 //tempC4 += tempA6 * B[(jToCol+4 ) + (iToRow)];
149 //tempC5 += tempA6 * B[(jToCol+5 ) + (iToRow)];
150 //tempC6 += tempA6 * B[(jToCol+6 ) + (iToRow)];
151 //tempC7 += tempA6 * B[(jToCol+7 ) + (iToRow)];
154 //tempC0 += tempA7 * B[(jToCol ) + (iToRow)];
155 //tempC1 += tempA7 * B[(jToCol+1 ) + (iToRow)];
156 //tempC2 += tempA7 * B[(jToCol+2 ) + (iToRow)];
157 //tempC3 += tempA7 * B[(jToCol+3 ) + (iToRow)];
158 //tempC4 += tempA7 * B[(jToCol+4 ) + (iToRow)];
159 //tempC5 += tempA7 * B[(jToCol+5 ) + (iToRow)];
160 //tempC6 += tempA7 * B[(jToCol+6 ) + (iToRow)];
161 //tempC7 += tempA7 * B[(jToCol+7 ) + (iToRow)];
172 //C[j + 8 ] = tempC8 ;
173 //C[j + 9 ] = tempC9 ;
174 //C[j + 10] = tempC10;
175 //C[j + 11] = tempC11;
176 //C[j + 12] = tempC12;
177 //C[j + 13] = tempC13;
178 //C[j + 14] = tempC14;
179 //C[j + 15] = tempC15;