回 帖 发 新 帖 刷新版面

主题:在子程序和另一个主程序中运行同样的代码,差异巨大~

在一个子程序中运算一个500×500的矩阵相乘,用时6秒多,把那段代码放到另外建的主程序中运行,用时仅0.1秒
请问子程序中为什么会这么慢,然后怎么才能让子程序内的代码运行地快呢

回复列表 (共5个回复)

沙发

是不是栈越来越高以后运算速度会慢?

板凳

楼主, 要比较运行速度先保证两个工程在相同的优化等级和选项上编译. 一般来讲放到子程序跟放到主程序不应该出现这么大的速度差别.
要不你把代码贴出来让大家测试一下?

3 楼


应该不会差别这么多,要不还不敢用子程序了

4 楼

yeg001 您好,源代码太多了,贴不上,上传文件也太多,也浪费大家时间。
问题出在使用一个imsl初值问题积分函数中的一个矩阵乘法,大概是500多阶的两个矩阵相乘
CALL IVPAG(IDO, Fdx, FCNJ, t, tend, X, TOL=TOL,param=param)
这个是imsl内的初值问题求解函数,Fdx是初值问题的函数,两个矩阵就在Fdx内相乘的。
所有的时间测试工作都在同样的优化条件下完成,这点不用怀疑,如果能提供一些建议,不甚感激


5 楼

貌似是这个原因,allocatable属性的派生数据内的数组运算速度太慢了,在大矩阵中影响巨大

我来回复

您尚未登录,请登录后再回复。点此登录或注册