#include #include "mkl.h" void nsDgemm(double *A,double *B,double *C, int m1, int n1, int m2, int n2); void print_arr(int m, int n, char * name, double* array); void init_arr(int m, int n, double* a); int main() { double *A, *B, *C; int i, j, m1, n1, m2, n2; m1 = 3; n1 = 1; m2 = 1; n2 = 1; A = (double*) malloc( m1 * n1 * sizeof(double) ); B = (double*) malloc( m2 * n2 * sizeof(double) ); C = (double*) malloc( m1 * n2 * sizeof(double) ); init_arr(m1, n1, A); init_arr(m2, n2, B); nsDgemm(A, B, C, m1, n1, m2, n2); //bug in code, not sending in correct parameters it seems print_arr(m1, n1, "A", A); print_arr(m2, n2, "B", B); print_arr(m1, n2, "C", C); } //cblas_dgemm wrapper void nsDgemm(double *A,double *B,double *C, int m1, int n1, int m2, int n2) { double alpha = 1.0, beta = 0.0; //int incx = 1; //int incy = N; printf("\n"); printf("%i\n",m1); printf("%i\n",n1); printf("%i\n",m2); printf("%i\n",n2); print_arr(m1, n1, "A first time", A); print_arr(m2, n2, "B first time", B); cblas_dgemm(CblasRowMajor,CblasNoTrans,CblasNoTrans,m1,n2,m2,alpha,A,m1,B,m2,beta,C,m1); } //initialize array with garbage data void init_arr(int m, int n, double* a) { int i, j; for (i = 0 ; i < m ; i++) for (j = 0 ; j < n ; j++) a[i * n + j] = (i + j)%10 + 1; } //print array to std out void print_arr(int m, int n, char * name, double* array) { int i, j; printf("\n%s\n",name); for (i = 0 ; i < m ; i++) { for (j = 0 ; j < n ; j++) { printf("%g\t",array[i * n + j]); } printf("\n"); } }