Windows下Fortran編譯Lapack庫及使用的方法(轉自新浪)

來源:互聯網
上載者:User

標籤:

Lapack 是一套被非常廣泛使用的線性代數計算工具庫,現在的主要編寫語言時 Fortran90 。Lapack 基本上可以說是速度最快的線性代數計算庫,我們看看官方給出的其被應用的幾個地方就可以看出來:  high-level interface:
Matlab
Octave
NAG Numerical Librairies
Maple
R project
Scilab
 列表上這些軟體/語言是不是如雷貫耳,由此可見 Lapack 的流行程度。 Lapack同時有 Fortran 和 C/C++ 的介面,現在網上能找到的教程似乎都是 C 的居多,為此我整理了下我搭建 Lapack Fortran 使用環境的步驟,希望對其他人有協助。 本文使用環境如下:  作業系統版本:Windows 8
使用的編譯器:gfortran (GCC版本4.6.2 MinGW環境)
Lapack版本: 3.4.2
 1)MinGW設定: 由於需要使用內建的Makefile進行編譯,因此要用到Makefile和內建的Make程式。對於Linux這當然不是問題,對於Windows而言則有點麻煩。 在 Windows 下使用make來編譯器有兩種主要途徑,分別是 Cygwin和 MinGW 。安裝這兩種軟體(?)後他們就可以在 Windows 下類比出 Linux 的使用環境。他們的主要區別我個人理解是:Cygwin 更偏向於類比 Linux,因此編譯出來的軟體還是使用的 Linux 的一系列介面, Cygwin 則類比這些介面,這也是為什麼 Cygwin 編譯出來的 Windows 程式還需要 cygwin1.dll 才能運行,同時效率也比較低,但是帶來的好處是在兩個系統上的相容性好; MinGW 更傾向於讓 Windows 使用者使用 Linux 上的資源,因此編譯出來的程式使用的是 Windows 的介面,速度也更快一些。 Cygwin 在安裝的時候可選組件非常多,在 Cygwin 下如果你選擇了安裝 Make 組件,那麼你可以在 CMD 命令列或者 Cygwin Shell 下同時用 Make 命令進行編譯 ( CMD 命令列下可能還得再加個 Makefile 的檔案名稱,具體我記不清了,但是肯定是可以做的),比較方便。 MinGW 相對麻煩一些,因為 MinGW 在安裝時可選組件和定製項很少,不能單獨安裝 Make 組件。在 MinGW 下使用 Make的唯一方法,就是在安裝時選擇安裝 MSYS Basic System。這個組件是類比一個 Linux Shell ,這樣我們就有類似 Cygwin 的能力了。  如果安裝 MinGW 的時候沒有安裝這個組件,不要慌張,開啟 MinGW 安裝程式,再添加一下就行。有了這個組件後,關於MinGW的配置就大功告成了。 2)LAPACK源碼下載及設定: LAPACK 源碼的下載可以去官網(http://www.netlib.org/lapack/)下,下載下來後是一個tgz檔案。下載完成後解壓之。 LAPACK 源碼的 Makefile 和 make.inc 是我們需要根據系統內容修改的地方。預設源碼裡沒有 make.inc ,但是有個 make.inc.example ,把它改名成 make.inc 。 開啟 make.inc ,裡面每個參數所需要注意的事項都注意得很清楚了,比如編譯器選項什麼的,根據你的需求改就是了。 貼一下我的 make.inc檔案,由於官方預設設定就是基於gfortran所以其實我壓根沒改。  ####################################################################
#  LAPACK make include file.                                       #
#  LAPACK, Version 3.4.0                                           #
#  April 2012                                                   #
####################################################################
#
SHELL = /bin/sh

#  Modify the FORTRAN and OPTS definitions to refer to the
#  compiler and desired compiler options for your machine.  NOOPT
#  refers to the compiler options desired when NO OPTIMIZATION is
#  selected.  Define LOADER and LOADOPTS to refer to the loader and
#  desired load options for your machine.
#
FORTRAN  = gfortran
OPTS     = -O2
DRVOPTS  = $(OPTS)
NOOPT    = -O0
LOADER   = gfortran
LOADOPTS =
#
# Timer for the SECOND and DSECND routines
#
# Default : SECOND and DSECND will use a call to the EXTERNAL FUNCTION ETIME
#TIMER    = EXT_ETIME
# For RS6K : SECOND and DSECND will use a call to the EXTERNAL FUNCTION ETIME_
# TIMER    = EXT_ETIME_
# For gfortran compiler: SECOND and DSECND will use a call to the INTERNAL FUNCTION ETIME
TIMER    = INT_ETIME
# If your Fortran compiler does not provide etime (like Nag Fortran Compiler, etc...)
# SECOND and DSECND will use a call to the INTERNAL FUNCTION CPU_TIME
# TIMER    = INT_CPU_TIME
# If neither of this works...you can use the NONE value... In that case, SECOND and DSECND will always return 0
# TIMER     = NONE
#
#  Configuration LAPACKE: Native C interface to LAPACK
#  To generate LAPACKE library: type ‘make lapackelib‘
#  Configuration file: turned off (default)
#  Complex types: C99 (default)
#  Name pattern: mixed case (default)
#  (64-bit) Data model: LP64 (default)
#
# CC is the C compiler, normally invoked with options CFLAGS.
#
CC = gcc
CFLAGS = -O3
#
#  The archiver and the flag(s) to use when building archive (library)
#  If you system has no ranlib, set RANLIB = echo.
#
ARCH     = ar
ARCHFLAGS= cr
RANLIB   = ranlib
#
#  Location of the extended-precision BLAS (XBLAS) Fortran library
#  used for building and testing extended-precision routines.  The
#  relevant routines will be compiled and XBLAS will be linked only if
#  USEXBLAS is defined.
#
# USEXBLAS    = Yes
XBLASLIB     =
# XBLASLIB    = -lxblas
#
#  The location of the libraries to which you will link.  (The
#  machine-specific, optimized BLAS library should be used whenever
#  possible.)
#
BLASLIB      = ../../librefblas.a
LAPACKLIB    = liblapack.a
TMGLIB       = libtmglib.a
LAPACKELIB   = liblapacke.a
 這裡吐槽下,我下載的 Lapack 版本是3.4.2,結果下載下來檔案夾名是3.4.2,但是 make.inc 的注釋版本是3.4.0,makefile的注釋版本是3.4.1,你們敢認真點嗎。 值得注意的是, Lapack 需要用到 Blas 庫,因此你系統有無 Blas 庫對應著兩種不同的做法。 如果系統已經有了 Blas 庫,或者說你想要用自己的 Blas 庫,你需要修改 make.inc 裡的 USEXBLAS 、 XBLASLIB 和 XBLASLIB 三個變數,修改完直接Make就行了。 如果系統沒有 Blas 庫,Lapack 源碼裡自己帶了一個,可以直接用。那麼保持 make.inc 裡的設定如上檔案所示,開啟 Makefile,把 Blas 庫加到編譯目標裡,就是 lib 參數編程:  lib: blaslib lapacklib tmglib 設定完成後開啟 MinGW Shell ,一路 cd 到 Lapack 源碼所在目錄,輸入 Make 斷行符號,等待漫長編譯過程。 編譯完成後會自動對 Lapack 包進行測試,測試是調用一個 lapack_testing.py 檔案進行測試。系統如果沒有 Python 的話這一步應該會出錯,需要注意下。(不過我 MinGW 預設安裝後沒有出錯,可能已經自動安裝了 Python) 

 

 3)Lapack的使用: 上面編譯的設定是產生靜態庫,編譯完成後我們就得到三個檔案:  liblapack.a
librefblas.a
libtmglib.a
 有三種方式可以使用 Lapack: 假設我們要編譯一個程式 program.f90,對應方法如下: a. 放到系統 lib 檔案夾: 把上面三個檔案直接拷貝到 MinGW 的 lib 檔案夾下,然後再編譯的時候直接加  gfortran program.f90 -llapack -lrefblas -o program.exe 即可連結程式。 b. 放到主程式根目錄: 把上面三個靜態連結庫和程式放在一個目錄下,然後用下面的命令編譯  gfortran program.f90 liblapack.a librefblas.a -o program.exe c. 在主程式目錄單獨給 lapack 庫單獨建個檔案夾: 比如在 program.90 檔案夾下建立 Lapack 檔案夾,利用 -L 把這個檔案夾添加到 lib 搜尋路徑裡。編譯命令就變成:  gfortran program.f90 -L./Lapack -llapack -lrefblas -o program.exe 我個人推薦採用第三種方式,一方面代碼層次簡潔美觀,另外一方面減少代碼閱讀者對於搭建編譯環境所需要的時間。 最後給個樣本檔案測試,使用第三種方法,源碼:  !Testlapack.f90
program main
  implicit none
  real :: a(3,3),b(3)
  integer :: v(3),iflag
  !external sgesv
  a=reshape([2.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,4.0],[3,3])
  b=[998.0,999.0,1000.0]
  print *,‘a=‘,a
  print *,‘b=‘,b
  call sgesv(3,1,a,3,v,b,3,iflag)
  print *,‘solve=‘,b
end program main
 編譯命令: gfortran TestLapack.f90 -L./Lapack -llapack -lrefblas -o TestLapack.exe -Wall 結果:   本文轉自新浪部落格:http://blog.sina.com.cn/s/blog_62c832270101eo60.html

Windows下Fortran編譯Lapack庫及使用的方法(轉自新浪)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.