[疑惑]雙核心程式執行一天以後越跑越慢..

看板PLT (程式語言與理論)作者時間15年前 (2009/12/21 01:14), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
我分享使用Intel Visual Fortran Compiler Professional試用版 進行編譯雙核心程式的心得與疑難。 不用修改原始程式碼,裝對compiler還有其他軟體元件,在編譯時加對正確的選項參數 就好了。 最令我困惑的現象是,前幾個小時CPU使用率滿載100%,程式執行得很快, 連續執行一天以後就慢得幾乎不會動,刪除暫存檔,重開機,或是關機幾小時冷卻 再開機,還是快不起來。 步驟與現象: 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查訊    5.編譯後的速度與可攜性  我把編譯成功的雙核心.exe在安裝Intel compiler的電腦#1上執行成功,  速度頗快,是單核心程式執行速度的2-5倍。CPU使用率也從50%上升到100%。 信心滿滿地移植到另一台的雙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天以後,速度可以差到這麼多?  是軟體還是硬體上的問題呢?有沒有人編譯雙核心程式時有解決這種變慢現象的  好方法呢? 多謝各位指點了,歡迎分享程式執行加速的心得 -- 魚防水,無法呼吸啊...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.151.62 -- 上月球!月球是中國人吳剛不可分割的一部分 抓嫦娥!此女意圖分裂中國領土脫離中國掌握 殺玉兔!玉兔為資產階級之玩物!日帝之玩偶! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.151.62 ※ 編輯: Geigemachen 來自: 118.160.151.62 (12/21 01:15) ※ 編輯: Geigemachen 來自: 118.160.151.62 (12/21 01:15) ※ 編輯: Geigemachen 來自: 118.160.151.62 (12/21 01:17)

12/21 01:20, , 1F
有觀察記憶體的用量嗎?
12/21 01:20, 1F
有的,記憶體夠用,兩台電腦都有2GB RAM,這個程式使用量約300MB-700MB。 初期跑得快與後來跑得慢期間的記憶體狀況差別不大,都夠用。 我原來也懷疑記憶體不足,除了這個程式的command line視窗以外, 我把大部分的常駐軟體,桌面顯示,電腦電源程式,網路功能..都關閉了, 以節省記憶體。 這個方法在電腦執行快的時候有效,最多增快執行速度到1.5倍左右, 慢到不會動的時候沒用,同一台電腦原來只要10分鐘就完成的進度, 放了好四五個小時都不會動。 單核心程式也有類似的現象,只是沒有那麼快發生,也沒有變慢得那麼明顯且劇烈。 ※ 編輯: Geigemachen 來自: 118.160.151.62 (12/21 01:24) ※ 編輯: Geigemachen 來自: 118.160.151.62 (12/21 01:28)

12/22 00:05, , 2F
可否說明演算法是在做什麼?單這樣看似乎也只能亂猜
12/22 00:05, 2F
多謝板主指點,我稍後加上演算法,整理中.. 因為演算目的是物理用途,我試著不要提供太多物理相關的描述免得造成閱讀困難, ※ 編輯: Geigemachen 來自: 140.109.112.200 (12/22 00:34) ※ 編輯: Geigemachen 來自: 140.109.112.200 (12/22 00:57)
文章代碼(AID): #1BBbjlyZ (PLT)
文章代碼(AID): #1BBbjlyZ (PLT)