Windows で GotoBLAS2 バージョン 1.13 と CBLAS をビルドとインストール(Windows 上の Cygwin を使用)
GotoBLAS とは,ATLAS と並んで,BLAS 実装の決定版です. (所定の条件下で,無料で使えるソフトウェアの範囲では,そう言い切ってしまって良いと考えています.ライセンス条項は各自でよく確認すること.どちらもソフトウェアです).
CBLAS は,それらの BLAS 実装を,C 言語から使えるようにするためのプログラムです(本来の BLAS 実装は FORTRAN).
このページでは, GotoBLAS と CBLAS のインストール手順を説明する.
* GotoBLAS は「フリーソフトウェア」ではない.ダウンロードしたら、同封のライセンス条項をよく確認すること. 特に、商用や業務での利用でも十分に気をつけてください.また、 ライセンス条項に定められている 再配布の条件にも十分に気をつけてください。 ライセンス条項を理解せずに, バイナリやソースコードを人にあげること(再配布すること)はできません.(「パソコンを借りてインストールしてあげる」こともやめましょう).
* GotoBLAS を octave に組み込む方法は,別の Web ページなどで説明する.
- Windows を使う.
* Linux での GotoBLAS と CBLAS をビルドとインストールについては, 別の Web ページで説明する.
- GotoBLAS と CBLAS のソースコードからコンパイルします.それには C コンパイラなどが必要. そこで,C コンパイラを含むソフトウェアである Cygwin を使う.
- GNU のコンパイラ
あるいは
MinGW のコンパイラを使う(好きなほうを選んでください)
* このページでは,Cygwin 上で動く GNU のコンパイラを「GNU のコンパイラ」、 MinGW 由来の GNU のコンパイラを「MinGW のコンパイラ」と書いています.
BLAS の主な機能(ごく一部を紹介)
- Level 1 ベクトルとベクトルの演算
- DOT : 内積
- AXPY : AXPY 演算 ( y <- ax + y の形など)
- NORM : ノルム など
- Level 2 行列とベクトルと計算
- 行列とベクトルの積 ( y <- Ax )
- 行列の rank-1 更新 ( A <- A + xy' )
- Level 3 行列同士の演算
- 行列と行列の積 ( Z <- XY )
【関連する外部ページ】
- GotoBLAS チュートリアル: http://jasp.ism.ac.jp/kinou2sg/contents/RTutorial_Goto1211.pdf
- PS3とLinux Core2 Quadの最大演算性能: http://todotani.cocolog-nifty.com/blog/2008/05/core2_quad_1020.html
◆ 謝辞
「Octave for Windows メモの筆者」様 (http://www40.atwiki.jp/gnuoctavejp)に、 MinGW コンパイラ等の情報をいただきました。ありがとうございます
前準備
前もってインストールしておくべきソフトウェア
- Cygwin のセットアッププログラム setup-x86_64.exe のダウンロード: 別ページ »で説明
事前に決めておく事項
- CBLAS のソースコードを展開してできるディレクトリ: /tmp/CBLAS
前もって調べておく事項
- Cygwin インストールディレクトリ: C:\Cygwin
インストール手順
GotoBLAS と CBLAS のコンパイルに必要なソフトウェア等を Cygwin のパッケージを使ってインストール
Cygwin のセットアッププログラム setup.exe を使って, GotoBLAS と CBLAS をソースプログラムからコンパイルするのに必要となる他のソフトウェアをインストールする.簡単にインストールできる.
- セットアッププログラムの開始
- パッケージ選択画面 (Select Packages)」まで進む
- パッケージ選択画面で,パッケージを選ぶ
下記のパッケージを選ぶ.
- Devel/gcc4 (GNU GCC コンパイラ・バージョン 4)
- Devel/gcc4-fortran (GNU Fortran コンパイラ・バージョン 4)
- Devel/make
- Devel/mingw64-i686-gcc
- Devel/mingw64-i686-gcc-core
- Devel/mingw64-i686-gcc-fortran
- Devel/patchutils
- Web/wget
gcc4, gcc4-fortran などは,必ず最新バージョンを選ぶ (gcc バージョン 4.3 系列では、GotoBLAS のビルド時にエラーが無くても、あとで不具合が見つかる場合がある)
libstdc++ なども,必ず gcc とバージョンを一致させておく
- 終了の確認
GotoBLAS のインストール手順
【関連する外部ページ】http://jasp.ism.ac.jp/kinou2sg/contents/RTutorial_Goto1211.pdf
- GotoBLAS の Web ページ: https://www.tacc.utexas.edu/research-development/tacc-software/gotoblas2
- ダウンロードしたいので,「Download GotoBLAS2 Code」をクリック(現在リンク切れ)
- ダウンロードしたいので,「click here」をクリック
- ダウンロードが始まる
- ダウンロードしたファイルを展開(解凍)
ここから先の操作は,Cygwin のコンソール で行う.
まず,ダウンロードしたファイルを,C:\cygwin\tmp の下にコピー.
次のように「tar -xvzof ...」で展開(解凍)する.
tar -xvzof GotoBLAS2-1.13_bsd.tar.gz
- ライセンス条項の確認
ライセンス条項を理解できないのならば使用してはいけない(下につけたスクリーンショットではなく、必ず、同封のライセンス条項を確認してください)
cd GotoBLAS2 cat 00License.txt
- (オプション)CPU の種類の確認
CPU の種類を確認するために「cat /proc/cpuinfo」を実行 下記のように「processor :」の行が複数あるときは,マルチプロセッサあるいはマルチコアという意味になる.
- インストールの方法については 02QuickInstall.txt 等を確認する
- ビルド
Cygwin のコンソール で,make を実行
* GNU のコンパイラを使う場合の実行例
まずは gcc のバージョンを確認しておく(gcc バージョン 4.3 系列では、ビルド時にエラーが無くても、あとで不具合が見つかる場合がある)
※ なお CC=gcc-4, FC=gfortran-4 と指定するよりは CC=gcc, FC=gfortran の方が良さそう.詳しくは Makefile.sysstem
※ なお 「USE_OPENMP=1」を付けると途中で止まる場合があります.
○ マルチスレッド版が欲しい場合の実行例
make -j 2 BINARY=32 USE_THREAD=1 CC=gcc FC=gfortran
○ シングルスレッド版が欲しい場合の実行例
make -j 2 BINARY=32 USE_THREAD=0 CC=gcc FC=gfortran
* MinGW のコンパイラを使う場合の実行例
まずは i686-w64-mingw32-gcc のバージョンを確認しておく.
make -j 2 BINARY=32 USE_THREAD=1 CC=i686-w64-mingw32-gcc FC=i686-w64-mingw32-gfortran
- ビルドの終了の確認
* GNU のコンパイラを使う場合の実行結果例
* MinGW のコンパイラを使う場合の実行結果例
「make BINARY=32 USE_THREAD=1 CC="i686-w64-mingw32-gcc -mthreads" FC="i686-w64-mingw32-gfortran -mthreads"」を実行した場合の実行結果例
- インストール
* GNU のコンパイラを使う場合の実行例
dll ファイルもコピー(役立つ可能性がある)
cp *.a /usr/lib cp exports/libgoto2.dll /usr/lib/libgoto2.dll.a cp exports/libgoto2.def /usr/lib/libgoto2.def
* MinGW のコンパイラを使う場合の実行例
cp *.lib /usr/lib cp exports/*.dll /usr/lib cp exports/*.def /usr/lib cd /usr/lib cp libgoto2.dll libgoto2.dll.a
- (オプション)lapack のビルドとインストール
- まず、lapack-3.1.1/make.inc を編集.BLASLIB, FORTRAN を設定
* GNU のコンパイラを使う場合の設定例
FORTRAN = gfortran-4 -fimplicit-none -g -fexceptions -m32 -mthreads ... TMGLIB = libtmglib_LINUX.a
* MinGW のコンパイラを使う場合の設定例
FORTRAN = i686-w64-mingw32-gfortran -fimplicit-none -g -fexceptions -m32 -mthreads ... LAPACKLIB = liblapack_LINUX.lib LAPACKLIB_O = liblapack_LINUX_p.lib ... BLASLIB = /usr/lib/libgoto2.lib TMGLIB = libtmglib_LINUX.lib
- 次の手順でビルドとインストール
* GNU のコンパイラを使う場合
cd lapack-3.1.1 make clean make cp liblapack_LINUX.a /usr/lib cp libtmglib_LINUX.a /usr/lib
* MinGW のコンパイラを使う場合
cd lapack-3.1.1 make clean make cp liblapack_LINUX.lib /usr/lib cp libtmglib_LINUX.lib /usr/lib
- まず、lapack-3.1.1/make.inc を編集.BLASLIB, FORTRAN を設定
性能測定の例
* ハードウェアとソフトウェア
- CPU: Intel Core2 Duo E8500
- OS: Windows XP + Cygwin
- コンパイラ: GNU コンパイラ (Cygwin パッケージのもの)
- Cygwin 上でソースコードからビルドした Octave バージョン 3.0.3
- GotoBLAS バージョン 1.26
- LAPACK バージョン 3.2 インストール手順は,別の Web ページに記述
* 実測値の例 (Intel Core2 Duo E8500)
【要点】 Octave は,ソースコードからビルド, Intel Core2 Duo E8500, Cygwin, Windows XP, Octave バージョン 3.0.3 + GotoBLAS バージョン 1.26

(a) 行列と行列の積

(b) 分散共分散行列

(c) 分散共分散行列の固有値と固有ベクトル(主成分分析)

(d) 条件分岐プログラム( 2ch の「データ解析ツールoctaveを語ろう」掲示板で話題になっているもの.この掲示板のプログラムを引用している)
実測値
CBLAS のインストール方法
- BLAS Technical Forum の Web ページを開く
- 「Reference implementation for the C interface to the Legacy BLAS」をクリック.ダウンロードが始まる.
- ダウンロードしたソースコードを,/tmp の下に展開./tmp/CBLAS ができる
- (オプション)もし Makefile.in が存在しないときは ln -s Makefile.LINUX Makefile.in を実行
- Makefine.in を編集
CC と FC については,GotoBLAS をビルドしたときに使われた C, FORTRAN コンパイラを指定する.
* GNU のコンパイラを使う場合の設定例
BLLIB = /usr/lib/libgoto2.a ・・・ GotoBLASのパスを指定 CC = gcc FC = gfortran
* MinGW のコンパイラを使う場合の設定例
BLLIB = /usr/lib/libgoto2.lib ・・・ GotoBLASのパスを指定 CC = i686-w64-mingw32-gcc FC = i686-w64-mingw32-gfortran
- ビルド
make all
- ビルド結果の確認
* GNU のコンパイラを使う場合の実行結果例
* MinGW のコンパイラを使う場合の実行結果例
- インストール
cd /tmp/CBLAS/lib cp cblas_LINUX.a /usr/lib/libcblas.a cd /tmp/CBLAS/include cp *.h /usr/include
- サンプルプログラムのテスト実行
* GNU のコンパイラを使う場合の実行例
cd /tmp/CBLAS/examples gcc cblas_example1.c -lcblas -lgoto2 ./a.exe
* MinGW のコンパイラを使う場合の実行例
cd /tmp/CBLAS/examples i686-w64-mingw32-gcc -I/usr/include cblas_example1.c -L/usr/lib -lcblas /usr/lib/libgoto2.lib ./a.exe
cblas_example1.c を引用すると次の通り。
- cblas_dgemv() : 行列とベクトルの積
- lncy = 1, lnvy = 1 になっている