找回密码
 注册
Simdroid-非首页
查看: 363|回复: 3

如何提高Matlab C++的运行效率?

[复制链接]
发表于 2006-3-15 09:28:48 | 显示全部楼层 |阅读模式 来自 辽宁沈阳
最近在搞一些Matlab6.5与VC6.0的混合编程,在VC环境中用到Matlab C++数学库的相关的一些函数.
通过对比我发现,解决同样的问题,在VC中调用Matlab C++数学库函数所需要的运行时间,比调用纯C函数时间要长.
更不可思议的是,同一样个算法,Matlab环境下的速度竟然比VC下调用Matlab C++数学库速度还要快.
请教各路高手,如何提高Matlab C++数学库的运行速度啊?至少它的运行效率应该和Matlab环境下的对应函数相当吧?
发表于 2006-3-15 12:05:11 | 显示全部楼层 来自 美国

Re:如何提高Matlab C++的运行效率?

Simdroid开发平台
其实严格的说MATLAB6.5中并不存在一个真正的C++数学函数库,C++形式的函数都是调用C的数学函数的,只是对C函数的一个封装。举例如下:
这是在MATLAB安装目录下\extern\include\cpp\mlmif.h中的代码
  1. inline mwArray sin(const mwArray &in1)
  2. {
  3.     int nrhs = 0;
  4.     int nlhs = 1;
  5.     MatlabMatrix *plhs[1];
  6.     plhs[0] = NULL;
  7.     MatlabMatrix *prhs[1];
  8.     if (!in1.IsDIN()) {
  9.       prhs[nrhs++] = in1.GetData();
  10.     }
  11.     mlxSin(nlhs, plhs, nrhs, prhs);
  12.     return plhs[0];
  13. }
复制代码
由此可见调用“C++的数学函数库”比直接调用C的数学函数要慢是正常的。

至于在matlab环境下m代码的执行速度要比调用C++数学库要快的问题就不得而知了,m代码中好多函数都是内置的,这个内置可以肯定的就是不是C或C++的数学函数库,至于内置在哪里,我也很好奇。再者m代码有一些特别的速度优化方法是数学函数库所没有的,至于细节就搞不清楚了。你可以试一下调用C的数学函数库和m代码比较一下。另外,不知道你是由m代码编译得到c++程序与VC进行混编还是直接调用数学函数库,如果算法不复杂的话还是自己直接调用数学函数库比较快些。

评分

1

查看全部评分

发表于 2006-3-15 22:03:04 | 显示全部楼层 来自 新加坡

Re:如何提高Matlab C++的运行效率?

luzhenbo wrote:
最近在搞一些Matlab6.5与VC6.0的混合编程,在VC环境中用到Matlab C++数学库的相关的一些函数.
通过对比我发现,解决同样的问题,在VC中调用Matlab C++数学库函数所需要的运行时间,比调用纯C函数时间要长.

是标准C库还是matlab提供的C语言界面的库函数?执行时间是指算法的执行时间呢还是也包括matlab C++库的初始化时间?另外,你提到的时间的差别在那个数量级?
更不可思议的是,同一样个算法,Matlab环境下的速度竟然比VC下调用Matlab C++数学库速度还要快
请教各路高手,如何提高Matlab C++数学库的运行速度啊?至少它的运行效率应该和Matlab环境下的对应函数相当吧?

同上面的问题,这里调用matlab C++库的时间是否包括库的初始化时间?总体运行时间以及差别的数量级是多少?新版matlab的一些内部函数调用高度优化过的BLAS库,不知到其C++库函数是否也是调用同样的BLAS,如果不是的话,那么有可能使用其C++ math库会显得慢。
 楼主| 发表于 2006-3-16 08:55:22 | 显示全部楼层 来自 辽宁沈阳

Re:如何提高Matlab C++的运行效率?

以上2位高手,上面的贴子可能没说清楚,我举个例子说吧:
我在VC6.0+Matlab6.5+win2000环境下,试图解一个正定的线性方程组,
先用C语言常用算法中最小二乘方法解方程组,再直接调用Matlab C++库函数解同样的方程组,正如SCIE所示C++形式的函数都是调用C的数学函数的,是对C函数的一个封装,因此核心算法应该都是同一算法,可是除去初始化的时间,仅对解方程函数循环10000次,Matlab C++库函数所需要运行时间是C函数的三倍.另外,同样是上面的解方组问题,VC下调用Matlab C++数学库所需要的时间是Matlab环境下的二倍,这里也不包括初始化时间.
我想Matlab C++数学库之所以耗时的根本原因是其函数内部的局部变量的初始化和相关类型判断上了.因为mwArray类型是一个通用型的矩阵类型,相当于C++的一个类模板,模板必须适应不用的数据类型,且还要做一些相关接口转换,从而可以调用更底层的C函数.以上是我的个人之见,期待研友高见!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-28 10:27 , Processed in 0.040980 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表