#include <stddef.h> #include <stdio.h> #include <stdlib.h> void initGeMatrix(size_t m, size_t n, double *A, ptrdiff_t incRowA, ptrdiff_t incColA) { for (size_t i=0; i<m; ++i) { for (size_t j=0; j<n; ++j) { A[i*incRowA+j*incColA] = i*n + j + 1; } } } void printGeMatrix(size_t m, size_t n, const double *A, ptrdiff_t incRowA, ptrdiff_t incColA) { for (size_t i=0; i<m; ++i) { for (size_t j=0; j<n; ++j) { printf("%10.4lf ", A[i*incRowA+j*incColA]); } printf("\n"); } printf("\n"); } #ifndef DGEMM_KC #define DGEMM_KC 8 #endif #ifndef DGEMM_NC #define DGEMM_NC 10 #endif #ifndef DGEMM_NR #define DGEMM_NR 5 #endif int main() { size_t k = 7; size_t n = 8; double *B = malloc(k*n*sizeof(*B)); ptrdiff_t incRowB = 1; ptrdiff_t incColB = k; double *p = malloc(DGEMM_KC*DGEMM_NC*sizeof(*p)); initGeMatrix(k, n, B, incRowB, incColB); printGeMatrix(k, n, B, incRowB, incColB); printGeMatrix(1, DGEMM_KC*DGEMM_NC, p, 1, 1); free(p); free(B); } |