LinuxのCプログラムでatlascblasおよびgotoblasを使う方法(不完全版)
gotoblasを不完全ながらある程度使えるようになったので、記録しておくことにする。
ちなみに、中身をちゃんと理解しているわけではないので間違いが含まれている可能性は否定できません。
おかしな点についてはご指摘いただけると大変助かります。
執筆している現在、どういうわけかatlascblasはgccで使えるがg++で使えず、gotoblasはg++で使えるがgccで使えないという謎の事態に陥っています。誰か助けて。
・準備
c,c++,fortranのコンパイラが必要です。aptなりyumなりを使ってgcc,g++,gfortranあたりを導入しておく。
・atlascblasの導入と利用
aptなりyumなりで導入できることもありますが、ここではソースからインストールしてみることにする。
ATLASのサイトはこちら。Softwareのリンクからsourceforgeに飛んでダウンロード。今回はstableな3.6.0を使ってみる。
tgzを展開。install.txtを読むとインストール方法がちゃんと書いてある。
make configしてmakeしてmake install arch=
英語がだらだら書かれているけど、どれもちゃんと読めばわかるレベルの簡単英語なので、とりあえずどうすればいいのかくらいはすぐわかるはず。
インストール時チューニングが激しいため、環境によってはmake installに1日かかります。注意。
チューニングが終わるとlib/
特に今回重要なのは以下のファイル。
- libatlas.a : atlas本体。fortranで書かれているんだと思う
- libcblas.a : atlasをcから利用するためのラッパーだと思う
- libptcblas.a : libcblas.aのスレッド対応版、makeの際にpthread対応のオプションを入れた場合に生成される
利用時にはcblas.hをincludeし、libcblas.a libatlas.aをこの順にリンクすればよい。
並列版を利用したい場合はlibptcblas.a libpthread.a libatlas.aで。
・gotoblasの導入と利用
ここで入手。
To download the source code, please click hereというところから無料登録・ログインする必要あり。今回は1.15を使ってみる。
tar.gzファイルを展開。02QuickInstall.txtによると、quickbuildというスクリプトが利用できるらしい。
sh quickbuild.32bitないしsh quickbuild.64bit を実行すると一気にインストールしてくれる。
gotoblasはcbals+atlasのatlasに相当するらしく、ビルドしたライブラリをそのままcプログラムから利用できない模様。そこでReference Implementationsというものを利用する。
ここにあるReference implementation for the C interface to the Legacy BLASをダウンロード(ダウロードできるファイル名はcblas.tgz)。
READMEを参考にインストール。
今回はLinuxで利用するため、Makefile.LINUXを利用。
ファイルを開いていくつかのオプションを書き換える。
- BLLIB : 先程生成したlibgoto.aへのフルパス(libgoto.aを含むフルパス)
- CBDIR : CBDIRにはcblas.tgzを展開して得られたCBLASディレクトリのフルパス
- CC, FC : cとfortranのコンパイラを適当に指定
ln -s Makefile.ARCH Makefile.inを行い、make alllib。
問題が無ければlib/LINUX/cblas_LINUX.aが生成される。
プログラム実行時はcblas.hをインクルードし、 cblas_LINUX.a libpthread.a libgoto.aの順にリンク。
スレッド並列実行時には環境変数GOTO_NUM_THREADSを参照するので、コアの数でもセットしておけばOK。
以上でatlascblasなりgotoblasなりが使えるようになったはずである。
手元の環境でGEMMのベンチマークを行ったところ、gotoblasの方が高速となった。並列化の効果も大いに得られた。
冒頭に書いたように、どういうわけか私の手元ではそれぞれgccとg++の一方でしかビルドできていません。解決後に(不完全版)の取れたエントリを追加予定。追加できるといいなあ。
追記:
gccとg++の問題は勘違いだったかもしれん。詳細は後で。
最近のコメント