我有一個fortran代碼,我不得不修改以包含一個新的庫。最初在代碼中,數組的大小通過Makefile傳遞,這意味着每次我想改變數組的大小時,我都必須重新編譯代碼。我改變了這個從「輸入參數文件」中讀取輸入數組的大小,以避免每次都需要重新編譯。但是,由於各種原因,我的代碼比以前慢得多。可分配性和靜態大小的數組的性能
與我的老闆交談時,他認爲這可能是因爲我們沒有在編譯時傳遞數組的大小,代碼沒有得到很好的優化。這可能是真的嗎?
感謝
---------------編輯---------------------
最初在makefile中有這些行
NL = 8
@echo Making $(SIZE_FILE) .....
echo " integer, parameter(nl = " $(NL) ")" > $(SIZE_FILE)
這創建了一個值爲「NL」的「sizefile」。該文件是「包含」在主程序d在作爲標題,然後數組被宣佈這樣的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
它是*可能的*,但你將不得不展示你現在如何分配你的數組與之前的操作。在沒有看到您的代碼的情況下,不可能知道它是否沒有得到很好的優化,或者我們無法指示您解決問題的方式。 – SethMMorton
另外,你應該改變這篇文章的標題來描述問題。 「Makefile內部的參數」並不是你真正的問題,它是可分配性和靜態大小數組的性能。 – SethMMorton
什麼操作系統和配置有多大?聽起來好像你正在強制頁面交換。 – agentp