Wrong result when using BLAS dot product routine (DDOT) from a MEX file
Ältere Kommentare anzeigen
Hello,
I am trying to call some BLAS routines from MEX code. First, I am trying to compute a scalar product with the fuction DDOT.
Here is my MEX file:
#include "mex.h"
#include "blas.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
double *A, *B, C;
int m, one=1;
A = mxGetPr(prhs[0]);
B = mxGetPr(prhs[1]);
m = mxGetM(prhs[0]); /* number of rows */
/* Pass all arguments to Fortran by reference */
C = (double) ddot(&m,A,&one,B,&one);
/* create output */
plhs[0] = mxCreateDoubleScalar(C);
return;
}
The compilation returns no error. When using it, though, I do not get the expected result:
>> a = ones(2,1);
>> b = ones(2,1);
>> mydot(a,b)
ans =
0
Am I calling DDOT inappropriately?
-- H. G.
1 Kommentar
James Tursa
am 4 Jul. 2015
I would advise using mxGetNumberOfElements instead of mxGetM, to make the routine a bit more robust for row vs column vector inputs.
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu Matrix Indexing finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!