24小时热门版块排行榜    

CyRhmU.jpeg
查看: 397  |  回复: 0

lisajelly

新虫 (初入文坛)

[求助] 【求助】在MATLAB中通过MEX调用BLAS

本人正在学习在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
谁能告诉我是为什么啊?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

找到一些相关的精华帖子,希望有用哦~

科研从小木虫开始,人人为我,我为人人
相关版块跳转 我要订阅楼主 lisajelly 的主题更新
信息提示
请填处理意见