Wrong result when using BLAS dot product routine (DDOT) from a MEX file
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
José Goulart
am 3 Jul. 2015
Kommentiert: José Goulart
am 5 Jul. 2015
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
Titus Edelhofer
am 3 Jul. 2015
Hi,
you need to change the variable definition of m and one and use two variables for "one":
ptrdiff_t m, one1 = 1, one2 = 1;
C = (double) ddot(&m,A,&one1,B,&one2);
Then it works.
Titus
2 Kommentare
James Tursa
am 4 Jul. 2015
Bearbeitet: James Tursa
am 4 Jul. 2015
mwSignedIndex is usually what is recommended for the integer arguments of BLAS and LAPACK functions for the libraries that MATLAB ships with ... at least that is what is used in the example code. I haven't scanned through the header files to see if this always reduces to ptrdiff_t or not.
Using two different variables for "one" should not be necessary ... all of the arguments are inputs that should be treated as read-only by DDOT.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!