ちっぷす: ATLAS と LAPACK
やはり数値計算も速いに越したことないし、Linux と MacOS X
で同じコードですむならもっと幸せなので、MacOS X に ATLAS と LAPACK
をインストール。ATLAS じゃなくて BLAS でもいいのかもしれないけど、やっぱり C
でプログラミングしたいし、なんか速そうだから。
ATLAS
ここからatlas3.3.14.tar.gzをもらってくる。でも bz2
の方がだいぶ小さいので、これを機に bzip2 を入れた方がいいかも知れない。
- まずファイルを適当に展開。
tar zxf atlas3.3.14.tar.gz && cd atlas
- おもむろにコンパイル。でも gcc がないので、cc を指定する。
make CC=cc
いろいろ質問されるが、全部リターンキーだけでも、だいたい大丈夫。
- で、ライブラリを作る。
make install arch=OSX_PPCG4AltiVec
これでライブラリはできあがる。途中、エラーで止まったら、
ごく単純にもう一度 make してみる。コンパイルには長時間かかるので、
1時間くらいは覚悟しておく。
やっぱりエラーになる場合、bin/OSX_PPCG4AltiVec/INSTALL_LOG
に cd して、一番新しいファイルの末尾に、
どんなコマンドでどんなエラーが出たか書いてあるので、適当に対処する。
シェルスクリプトでエラーが出てたら、
その中で実行されてるコマンドをもう一度手動でやってみたりする。
うまく行ったらまた make。
- 適当な場所に、できたライブラリやインクルードファイルをコピー。
cp lib/OSX_PPCG4AltiVec/*.a /usr/local/lib
cp -r include /usr/local/include/atlas
/usr/local/libあたりがなければ、作ってもいいし、
他の場所にコピーしても良い。
CLAPACK
本家からclapack.tgzをもらってきて、適当に展開。
- まずはmake.incの編集。コンパイラのフラグは
INSTALL/make.inc.LINUX を参考にする。
- PLATをOSX_PPCG4AltiVecに
- BLASLIBを-L/usr/local/lib ../../libcblaswr.a -lcblas
-latlasに
- f2clibを作る。
make f2clib
- BLASをATLASで置き換えたので、そのラッパーライブラリを作る。
cd BLAS/WRAP && make && cp libcblaswr.a ../..
- 手動で ranlib する。
ranlib /usr/local/lib/libcblas.a
ranlib /usr/local/lib/libatlas.a
ranlib ../../libcblaswr.a
- BLASのテスト。
cd BLAS/TESTING && make -f Makeblat2 && make -f
Makeblat3
あとなんか README に従ってやってみる。するとエラーが出る。
TransA must be 111, 112 or 113, but is set to -1Parameter 2 to routine cblas_sg mv was incorrect
いかんともしがたいので、無視。
- やっと、LAPACKを作るとこまできた。
cd SRC && make
たくさんコンパイルする。時間もだいぶかかる。G4 Cube(PPC G4 450MHz)、
メモリ1.25GBで40分くらい。できるライブラリも10MBくらいある。
- たくさんテスト。
cd TESTING/MATGEN; make
cd TESTING/TIMING; make
cd TESTING; make
xlintims < sblasa.in > sblasa.out
xlintims < sblasb.in > sblasb.out
xlintims < sblasc.in > sblasc.out
xlintims < cblasa.in > cblasa.out
xlintims < cblasb.in > cblasb.out
xlintims < cblasc.in > cblasc.out
xlintims < dblasa.in > dblasa.out
xlintims < dblasb.in > dblasb.out
xlintims < dblasc.in > dblasc.out
xlintims < zblasa.in > zblasa.out
xlintims < zblasb.in > zblasb.out
xlintims < zblasc.in > zblasc.out
インストール
案外面倒。
以下のものを、/usr/local/libにコピーする。
- CLAPACK/lapack_OSX_PPCG4AltiVec.a
- CLAPACK/libcblaswr.a
- CLAPACK/F2CLIBS/libF77.a
- CLAPACK/F2CLIBS/libI77.a
- ATLAS/lib/OSX_PPCG4AltiVec/libatlas.a
- ATLAS/lib/OSX_PPCG4AltiVec/libcblas.a
cd /usr/local/lib して、ln -s lapack_OSX_PPCG4AltiVec.a
liblapack.a とかする。
以下のものを、/usr/local/includeにコピーする。
- CLAPACK/F2CLIBS/f2c.h
- CLAPACK/BLAS/WRAP/blaswrap.h
使い方
C のソースファイルでは、
- #include <blaswrap.h>
- #include <f2c.h>
という行を冒頭に入れる。コンパイルするときは、
- cc ....c -llapack -lcblaswr -lcblas -latlas -lF77
とする。