主题:在子程序和另一个主程序中运行同样的代码,差异巨大~
alsoran
[专家分:760] 发布于 2011-12-30 18:41:00
在一个子程序中运算一个500×500的矩阵相乘,用时6秒多,把那段代码放到另外建的主程序中运行,用时仅0.1秒
请问子程序中为什么会这么慢,然后怎么才能让子程序内的代码运行地快呢
回复列表 (共5个回复)
沙发
alsoran [专家分:760] 发布于 2011-12-30 21:36:00
是不是栈越来越高以后运算速度会慢?
板凳
yeg001 [专家分:14390] 发布于 2011-12-31 08:57:00
楼主, 要比较运行速度先保证两个工程在相同的优化等级和选项上编译. 一般来讲放到子程序跟放到主程序不应该出现这么大的速度差别.
要不你把代码贴出来让大家测试一下?
3 楼
kewei [专家分:280] 发布于 2012-01-01 12:18:00
应该不会差别这么多,要不还不敢用子程序了
4 楼
alsoran [专家分:760] 发布于 2012-01-08 17:25:00
yeg001 您好,源代码太多了,贴不上,上传文件也太多,也浪费大家时间。
问题出在使用一个imsl初值问题积分函数中的一个矩阵乘法,大概是500多阶的两个矩阵相乘
CALL IVPAG(IDO, Fdx, FCNJ, t, tend, X, TOL=TOL,param=param)
这个是imsl内的初值问题求解函数,Fdx是初值问题的函数,两个矩阵就在Fdx内相乘的。
所有的时间测试工作都在同样的优化条件下完成,这点不用怀疑,如果能提供一些建议,不甚感激
5 楼
alsoran [专家分:760] 发布于 2012-01-08 22:55:00
貌似是这个原因,allocatable属性的派生数据内的数组运算速度太慢了,在大矩阵中影响巨大
我来回复