| 181 | |
| 182 | template <> |
| 183 | void transpose( |
| 184 | const float* src, float* dst, size_t m, size_t n, ptrdiff_t lds, |
| 185 | ptrdiff_t ldd) { |
| 186 | if (lds == -1) { |
| 187 | lds = n; |
| 188 | } |
| 189 | if (ldd == -1) { |
| 190 | ldd = m; |
| 191 | } |
| 192 | |
| 193 | for (size_t is = 0; is < n; is += 16) { |
| 194 | for (size_t js = 0; js < m; js += 16) { |
| 195 | auto ie = std::min(is + 16, n), je = std::min(js + 16, m), i = is; |
| 196 | for (; i + 4 <= ie; i += 4) { |
| 197 | auto j = js; |
| 198 | for (; j + 4 <= je; j += 4) { |
| 199 | transpose4x4_sse(src + j * lds + i, dst + i * ldd + j, lds, ldd); |
| 200 | } |
| 201 | if (j < je) { |
| 202 | transpose_naive( |
| 203 | src + j * lds + i, dst + i * ldd + j, lds, ldd, 4, je - j); |
| 204 | } |
| 205 | } |
| 206 | if (i < ie) { |
| 207 | transpose_naive( |
| 208 | src + js * lds + i, dst + i * ldd + js, lds, ldd, ie - i, |
| 209 | je - js); |
| 210 | } |
| 211 | } |
| 212 | } |
| 213 | } |
| 214 | |
| 215 | template <> |
| 216 | void transpose_knc2nsck( |
no test coverage detected