2011年10月7日 星期五

C與Fortran誰快,我該用哪種

關於Fortran較快的論點:
http://stackoverflow.com/questions/146159/is-fortran-faster-than-c

Fortran不允許兩個Pointer指向同一記憶體,C允許,所以C須重複load同一塊記憶體
除非C加上keyword returict:
http://en.wikipedia.org/wiki/Restrict

但只有C99支援
且還有其他因素使Fortran快於C,但其他因素是什麼?

 作者  yoco315 (眠月)                                         看板  C_and_CPP
 標題  Re: [問題] 為何公認fortran速度略快於C ?
 時間  Fri May  1 02:38:34 2009
───────────────────────────────────────


※ 引述《Carbontube (碳管)》之銘言:
: 大體上,就多數人認知,C與Fortran速度是有差的
:   小弟實在想不透這點,為何fortran可以比較快。


這邊有解釋
http://stackoverflow.com/questions/146159/is-fortran-faster-than-c


簡單來說就是 fortran 可以作一些 C 沒辦法(自動)做的最佳化
至於為什麼沒辦法自動作上面這篇跟下面 [1] 都有講
但是我們還是可以提示 compiler 作這個最佳化,看 [1]


這邊有兩個 C 的加速手段
[1] http://tinyurl.com/dygwpb __restrict__
[2] http://tinyurl.com/d55t9f __builtin_prefetch


只用上 [1] 的話大概打平手或是小贏,
[1] 跟 [2] 都用上的話,C 就贏了,我沒試過,只是合理推論
不過 [2] 不是標準,[1] 也只是 C99 的標準,C++ 沒的用
(雖然說還是有 extension 支援)


--
To iterate is human, to recurse, divine.
遞迴只應天上有, 凡人該當用迴圈.                  L. Peter Deutsch


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.106.42
推 vip82:推!!                                                      05/01 05:12
推 sjgau:fortran have common block, it is global valriable         05/01 07:51

另一個Fortran的優勢是有前人寫的LAPACK等數值運算函式庫
以上為Fortran77

但Fortran90出現POINTER,Fortran2003全面支援OOP
是否使Fortran的速度不再快於C?

又有人說Fortran2008不再支援OOP,是真的嗎?

 作者  DrStein (交換關聯)                                     看板  C_and_CPP
 標題  [閒聊] 怒吼,PTT怎沒有fortran版
 時間  Sun Sep  7 17:06:15 2008
───────────────────────────────────────
...略
※ 發信站: 批踢踢實業坊(ptt.cc)
...略
→ DrStein:Fortran優勢有三: 1.有lapack等數值函式庫                 09/07 20:28
→ DrStein:2.前人的科學計算程式,大多是用fortran來寫               09/07 20:28
→ DrStein:3.好學 比起C/C++那種指標強制學習制(開檔必要用指標)      09/07 20:29
→ DrStein:fortran無疑是非專業程設者的第一選則                     09/07 20:30
→ DrStein:(4.) fortran 2008直接支援平行,那更是目前的趨勢         09/07 20:31
→ DrStein:fortran2003胎死負中的原因 就是因為全面支援OOP           09/07 20:31
→ DrStein:後來會議結論是OOP不該存在於fortran中                    09/07 20:32
→ DrStein:也就是fortran完全定位為科學計算程式                     09/07 20:32

http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=gcc&lang2=ifc
上面的測試結果是用Fortran2003? 還是其他的版本?
是否有測試Fortran的強項?
Fortran的強項是什麼?(陣列? 迴圈?)

http://gcc.gnu.org/ml/fortran/2007-01/msg00619.html
g77的前身是g2c,也就是說用g77編譯Fortran時,她會先把Fortran翻成C
於是若拿g77當compiler,Fortran在速度上對C毫無優勢
那麼gfortran的編譯方式也是透過g2c嗎?

目前合法免費的Fortran compiler就只有gfortran?
須要用付費的Fortran compiler才能享有Fortran的高速嗎?

以下來個問題總結:
與C比較,Fortran的強項是什麼?(陣列? 迴圈? 複數? 禁止重複?)
該強項是比C快的原因是什麼?
哪些版本的Fortran快於C?
須要用付費的Fortran compiler才能完全享有Fortran的高速或強項嗎?

沒有留言:

張貼留言