I have two questions about sgels example:
(1) why need to call sgels twice?
/* Query and allocate the optimal workspace */
lwork = -1;
sgels( "No transpose", &m, &n, &nrhs, a, &lda, b, &ldb, &wkopt, &lwork, &info );
lwork = (MKL_INT)wkopt;
work = (float*)malloc( lwork*sizeof(float) );
/* Solve the equations A*X = B */
sgels( "No transpose", &m, &n, &nrhs, a, &lda, b, &ldb, work, &lwork, &info );
(2) where to decide row-major matrix or column -major matrix?
Thank you very much!
The first call, with lwork already equal to -1, is a "workspace query". The absurd value of -1 (absurd for a matrix size) tells SGEMM, "Don't do any calculations, just tell me how much workspace is going to be needed. I'll allocate the space and then call you again."
The routine you are calling is a Fortran 77 routine. All matrices must be column major. If you want to use other formats, there are other MKL routines for that, as you can see in the MKL reference manual.