}
void matmul(int64_t m, int64_t n) {
- #if defined(_AIX) || defined(__BIG_ENDIAN__)
- mnpack(0, m, 0, n);
- #else
- const int64_t mc = 64;
- const int64_t kc = 64;
+ int64_t mc = 64;
int64_t nc = 64;
+ int64_t kc = 64;
+ int64_t n_chunk = 64;
+ #if defined(_AIX) || defined(__BIG_ENDIAN__)
+ mc = 32;
+ nc = 32;
+ kc = 32;
+ n_chunk = 32
+ #endif
int64_t n_aligned = 0;
- if (n % 64 == 0) {
+ if (n % n_chunk == 0) {
n_aligned = n;
} else if (n == 4) {
n_aligned = 4;
- } else if (n < 64) {
+ } else if (n < n_chunk) {
n_aligned = (n / 8) * 8;
} else {
- n_aligned = (n / 64) * 64;
+ n_aligned = (n / n_chunk) * n_chunk;
}
if (n_aligned > 0) {
- if (n_aligned % 64 == 0) nc = 64;
+ if (n_aligned % n_chunk == 0) nc = n_chunk;
else if (n_aligned == n) nc = n;
else if (n_aligned % 32 == 0) nc = 32;
else if (n_aligned % 24 == 0) nc = 24;
} else {
mnpack(0, m, 0, n);
}
- #endif
}
private:
}
void matmul(int64_t m, int64_t n) {
+ int64_t mc = 256;
+ int64_t nc = 256;
+ int64_t kc = 256;
#if defined(_AIX) || defined(__BIG_ENDIAN__)
- mnpack(0, m, 0, n);
- #else
- int64_t mc = 256; int64_t nc = 256; int64_t kc = 256;
+ mc = 128;
+ nc = 128;
+ kc = 128;
+ #endif
if (m % mc == 0 && n % nc == 0 && k % kc == 0) {
matmul_tiled(m, n, mc, nc, kc);
} else {
mnpack(0, m, 0, n);
}
- #endif
}
private: