我有一个我必须修改的fortran代码以包含一个新库。最初在代码中,数组的大小在Makefile中传递,这意味着每次我想要更改数组的大小时我都必须重新编译代码。我将其更改为从“输入参数文件”中读取输入数组的大小,以避免每次都重新编译。但是,由于各种原因,我的代码比以前慢得多。
与我的老板交谈,他认为可能因为我们在编译期间没有传递数组的大小,所以代码没有得到很好的优化。这可能是真的吗?
由于
--------------- ---------------------编辑
最初在makefile中有这些行
NL = 8
@echo Making $(SIZE_FILE) .....
echo " integer, parameter( nl = " $(NL) " )" > $(SIZE_FILE)
这创建了一个值为“NL”的“sizefile”。这个文件在主程序中作为标题“包含”,然后在fortran文件中声明了数组:
include "sizefile"
real*8, dimension ur(nl)
现在我已经声明了一个名为“read_input_parameters”的子程序,该程序由程序调用,该程序读取值为“Nl”的文本文件。然后我像这样分配数组:
program test
integer n
allocatable :: ur(:)
call read_input_parameters(n)
allocate(ur(n))
*operations*
deallocate(ur)
stop
end
答案 0 :(得分:1)
您应该使用分析器并找到缓慢的操作并发布其代码。你展示的代码是无用的。结果是否正确,至少?
缓慢可能是由许多因素引起的。其中一个是错误的参数传递,这使得复制/复制成为必要。此外,子程序不知道阵列是否连续的事实可能会造成一些伤害,但并不多。