Wrong result when using BLAS dot product routine (DDOT) from a MEX file
이전 댓글 표시
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
James Tursa
2015년 7월 4일
I would advise using mxGetNumberOfElements instead of mxGetM, to make the routine a bit more robust for row vs column vector inputs.
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!