由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Faculty版 - 一个Matlab/C++相关的问题
相关主题
请推荐一款好的电脑吧, 主要用于计算,Fortran/MatLab, (转载)新款5K iMac GPU性能至少是2016款MacBook Pro的两倍
劝你们别跳码农这个坑请教:如何测试什么形式的函数更快?
请问编译时怎么把自己的C/C++代码链接到一个库如何在matlab中计录flops的数量
菌斑这么多IT WSN,按说应该能看懂神威的,咋都是些外行在咋呼呢求助:SPICE-like Matlab code
前一篇帖子小数点错了一位,汗matlab 中记录 flops的数量
相关话题的讨论汇总
话题: matlab话题: fft话题: fortran话题: c++话题: gpu
进入Faculty版参与讨论
1 (共1页)
n*******l
发帖数: 2911
1
似乎看不到哪个版面更合适,就问问众位经验丰富的牛牛们吧。
现在我在做一个耗时间非常长的计算,用谱方法解微分方程,主要就是
重复的FFT。现在我用Matlab,在我的iMac上算一次要用好几个礼拜。
这要是增加一下规模的话,算一次就是好几个月了,受不了。而且学校
太烂,也没有像样的有足够内存的并行机可用。
据说c++要比Matlab快一点儿,但是我想问的是,按说Matlab的向量运
算和并行处理已经优化得很好了,反正是要调用一些已经优化好了的库函
数,C++真的会比Matlab强一点儿么?强在哪儿呢?
a**********y
发帖数: 2367
2
并行计算?are you sure 你使用了matlab的并行计算吗,这个可不是自动的,是需要
编程解决的,matlab的并行很呆瓜,但对于一些固定的计算也可以将就一下
大型的并行计算fft很成熟了吧,并行效率很高,这个据说是最快的,但是你得会用http://www.fftw.org/
l********n
发帖数: 804
3
matlab 最新的版本应该fft是自动多核运算的
不知道你说的并行运算是不是这个
matlab慢的是for loop
你做time domain pseudospectral method?
估计也是要用for loop吧
C应该会快至少2-3倍
但是你这个要算几个星期太夸张了
可以考虑加GPU
我试过可以再快7-8倍
n*******l
发帖数: 2911
4
Matlab的FFT确实是自动并行多核运行,反正我的iMac的四个核是
基本全速运行。
我现在是在一个512x512的网格上用一个semi-implicit scheme
解一个parabolic equation, 时间步长是10^{-6}, 每步要几次FFT,
时间从0到七八十的样子就要算三个礼拜了。这里面用了个while
循环以及几个if判断,也许时间花在了while循环上?
我把网格变成1024x1024时,花费时间基本上是x4,所以时间似乎
是主要花费在FFT上。
我对于这样规模的问题,在四核iMac上到底应该花费多少时间没有什
么概念。已经多年没有进行严肃的计算了。至于GPU计算,受GPU内
存的限制,对于网格的大小限制也比较大。我看到有文章里说6GB内
存的GPU只能处理128x128x128的三维网格,那就是1024x1024的
二维网格呗?我还想尝试一下2048x2048甚至更大点的网格,GPU可
能有困难。

【在 l********n 的大作中提到】
: matlab 最新的版本应该fft是自动多核运算的
: 不知道你说的并行运算是不是这个
: matlab慢的是for loop
: 你做time domain pseudospectral method?
: 估计也是要用for loop吧
: C应该会快至少2-3倍
: 但是你这个要算几个星期太夸张了
: 可以考虑加GPU
: 我试过可以再快7-8倍

p*****u
发帖数: 225
5
新版本的matlab(好像是2010以后)fft是自动多核的,如果你的瓶颈是fft用C写不会
快多少,可以用profiler看不同函数运行了多长时间和次数。用GPU能块,不过你所有
的东西都要在GPU上实现,不然在GPU内存和系统内存间互相倒数据也会很费时间,特别
是数据很大的时候。

【在 n*******l 的大作中提到】
: 似乎看不到哪个版面更合适,就问问众位经验丰富的牛牛们吧。
: 现在我在做一个耗时间非常长的计算,用谱方法解微分方程,主要就是
: 重复的FFT。现在我用Matlab,在我的iMac上算一次要用好几个礼拜。
: 这要是增加一下规模的话,算一次就是好几个月了,受不了。而且学校
: 太烂,也没有像样的有足够内存的并行机可用。
: 据说c++要比Matlab快一点儿,但是我想问的是,按说Matlab的向量运
: 算和并行处理已经优化得很好了,反正是要调用一些已经优化好了的库函
: 数,C++真的会比Matlab强一点儿么?强在哪儿呢?

w*x
发帖数: 518
6
瞎说两句……
MATLAB如果用了大量LOOP会很慢,所以可以用C来优化(不一定C++,一般C就够了……
优化瓶颈即可)。
推荐些mex code来把有循环的函数重写一遍:
http://www.mathworks.com/help/matlab/ref/mex.html
当然,也可以用C先compile成dll然后调用。这个方法的好处是同样的C代码可以被别的
除了MATLAB以外的语言使用,比如PYTHON……
最后,推荐用profiling找一下瓶颈。

【在 n*******l 的大作中提到】
: 似乎看不到哪个版面更合适,就问问众位经验丰富的牛牛们吧。
: 现在我在做一个耗时间非常长的计算,用谱方法解微分方程,主要就是
: 重复的FFT。现在我用Matlab,在我的iMac上算一次要用好几个礼拜。
: 这要是增加一下规模的话,算一次就是好几个月了,受不了。而且学校
: 太烂,也没有像样的有足够内存的并行机可用。
: 据说c++要比Matlab快一点儿,但是我想问的是,按说Matlab的向量运
: 算和并行处理已经优化得很好了,反正是要调用一些已经优化好了的库函
: 数,C++真的会比Matlab强一点儿么?强在哪儿呢?

n*******l
发帖数: 2911
7
很有道理。多谢。
我刚刚用profile看了看,2/3的时间是fft和ifft。估计那些部分是没办法了,看看
其他部分能不能省点儿是点儿。
我的程序总共就一个400来行,一层循环,就是每个时间步长计算若干次FFT 和 IFFT,
让我看看能不能把IFFT省掉。

【在 w*x 的大作中提到】
: 瞎说两句……
: MATLAB如果用了大量LOOP会很慢,所以可以用C来优化(不一定C++,一般C就够了……
: 优化瓶颈即可)。
: 推荐些mex code来把有循环的函数重写一遍:
: http://www.mathworks.com/help/matlab/ref/mex.html
: 当然,也可以用C先compile成dll然后调用。这个方法的好处是同样的C代码可以被别的
: 除了MATLAB以外的语言使用,比如PYTHON……
: 最后,推荐用profiling找一下瓶颈。

T*****u
发帖数: 7103
8
matlab提供分析功能,你可以看看时间都花在哪里。
w*******U
发帖数: 256
9
it could be better to use fortran or c to call fftw. this should be much
faster than matlab. fortran or c generates binary code whereas matlab runs
line by line and is pretty slow for doing loops.

【在 n*******l 的大作中提到】
: 似乎看不到哪个版面更合适,就问问众位经验丰富的牛牛们吧。
: 现在我在做一个耗时间非常长的计算,用谱方法解微分方程,主要就是
: 重复的FFT。现在我用Matlab,在我的iMac上算一次要用好几个礼拜。
: 这要是增加一下规模的话,算一次就是好几个月了,受不了。而且学校
: 太烂,也没有像样的有足够内存的并行机可用。
: 据说c++要比Matlab快一点儿,但是我想问的是,按说Matlab的向量运
: 算和并行处理已经优化得很好了,反正是要调用一些已经优化好了的库函
: 数,C++真的会比Matlab强一点儿么?强在哪儿呢?

j***o
发帖数: 5096
10
没听说过严肃的计算数学问题用matlab搞的,不就是fft吗,又不是什么特殊的toolbox
,推翻用fortran或者c++重写吧,速度差了三到10倍,而且可以传到cluster上算,学
校里难道没有HPC?
相关主题
新款5K iMac GPU性能至少是2016款MacBook Pro的两倍求助:SPICE-like Matlab code
请教:如何测试什么形式的函数更快?matlab 中记录 flops的数量
如何在matlab中计录flops的数量请推荐一款好的电脑吧, 主要用于计算,Fortran/MatLab, (转载)
进入Faculty版参与讨论
n*******l
发帖数: 2911
11
其实我本来就是要画几张图,做个小电影什么的来支持我的分析结果的,然后就偷懒用
Matlab。看来还是逃不掉,改天把程序改成c++。

toolbox

【在 j***o 的大作中提到】
: 没听说过严肃的计算数学问题用matlab搞的,不就是fft吗,又不是什么特殊的toolbox
: ,推翻用fortran或者c++重写吧,速度差了三到10倍,而且可以传到cluster上算,学
: 校里难道没有HPC?

e****m
发帖数: 18
12
用Fortran吧,速度和Matlab不是一个级别的,虽然编的过程略痛苦。
Matlab的loop的计算效率简直是让人生不如死。
s***e
发帖数: 7166
13
这年头随着PC速度提升,已经几乎没人用FORTRAN了吧。

【在 e****m 的大作中提到】
: 用Fortran吧,速度和Matlab不是一个级别的,虽然编的过程略痛苦。
: Matlab的loop的计算效率简直是让人生不如死。

w*******U
发帖数: 256
14
many people are using fortran. in computational fluid dynamics community,
large-scale numerical computations are done with fortran. in many cases
fortran performs better than c and fortran has more libraries than c because
of history of numerical computation.

【在 s***e 的大作中提到】
: 这年头随着PC速度提升,已经几乎没人用FORTRAN了吧。
l**********1
发帖数: 5204
15
+1
our recent 5 Ys papers: F is flos and Matlab is leaf ..
3D movie simulation by it and ffmpeg

because

【在 w*******U 的大作中提到】
: many people are using fortran. in computational fluid dynamics community,
: large-scale numerical computations are done with fortran. in many cases
: fortran performs better than c and fortran has more libraries than c because
: of history of numerical computation.

l**********1
发帖数: 5204
16
Gnuplot?

【在 n*******l 的大作中提到】
: 其实我本来就是要画几张图,做个小电影什么的来支持我的分析结果的,然后就偷懒用
: Matlab。看来还是逃不掉,改天把程序改成c++。
:
: toolbox

n*******l
发帖数: 2911
17
网上有人说Matlab的FFT就是调用的fftw, 我用Profile仔细分析了一下我的
Matlab程序,它的FFT的性能是跟fftw一样的。
对于n=1024, 二维(nxn)的实数数据,12001次FFT 耗时141.538秒。
对于一维FFT,它的运算量是 5N log_2(N). 所以我的程序里的FFFT应该对应
N=2^_20,它的FLOPS是
5 * 2^20 *20*12001/141.538 = 8459 M FLOPS.
同时我的系统对复数进行了12000次IFFT,耗时222.933秒,对应的FLOPS是
5383 M FLOPS。
这基本就是fftw在四核系统里的benchmark值。
这个FFT/IFFT是我的程序的主要部分,耗时占总时间的63%, 所以就算把程
序用C, C++ 或者Fortran重写,也基本没有什么改善了,除非放到更多核的
并行系统上去。要是想要利用GPU,倒腾数据是一个耗时严重的问题,要仔细
考虑一下。

【在 l**********1 的大作中提到】
: +1
: our recent 5 Ys papers: F is flos and Matlab is leaf ..
: 3D movie simulation by it and ffmpeg
:
: because

c****u
发帖数: 584
18
换个算法。
我解过积分方程,时域的算法是local的,可以用非等分grid. Matlab 1分钟就能算到1
毫秒,精度到皮妙量级。蘋域FFT的算法是global 的,要用等分的grid. 我们用了640
个CPU, 两天才能算出同样结果。而且FFT 对round off errors非常敏感,还要用
infinity precision package 来算。

【在 n*******l 的大作中提到】
: 网上有人说Matlab的FFT就是调用的fftw, 我用Profile仔细分析了一下我的
: Matlab程序,它的FFT的性能是跟fftw一样的。
: 对于n=1024, 二维(nxn)的实数数据,12001次FFT 耗时141.538秒。
: 对于一维FFT,它的运算量是 5N log_2(N). 所以我的程序里的FFFT应该对应
: N=2^_20,它的FLOPS是
: 5 * 2^20 *20*12001/141.538 = 8459 M FLOPS.
: 同时我的系统对复数进行了12000次IFFT,耗时222.933秒,对应的FLOPS是
: 5383 M FLOPS。
: 这基本就是fftw在四核系统里的benchmark值。
: 这个FFT/IFFT是我的程序的主要部分,耗时占总时间的63%, 所以就算把程

l**********1
发帖数: 5204
19
Sre, smartgrid should ask stoppingtime general..

到1
640

【在 c****u 的大作中提到】
: 换个算法。
: 我解过积分方程,时域的算法是local的,可以用非等分grid. Matlab 1分钟就能算到1
: 毫秒,精度到皮妙量级。蘋域FFT的算法是global 的,要用等分的grid. 我们用了640
: 个CPU, 两天才能算出同样结果。而且FFT 对round off errors非常敏感,还要用
: infinity precision package 来算。

c*******h
发帖数: 1096
20
想要数量级上的速度提升,申请一个computing cluster的帐号是正道
不过fft其实不是特别scabable,因为communication开销太大,
所以你还得找一个网络特别快的cluster
换个数值算法是根本解决方法。。。要么就心安理得不要算那么大的n

【在 n*******l 的大作中提到】
: 网上有人说Matlab的FFT就是调用的fftw, 我用Profile仔细分析了一下我的
: Matlab程序,它的FFT的性能是跟fftw一样的。
: 对于n=1024, 二维(nxn)的实数数据,12001次FFT 耗时141.538秒。
: 对于一维FFT,它的运算量是 5N log_2(N). 所以我的程序里的FFFT应该对应
: N=2^_20,它的FLOPS是
: 5 * 2^20 *20*12001/141.538 = 8459 M FLOPS.
: 同时我的系统对复数进行了12000次IFFT,耗时222.933秒,对应的FLOPS是
: 5383 M FLOPS。
: 这基本就是fftw在四核系统里的benchmark值。
: 这个FFT/IFFT是我的程序的主要部分,耗时占总时间的63%, 所以就算把程

1 (共1页)
进入Faculty版参与讨论
相关主题
前一篇帖子小数点错了一位,汗matlab 中记录 flops的数量
新款5K iMac GPU性能至少是2016款MacBook Pro的两倍请推荐一款好的电脑吧, 主要用于计算,Fortran/MatLab, (转载)
请教:如何测试什么形式的函数更快?劝你们别跳码农这个坑
如何在matlab中计录flops的数量请问编译时怎么把自己的C/C++代码链接到一个库
求助:SPICE-like Matlab code菌斑这么多IT WSN,按说应该能看懂神威的,咋都是些外行在咋呼呢
相关话题的讨论汇总
话题: matlab话题: fft话题: fortran话题: c++话题: gpu