Fortran中OOP功能的標準行是它們對可讀性和重用性都很好,但對執行時間不利。當我測試時,我得到了不同的結果。程序功能與子程序的速度
我寫了一個簡單的虛擬程序,通過在派生類型中添加兩個大數組來測試這個程序。我發現call c%eqPlus(a,b)
與添加標準數組一樣快。然而,這似乎不如只寫c%array = a%array+b%array
明確。不幸的是,c=a+b
對於1M以上的數組而言速度要慢兩倍左右。 (對於小於500K的數組,值爲c=a+b
的速度一樣快,但這可能取決於特定的計算機。)
OOP風格的真正問題是將所有函數都寫成函數而不是子例程?有沒有辦法得到c=a+b
,這對大型數組沒有這種開銷?
它會受處理器的影響很大。你是否也嘗試直接調用該函數?現在,編譯器編寫者專注於如何實現這些功能以可靠地工作,而不是速度。理論上它應該能夠對相同的機器代碼進行優化,但這不是我們現在擁有的。 – 2013-04-29 16:56:59
是的,我試過了,並且有一些不健康的其他變體 - 相同因素變慢。不過,我不會抱怨可靠性。 – weymouth 2013-04-30 06:53:40