采用fortran進行數值計算的朋友們都應該聽說過大名鼎鼎的lapack庫,我就不多做介紹了,在此,我只是介紹一個編譯好的lapack二進制包ACML(AMD Core Math Library),並且我強烈推薦,有幾個原因:
1. ACML是預編譯好的二進制文件,省去了許多重新編譯的麻煩;
2. AMD對ACML中的許多函數針對x86構架進行了優化,執行效率很高;
3. ACML中有專門針對SMP(不要告訴我你不知道SMP是什么東東)的庫,可以實現並行多處理,如果你是多核多線程處理器的話可以最大程度發揮處理器的效能,針對我的電腦我進行了一個測試,分別鏈接到libacml_mp_dll.dll(支持多處理)和ibacml_dll.dll(不支持多處理),性能提高70%左右(我的只是雙核U);
4. 還有一點ACML是免費的。
不錯吧,使用lapack包的朋友們可以試試,即使你的U是intel的也沒有關系,ACML通吃(這里我說明一下ACML對AMD的機器優化的較好,但對於Intel的cpu還不行,如果你是Intel的cpu還是用MKL吧,下面我對MKL的使用也做了說明),呵呵,下面針對windows 7系統我介紹一下ACML的安裝和使用過程;
前提:
1. Intel Visual Fortran 11(考慮到所使用的win7平台,目前ivf11應該是最好的的選擇了,不要給我提cvf6了,太古董了,並且cvf的ide在win7下會崩潰);
2. Visual Studio 2008 專業版或其它,但不能是速成版,ivf真是太那個了,憑什么不支持速成版啊;
3. acml-4-4-0-ifort32.exe,下載地址 ;
安裝步驟如下,順序可不能錯哦:
1. 首先安裝visual studio 2008 pro,選擇你需要的組件,至少得包含visual c++;
2. 安裝 Intel Visual Fortran Compiler 11;
3. 安裝ACML,記着安裝的位置,如我們這里是 "C:\AMD\acml4.4.0",之后我們會用到;
4. 如果你的處理器是多核的,進入acml安裝路徑下,並打開ifort32_mp\lib目錄,將當前目錄位置復制,比如我的是 “C:\AMD\acml4.4.0\ifort32_mp\lib”;
5. 將之前復制的路徑添加到path環境變量,如下圖所示:
6. 我們先測試一下在命令行界面下的情況,新建一個fortran源文件,main.f90, 輸入以下內容:
EXTERNAL ACMLINFO
CALL ACMLINFO()
STOP
END
在開始菜單中打開依次打開 Intel(R) Software Development Tools->Intel(R) Fortran Compiler 11.0.061->Fortran Build Environment for applications running on IA-32 輸入編譯命令,ifort /libs:dll -Qopenmp main.f90 c:\amd\acml4.4.0\ifort32_mp\lib\libacml_mp_dll.lib,編譯成功會輸出以下內容,則表示設置成功了。
7. 接着我們在圖形界面的IDE下進行配置並測試,打開Visual Studio,新建工程Intel Fortran->Console Application,然后配置編譯和鏈接選項,點Project->Properties,在Fortran的Command Line的Additional Options中填入-Qopenmp /libs:dll,在Linker的Command Line的Additional Options中填上C:\AMD\acml4.4.0\ifort32_mp\lib\libacml_mp_dll.lib,完成后,編譯工程即可。
如果你的機器是Intel的U的話,用Intel自己的MKL中的LAPCK庫效率最理想,只需要把mkl的lib路徑加入到鏈接搜索路徑,再增加幾個鏈接庫文件就可以了,使用mkl需要以下幾個庫文件:mkl_intel_c.lib mkl_intel_thread.lib mkl_core.lib libiomp5md.lib。另外,使用mkl時,如果你的U為AMD的話最好禁用優化,即加上選項/Od, 否則可能會出現計算錯誤,這種情況我就遇到過。