運行fortran程序的步驟「fortran教程用什麼書比較好」

大家都知道,MATLAB中有個Profiler,可以幫助我們剖析M文件,找出瓶頸所在以便優化。如果優化後在MATLAB中運行時間還是難以忍受,這時如果沒有更好的算法供選擇,可以考慮用MATLAB的外部程序接口來試試。如果程序中的循環和矩陣操作比較多,同樣的程序轉成Fortran MEX後速度通常會有10x甚至100x以上的提高。

如果MEX運行時間還比較慢怎麼辦?能不能類似於MATLAB中剖析M文件那樣,對MEX進行剖析並找出瓶頸予以優化呢?幾經摸索,筆者終於發現了兩個不錯的方法。

MEX有C和Fortran兩種。下面的方法針對Fortran MEX文件的剖析,對C MEX可能也適用。需要的軟件如下:Microsoft Visual Studio 專業版、MATLAB、Intel Visual Fortran、Intel Vtune Performance Analyzer或Intel VTune Amplifier。

方法一:利用Visual Studio 的性能工具

  1. 在MATLAB中用mex編譯得到MEX文件(擴展名.mexw32或.mexw64)。注意要用-g開關來編譯。例如:mex -v -g source.F。只有這樣才剖析時才會分析其中調用的各subroutine。
  2. 打開VS,依次選擇工具->性能工具->性能嚮導
  3. 從下拉框中選擇“分析動態鏈接庫(.DLL)”,點擊“下一步”
  4. 點擊“DLL路徑”文本框右側的按鈕,從下面文件類型框選擇“所有文件”,找到要剖析的MEX文件,點擊“確定”。也可以直接輸入路徑。例如:C:\……\source.mexw32
  5. 點擊“可執行文件路徑”文本框右側的按鈕,找到matlab.exe文件,點擊“確定”。與上一步一樣,也可直接輸入路徑。例如:C:\Program Files\MATLAB\R2008a\bin\matlab.exe
  6. 點擊“下一步”,選擇“採樣”,“下一步”,“完成”。只有選“採樣”才能附加到MATLAB進程。
  7. 在VS右側的“性能資源管理器”中右擊最頂層,選擇“附加/分離”,然後從彈出來的對話框中選擇MATALB進程,點擊“附加”。
  8. 在MATLAB中運行你的程序,在程序結束後返回VS,在“性能資源管理器”中右擊最頂層,選擇“附加/分離”,然後從彈出的對話框中選擇MATLAB進程,點擊“分離”。
  9. VS會給出性能報告。點擊“函數”標籤,找到你的MEX文件,點右邊的+。此時就會看到詳細的分析報告。Exclusive Percent 較大的函數就是你源代碼中需要設法優化的目標

這個方法的分析結果只能統計到函數,不能統計代碼行的調用次數和耗時。要剖析到代碼行可以用下面的方法。

方法二:利用Intel Vtune Performance Analyzer

  1. 修改mexopts.bat:該文件默認位置為C:\Documents and Settings\你的用戶名\Applilcation Data\MathWorks\MATLAB\R2008a\mexopts.bat。找到並打開該文件,在文件中找到 set OPTIMFLAGS= …… 在其後添加 -Zi。
  2. 用-g開關mex你的Fortran MEX源文件。如 mex -v -g source.F
  3. 打開Intel Vtune Performance Analyzer(IVPA)並建立分析項目。在IVPA中選擇File-New Project,選擇Quick Performance Analysist Wizard,點擊OK。在彈出的對話框中,選中No Application To Launch。此時先不要點Go。
  4. 打開MATLAB,運行程序調用你要剖析的MEX文件。運行後返回IVPA,點擊GO。
  5. IVPA會對CUP中運行的所有進程進行分析,所以分析是最好少開其他程序。默認的分析時間是20秒。如果感覺時間不夠,可以在Tuning Browser中右擊項目名稱,選擇Properties,然後修改Duration值。
  6. IVPA分析完成後,從Process列表中找到MATLAB雙擊。一層層的雙擊進入,直到找到你的MEX進程。雙擊進入,然後點擊右鍵,選擇View As – Horizontal Bar Chart,就可以找到最耗時的子程序。雙擊子程序的名稱,就會調查源碼。通過右邊的Clockticks和Instructions Retired列中的數字就可以查找代碼中的瓶頸所在。

方法三:利用Intel VTune Amplifier

  1. 修改mexopts.bat:該文件默認位置在C:\Documents and Settings\你的用戶名\Applilcation Data\MathWorks\MATLAB\R2008a\mexopts.bat。找到並打開該文件,在文件中找到 set OPTIMFLAGS= …… 在其後添加 -Zi。
  2. 用-g開關mex你的Fortran MEX源文件。如 mex -v -g source.F
  3. 打開Intel VTune Amplifier 。選擇File-New-Project;Project Name欄中給project取個名字,比如叫MexProfile;Location欄是分析結果保存位置,保持默認或選一個位置;點擊下面的Create Project按鈕。
  4. 在彈出的xxx – Project Properties對話框中的Target面板中,Target type選Attach to Process;然後到Windows任務管理器中查一下MATLAB的PID(如果沒有啟動MATLAB,先啟動;如果任務管理器中沒有PID,點擊查看菜單-選擇列-選中PID),輸入PID後點擊OK。
  5. 點擊工具欄上的New Analysis圖吧(向右箭頭);在MATLAB中運行包含要剖析MEX的程序;然後點擊AM中的Start開始剖析。
  6. 剖析一段時間或程序結束後點擊Stop,軟件會自動分析剖析結果。 分析完成後切換到Bottom-up面板,雙擊你要查看的函數名稱,即可查看各代碼行的耗時分析結果。找到瓶頸進行優化。

純個人摸索出來的方法,可能上面的步驟並非最佳,但至少可以實現MEX程序代碼的剖析了。不足之處大家歡迎指正。誰有更好的方法也歡迎拿出來分享。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/251237.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-13 17:22
下一篇 2024-12-13 17:22

相關推薦

發表回復

登錄後才能評論