#include // for malloc(), free(), abort() #include // for printf() #include // for size_t, ptrdiff_t #include // for typedef bool #include // for nan() //-- (literal) constants for DGEMM --------------------------------------------- #ifndef DGEMM_MC #define DGEMM_MC 4 #endif #ifndef DGEMM_NC #define DGEMM_NC 6 #endif #ifndef DGEMM_KC #define DGEMM_KC 5 #endif #ifndef DGEMM_MR #define DGEMM_MR 2 #endif #ifndef DGEMM_NR #define DGEMM_NR 3 #endif #if (DGEMM_MC % DGEMM_MR != 0) #error "DGEMM_MC must be a multiple of DEGMM_MR." #endif #if (DGEMM_NC % DGEMM_NR != 0) #error "DGEMM_NC must be a multiple of DEGMM_NR." #endif //-- packing blocks of A ------------------------------------------------------- void pack_A(size_t mc, size_t kc, const double *A, ptrdiff_t incRowA, ptrdiff_t incColA, double *A_) { size_t mb = mc / DGEMM_MR; // pack whole panels of A for (size_t ib=0; ib