0

我有一个 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
4

1 回答 1

1

您应该使用分析器并找到速度较慢的操作并发布其代码。您显示的代码没有用。结果至少是正确的吗?

缓慢可能是由许多因素造成的。其中之一是错误的参数传递,这使得复制输入/复制输出成为必要。此外,子例程不知道数组是否连续这一事实可能会造成一些伤害,但影响不大。

于 2013-05-29T09:22:06.353 回答