Re: [心得]Intel Fortran編譯器編譯雙核心程式的心得
※ 引述《Geigemachen ()》之銘言:
: ※ 引述《kobenein (哈哈哈)》之銘言:
: : 有沒有免費的雙核心complier
: 我分享使用Intel Visual Fortran Compiler Professional試用版
: 進行編譯雙核心程式的心得與疑難。
: 不用修改原始程式碼,裝對compiler還有其他軟體元件,在編譯時加對正確的選項參數
: 就好了。
: 步驟與現象:
: 1.首先安裝Microsoft visual studio (我用2003安裝不順,2005則很快成功)
: 2.下載Intel Visual Fortran Compiler Professional,試用期30天
: http://software.intel.com/en-us/articles/intel-visual-fortran-compiler-
: professional-edition-for-windows-evaluation/
: 3.啟動compiler
: (1)視窗版:比較容易,省略不提
: (2)命令列版:
: a)點選程式集中的Fortran Build Environment for applications,
: (省略此動作,直接進入命令列編譯,會讓link失敗,如同Microsoft visual
: studio安裝部份失敗時卻仍然安裝且啟動compiler時所產生的錯誤訊息)
: 畫面跳入命令列以後到C:\Program Files\Intel\Compiler\11.1\051\bin\ia32
: 目錄找到ifort.exe
: 4.編譯選項
: 使用ifort編譯雙核心程式,加入正確的選項。我選的命令與選項如下:
: (連著不要換行:)
: ifort [目的檔名不加.exe] /O3 /Qparallel /Qpar-runtime-control
: /Qdiag-enable:par [Fortran來源檔名,含副檔名]
: 最佳化程度選項:
: /O3 很積極最佳化最快運算速度,即使對某些程式而言速度不會更快,
: 仍增大程式碼最佳化以進行加速
: /O2 最佳化最快運算速度,對某些程式而言速度不會更快,
: 不增大程式碼也不再繼續最佳化
: /Qparallel 指定編譯時把回圈運算分給不同的多核心CPU進行自動平行運算
: /Qpar-runtime-control 讓編譯器產生執行控制碼,進行有效的自動平行運算
: /Qdiag-enable:par 顯示編譯時有關平行運算部分的細節與診斷訊息。
: 系統預設不顯示,無法在編譯時被通知是否有進行平行化。
: 以上選項參數的細節可用ifort/help查訊
哈哈,想不到找到同道中人,事實上,intel visual fortran使用的,是OpenMP的語法,
不知道友有沒有用OpenMP的語法來寫?
"Qparallel",是自動平行,如果你的code很長,有幾千行,這個指令沒有用,還會"壞事",
我有碰到道友所說,變很慢速的情形.特別是Threshold給錯了,基本上,
整個code就不會動了!
我用的是標準的OpenMP指令,也就是:
Qopenmp,這個才是王道啊,可是code就要照OpenMP的方法來寫.
:
: 5.編譯後的速度與可攜性
: 我把編譯成功的雙核心.exe在安裝Intel compiler的電腦#1上執行成功,
: 速度頗快,是單核心程式執行速度的2-5倍。CPU使用率也從50%上升到100%。
我是用雙CPU共8核的機器在跑,我沒碰到這樣神的case,不過我有量了一下,
大概是這樣吧...
計算時間...
1核 55秒
2核 3x秒
3核 2x秒
4核 1x秒
5核 1x秒
6核 1x秒
7核 x秒
8核.....變不穩.
以8核心機器,小弟覺得,驅動5核最經濟.
: 信心滿滿地移植到另一台的雙CPU電腦電腦#2執行,卻發現.exe的可攜性不好,
: 程式執行會中斷,出現"找不到libiomp5md.dll"的錯誤訊息。
:
: 我就把搜尋電腦#1compiler資料夾,找到這個檔案:
: C:\Program Files\Intel\Compiler\11.1\051\bin\ia32\
: libiomp5md.dll
: 把它拷貝到電腦#2上.exe的同一個資料夾,從此這個惱人的錯誤訊息就消失了。
: 電腦#2也享受到了類似的加速效果,CPU使用率也從50%上升到100%。
: 6.超過24小時CPU使用率達到100%的後果:執行速度慢到不會動!?
: 因為研究工作需要,我需要在兩台電腦上連續執行大量程式,常常超過24小時。
: 我在電腦#1 #2 上都執行雙核心程式,超過24小時CPU使用率達到100%,
: 程式執行速度逐漸變慢,一天後比剛開機就執行的單核心的程式還慢
: (同樣的程式,單核心程式要連續3-4天以上不關機,才會變得這麼慢)。
:
: (A)重新啟動系統,清除暫存檔
: 為了釐清系統記憶體資源配置造成的影響,我就清除系統暫存檔(發現暫存檔不大),
: 兩台電腦都重新開機,重新執行一樣的程式,結果還是慢到幾乎不會動。
: (B)關機冷卻幾小時,再重新啟動系統
: 為了釐清硬體上電路過熱造成的影響,我就把電腦關機冷卻幾小時,拿去寒風
: 比較強的地方冷卻,本來很熱的風扇與CPU區域也被冷卻得涼颼颼的,再重新開機,
: 執行同樣的程式。但是系統仍然變得很慢,慢到幾乎不會動。
: 這就令我很困惑了,怎麼連續執行1天以前,與1天以後,速度可以差到這麼多?
: 是軟體還是硬體上的問題呢?有沒有人編譯雙核心程式時有解決這種變慢現象的
: 好方法呢?
: 多謝各位指點了,歡迎分享編譯的心得
小弟覺得,道友的機器發生了"競爭",也就是說總performance如果是100%,道友可能不小心
用到了101%,那就或發生了競爭.
以雙核的機器,小弟不贊成使用多核計算,因為總要空出一個核來做一些雜事.
如果同時驅動雙核,那也許就會出問題?
小弟都用Xeon的CPU,其它的CPU能不能用多核,小弟也不清楚.
要用多核計算,除了多核complier,多核CPU,還要有多通道.
道友不知用的是那一種機器?
再者,OpenMP也不支持早期的多核CPU,就算是早期的Xeon,CPU.
整體而言,小弟覺得道友是因為使用"雙核"CPU+"Qparallel"+過多的"Threshold",
而引發的不穩定.道友不妨檢查看看.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 68.101.70.49
推
12/22 18:16, , 1F
12/22 18:16, 1F
→
12/22 18:17, , 2F
12/22 18:17, 2F
→
12/22 18:19, , 3F
12/22 18:19, 3F
→
12/22 20:51, , 4F
12/22 20:51, 4F
→
12/24 12:53, , 5F
12/24 12:53, 5F
→
12/24 12:53, , 6F
12/24 12:53, 6F
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章
-1
12