s*******n 发帖数: 101 | 1 我的一个M文件,有多层的for循环,所以用Matlab 6.0的C++ math lib重写了一遍,编
译通过,结果也正确,但是速度比在Matlab里直接执行M文件还慢。这正常吗?编译的
时候需要加什么特别选项吗?我用的所有数据类型都是mwArray,这样会不会导致速度
很慢?谢谢。 |
T*********e 发帖数: 39815 | 2 这个正常, 尽管你是这么编译的,但生成的代码并不象你用纯粹的C写出来并用C编译器
编译出来的那么有效
里面的瓤还是matlab的,matlab本身处理循环就是很慢
【在 s*******n 的大作中提到】 : 我的一个M文件,有多层的for循环,所以用Matlab 6.0的C++ math lib重写了一遍,编 : 译通过,结果也正确,但是速度比在Matlab里直接执行M文件还慢。这正常吗?编译的 : 时候需要加什么特别选项吗?我用的所有数据类型都是mwArray,这样会不会导致速度 : 很慢?谢谢。
|
j**u 发帖数: 6059 | 3
译器
我从来不觉得混编是个好办法,小问题matlab简单方便,大问题还是直接上C比较好。
如果一定要混编,原来看到一本书上说可以先把matlab的一些函数搞成dll,然后在C
里面调用,这样循环也快具体的矩阵处理也快了。但是具体怎么搞,我也不知道也不
关心。现在的C有很多程序库对矩阵的处理非常方便高效,如果C比较熟悉,根本不用
混编也可以做到编程效率很高。
【在 T*********e 的大作中提到】 : 这个正常, 尽管你是这么编译的,但生成的代码并不象你用纯粹的C写出来并用C编译器 : 编译出来的那么有效 : 里面的瓤还是matlab的,matlab本身处理循环就是很慢
|
T*********e 发帖数: 39815 | 4 用C写核心代码,然后用matlab的mex编写接口程序, 生成dll, 然后从matlab里面调用
我个人觉得, 这种方法只适合于那种比较大的程序, 各个功能模块是用不同代码编写
的,需要快速整合在一起, 这样比较省事
如果追求代码运行速度,还是直接用C写比较好
【在 j**u 的大作中提到】 : : 译器 : 我从来不觉得混编是个好办法,小问题matlab简单方便,大问题还是直接上C比较好。 : 如果一定要混编,原来看到一本书上说可以先把matlab的一些函数搞成dll,然后在C : 里面调用,这样循环也快具体的矩阵处理也快了。但是具体怎么搞,我也不知道也不 : 关心。现在的C有很多程序库对矩阵的处理非常方便高效,如果C比较熟悉,根本不用 : 混编也可以做到编程效率很高。
|
s*******n 发帖数: 101 | 5 多谢斑竹奖励.
用纯C写实在比较麻烦,很多函数都要自己编。斑竹能推荐一个比较全而且free的C函数
库吗?我看到网上说Matlab6.5之后M文件的运行速度快了很多,for循环几乎没什么影
响。只要向量化做得好,几乎可以达到和C差不多的速度,不知是不是这样(因为我还没
用过纯C的程序作过比较)。
【在 j**u 的大作中提到】 : : 译器 : 我从来不觉得混编是个好办法,小问题matlab简单方便,大问题还是直接上C比较好。 : 如果一定要混编,原来看到一本书上说可以先把matlab的一些函数搞成dll,然后在C : 里面调用,这样循环也快具体的矩阵处理也快了。但是具体怎么搞,我也不知道也不 : 关心。现在的C有很多程序库对矩阵的处理非常方便高效,如果C比较熟悉,根本不用 : 混编也可以做到编程效率很高。
|
T*********e 发帖数: 39815 | 6 matlab 6.5之后做了很多优化, 循环速度的确比以前快了,但是还是比C慢的多
我的建议是能把循环变成矩阵向量处理的,尽量用矩阵向量操作, 大部分情况都可以这
么做
好。
在C
【在 s*******n 的大作中提到】 : 多谢斑竹奖励. : 用纯C写实在比较麻烦,很多函数都要自己编。斑竹能推荐一个比较全而且free的C函数 : 库吗?我看到网上说Matlab6.5之后M文件的运行速度快了很多,for循环几乎没什么影 : 响。只要向量化做得好,几乎可以达到和C差不多的速度,不知是不是这样(因为我还没 : 用过纯C的程序作过比较)。
|
j**u 发帖数: 6059 | 7 GSL
日常用到的都包括了,非常好用。
【在 s*******n 的大作中提到】 : 多谢斑竹奖励. : 用纯C写实在比较麻烦,很多函数都要自己编。斑竹能推荐一个比较全而且free的C函数 : 库吗?我看到网上说Matlab6.5之后M文件的运行速度快了很多,for循环几乎没什么影 : 响。只要向量化做得好,几乎可以达到和C差不多的速度,不知是不是这样(因为我还没 : 用过纯C的程序作过比较)。
|
p*****e 发帖数: 310 | 8 re!
open source的c lib: GSL
free的c++ lib: boost/ublas
这是我n长时间来选定的,呵呵
函数
么影
还没
【在 j**u 的大作中提到】 : GSL : 日常用到的都包括了,非常好用。
|
j**u 发帖数: 6059 | 9 我对C++不太熟练,一直有个疑问,为什么不在C++里面用gsl?难倒C++调用C函数库
有困难吗?
【在 p*****e 的大作中提到】 : re! : open source的c lib: GSL : free的c++ lib: boost/ublas : 这是我n长时间来选定的,呵呵 : : 函数 : 么影 : 还没
|
s*****l 发帖数: 2041 | 10 just found this link:
http://www.gnu.org/software/gsl/
【在 p*****e 的大作中提到】 : re! : open source的c lib: GSL : free的c++ lib: boost/ublas : 这是我n长时间来选定的,呵呵 : : 函数 : 么影 : 还没
|
|
|
p*****e 发帖数: 310 | 11 主要是我做的东西不能open source,没法用gsl。其实我一开始用的就是gsl,它功能
很全,挺不错。
后来我找到了boost/ublas,boost库是c++标准委员会的一些成员和其他志愿者做的,
可以算是准c++标准库,说不定以后c++自带的矩阵库就用ublas了。
用c++(ublas)的最大好处是:
1. 不用担心内存管理,动态数组用vector就可以搞定。
2. 操作符重载等等,A = B + C + D 这样写起来很直观,用gsl的话就要写好几个函数。
3. 流输出方便(输入没试过)
目前ublas还是个基本的blas,gsl中的很多功能还没实现,不过对于我的应用已经足够
了。目前我只编了自己的两个函数:FFT(封装了前面朋友提到的kiss FFT)和
correlation。
【在 j**u 的大作中提到】 : 我对C++不太熟练,一直有个疑问,为什么不在C++里面用gsl?难倒C++调用C函数库 : 有困难吗?
|
j**u 发帖数: 6059 | 12 不错。其实我前段时间还想好好用用C++,以后好找工作。结果人懒,就耽搁下来了。
有空就试试你说得这个库。
数。
【在 p*****e 的大作中提到】 : 主要是我做的东西不能open source,没法用gsl。其实我一开始用的就是gsl,它功能 : 很全,挺不错。 : 后来我找到了boost/ublas,boost库是c++标准委员会的一些成员和其他志愿者做的, : 可以算是准c++标准库,说不定以后c++自带的矩阵库就用ublas了。 : 用c++(ublas)的最大好处是: : 1. 不用担心内存管理,动态数组用vector就可以搞定。 : 2. 操作符重载等等,A = B + C + D 这样写起来很直观,用gsl的话就要写好几个函数。 : 3. 流输出方便(输入没试过) : 目前ublas还是个基本的blas,gsl中的很多功能还没实现,不过对于我的应用已经足够 : 了。目前我只编了自己的两个函数:FFT(封装了前面朋友提到的kiss FFT)和
|
T*********e 发帖数: 39815 | 13 C++如果你不用,学了也忘,呵呵
功能
的,
足够
【在 j**u 的大作中提到】 : 不错。其实我前段时间还想好好用用C++,以后好找工作。结果人懒,就耽搁下来了。 : 有空就试试你说得这个库。 : : 数。
|
j**u 发帖数: 6059 | 14 其实我已经忘过一次了,呵呵。
【在 T*********e 的大作中提到】 : C++如果你不用,学了也忘,呵呵 : : 功能 : 的, : 足够
|
T*********e 发帖数: 39815 | 15 me too
【在 j**u 的大作中提到】 : 其实我已经忘过一次了,呵呵。
|
s*******n 发帖数: 101 | 16 C++和C相比,效率差得多吗?操作符重载和函数模板之类的肯定会影响一些效率吧
数。
【在 p*****e 的大作中提到】 : 主要是我做的东西不能open source,没法用gsl。其实我一开始用的就是gsl,它功能 : 很全,挺不错。 : 后来我找到了boost/ublas,boost库是c++标准委员会的一些成员和其他志愿者做的, : 可以算是准c++标准库,说不定以后c++自带的矩阵库就用ublas了。 : 用c++(ublas)的最大好处是: : 1. 不用担心内存管理,动态数组用vector就可以搞定。 : 2. 操作符重载等等,A = B + C + D 这样写起来很直观,用gsl的话就要写好几个函数。 : 3. 流输出方便(输入没试过) : 目前ublas还是个基本的blas,gsl中的很多功能还没实现,不过对于我的应用已经足够 : 了。目前我只编了自己的两个函数:FFT(封装了前面朋友提到的kiss FFT)和
|
p*****e 发帖数: 310 | 17 感觉上应该可能差一些,不过如果不是做纯数值计算程序的话应该可以接受。用c++的
话可以节省开发时间和维护成本,总体上对一般工程计算我认为还是不错的
功能
的,
足够
【在 s*******n 的大作中提到】 : C++和C相比,效率差得多吗?操作符重载和函数模板之类的肯定会影响一些效率吧 : : 数。
|
j**u 发帖数: 6059 | 18
是要差一点。原来看过一个paper,说现在C++的并行计算效率提高很快,已经和
C差不多了。
【在 s*******n 的大作中提到】 : C++和C相比,效率差得多吗?操作符重载和函数模板之类的肯定会影响一些效率吧 : : 数。
|