可分配与静态大小的数组的性能

时间:2013-05-29 03:35:37

标签: fortran

我有一个我必须修改的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

1 个答案:

答案 0 :(得分:1)

您应该使用分析器并找到缓慢的操作并发布其代码。你展示的代码是无用的。结果是否正确,至少?

缓慢可能是由许多因素引起的。其中一个是错误的参数传递,这使得复制/复制成为必要。此外,子程序不知道阵列是否连续的事实可能会造成一些伤害,但并不多。