Hello,
I'm trying to test the function cdgemm that I found here: http://www.netlib.org/clapack/cblas/dgemm.c
I've left the function completely unchanged.
I have the following main function here:
Code:
int main(){
double *A, *B, *C;
int m, n, k, i, j;
integer *m2,*n2,*k2;
double alpha, beta;
printf ("\n This example computes real matrix C=alpha*A*B+beta*C using \n"
" Intel® MKL function dgemm, where A, B, and C are matrices and \n"
" alpha and beta are double precision scalars\n\n");
m = 2000, k = 200, n = 1000;
m2 = (integer *) m;
n2 = (integer *) n;
k2 = (integer *) k;
printf (" Initializing data for matrix multiplication C=A*B for matrix \n"
" A(%ix%i) and matrix B(%ix%i)\n\n", m, k, k, n);
alpha = 1.0; beta = 0.0;
printf (" Allocating memory for matrices aligned on 64-byte boundary for better \n"
" performance \n\n");
A = (double *) malloc( m*k*sizeof( double ));
B = (double *) malloc( k*n*sizeof( double ));
C = (double *) malloc( m*n*sizeof( double ));
char *a = (char *) 'N';
char *b = (char *) 'N';
if (A == NULL || B == NULL || C == NULL) {
printf( "\n ERROR: Can't allocate memory for matrices. Aborting... \n\n");
free(A);
free(B);
free(C);
return 1;
}
printf (" Intializing matrix data \n\n");
for (i = 0; i < (m*k); i++) {
A[i] = (double)(i+1);
}
for (i = 0; i < (k*n); i++) {
B[i] = (double)(-i-1);
}
for (i = 0; i < (m*n); i++) {
C[i] = 0.0;
}
printf (" Computing matrix product using Intel® MKL dgemm function via CBLAS interface \n\n");
cdgemm(a, b, m2, n2, k2, alpha, A, k2, B, n2, beta, C, n2);
printf ("\n Computations completed.\n\n");
printf (" Top left corner of matrix A: \n");
for (i=0; i<min(m,6); i++) {
for (j=0; j<min(k,6); j++) {
printf ("%12.0f", A[j+i*k]);
}
printf ("\n");
}
printf ("\n Top left corner of matrix B: \n");
for (i=0; i<min(k,6); i++) {
for (j=0; j<min(n,6); j++) {
printf ("%12.0f", B[j+i*n]);
}
printf ("\n");
}
printf ("\n Top left corner of matrix C: \n");
for (i=0; i<min(m,6); i++) {
for (j=0; j<min(n,6); j++) {
printf ("%12.5G", C[j+i*n]);
}
printf ("\n");
}
printf ("\n Deallocating memory \n\n");
free(A);
free(B);
free(C);
printf (" Example completed. \n\n");
return 0;
}
I get an error : cannot convert parameter 6 from 'double' to 'doublereal *' referring to alpha and I'm guessing it's going to complain about beta as well once I resolve this one.
Can anyone perhaps let me know how to convert from double to doublereal*?
I've tried a similar approach as I have with m2,n2 and k2, meaning:
Code:
doublereal alpha2=(doublereal *) alpha;
and other variations of this, but none of them worked.
Any help will be greatly appreciated.
Thank you in advance.