本人正在学习在MATLAB中调用BLAS,好不容易把MATLAB中的一个dgemm的例子编译通了,但是在MATLAB中使用这个函数时,不论输入是什么,输出都是0,很郁闷。请各位大牛多多指点!
以下是我的MEX文件,文件名是“test_MKL.for”, 用FORTRAN写的:
subroutine mexFunction(nlhs, plhs, nrhs, prhs)
integer*8 plhs(*), prhs(*)
integer nlhs, nrhs
integer*8 mxcreatedoublematrix, mxgetpr
integer mxgetm, mxgetn
integer m, n, p
integer*8 A, B, C
real*8 one, zero, ar, br
character ch1, ch2
ch1 = 'N'
ch2 = 'N'
one = 1.0
zero = 0.0
A = mxgetpr(prhs(1))
B = mxgetpr(prhs(2))
m = mxgetm(prhs(1))
p = mxgetn(prhs(1))
n = mxgetn(prhs(2))
plhs(1) = mxcreatedoublematrix(m, n, 0.0)
C = mxgetpr(plhs(1))
call mxcopyptrtoreal8(A, ar, 1)
call mxcopyptrtoreal8(B, br, 1)
call dgemm (ch1, ch2, m, n, p, one, %val(A), m,
+ %val(B), p, zero, %val(C), m)
return
end
我在mexopts.bat中添加了MKL相应的库函数路径之后,对上面的例子进行了编译,最终生成了“test_MKL.mexw64”的MEX文件(我用的是win7 64)。但是当我用下面的例子对上述函数进行测试时,就出问题了。没有报错,但不管输入是什么,输出一直是0。
以下是我在MATLAB中进行测试时的代码:
M=2;
N=3;
K=4;
a=1.0;
b=0.0;
X=ones(N,K)*10.0;
Y=ones(K,M)*20.0;
Z=zeros(N,M);
test_MKL('N','N',N,M,K,a,X,N,Y,K,b,Z,N)
输出结果是:
ans =
0
谁能告诉我是为什么啊?