本記事は、Arm-Mac版のnAG Fortranコンパイラを用いてnetlibに公開されているLAPACK(及びBLAS)をビルドする方法をご紹介します。
LAPACKとBLASの準備
(1)LAPACKの公式ページ(https://netlib.org/lapack/)より最新のLAPACKのソースコードをダウンロードします。本ドキュメント作成時の最新はlapack-3.11.0.tar.gz(2)ターミナルでダウンロードしたファイルを展開します。
tar xzf v3.11.0.tar.gz(3)展開したフォルダへ移動します。
cd lapack-3.11.0(4)
make.inc.example
というファイルをmake.inc
として複製します。
cp make.inc.example make.inc(5)
make.inc
を編集します。以下の設定を行ってください:
(ここでTIMER = INT_CPU_TIMEはもともと#が行頭についてコメントとなっていますが、その#を外してください。)
FC = nagfor FFLAGS = -O2 -dcfuns -ieee=full -fpp FFLAGS_DRV = $(FFLAGS) FFLAGS_NOOPT = -O0 -dcfuns -ieee=full -fpp TIMER = INT_CPU_TIME(6)LAPACKとBLASライブラリをビルドします。
make install blaslib lapacklib(7)正常にビルドが終われば、以下の2つのファイルが生成されます。
liblapack.a librefblas.a
テストプログラムの作成
次に、動作の確認をするための簡単なテストプログラム(以下は連立方程式を解くコードです)を作成します。以下のコードをtest.f90
という名前のファイルに保存してください:
program main implicit none integer, parameter :: n = 3 integer info integer ipiv(n) double precision a(n, n), b(n) a = reshape( [ 33D0, 16D0, 72D0, & -24D0, -10D0, -57D0, & -8D0, -4D0, -17D0 ], [3,3], order=[2,1] ) b = [ -359D0, 281D0, 85D0 ] call dgesv(n, 1, a, n, ipiv, b, n, info) print '((f9.4))', b end program
テストプログラムのコンパイルと実行
(1)テストプログラムをコンパイルします:nagfor test.f90 -L. -llapack -lrefblas(2)テストプログラムを実行します:
./a.out出力:
1.0000 -2.0000 -5.0000