サイト構成 | データベース関連技術 | データの扱い | インストール,設定,利用 | プログラミング | 情報工学の講義実習 | サポートページ | 連絡先,業績など |
この Web ページでは, ATLAS と CBLAS と LAPACK のインストール手順を図解で説明する.
※ 関連Webページ: Linux で開発環境やツールを整備
<BLAS の機能の概要(ごく一部)>
<ATLAS と LAPACK のインストールの要点>
ATLAS は BSD ライセンスとなっているようです.ライセンス条項は,各自でよく確認してください.
※ Windows の Cygwin での手順は,別のページで説明している
※ FreeBSD での手順は,別のページで説明している
ATLAS のビルドと同時に,LAPACK 3.5.0 をソースコードからビルドするのですが,GNU の FORTRAN コンパイラ・バージョン 3 を使うことはできないためです.
※ ライセンス条項の確認は必ず行うこと
<この Web ページについて>
情報共有のために,この Web ページを公開している.ATLAS の情報減としては、 ATLAS errata ファイルや,ATLAS の説明書を読みきっていない等の問題を自覚している. 参考情報としてお使いください.
Octave や ATLAS に関しては,「octave for windowsメモの筆者」様が, http://c.2ch.net/ の「データ解析ツールoctaveを語ろう」掲示板 に書かれた内容を読み,掲示板での議論を通して,いくつかの貴重な示唆,ヒントを頂きました.この掲示板の匿名の投稿者の方々からも,やはり,重要な示唆を頂きました. この掲示板が無ければ,この Web ページはなかったでしょう. ありがとうございました.この場を借りてお礼申し上げます. ごく一部を以下に紹介しておきます(私の判断で,大胆にまとめると次のようになる.詳しくは掲示板をご覧下さい).
ここで,敬意を込めて, 「octave for windowsメモの筆者」様の URL を記しておきます. http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (「リンクの許可は要りません」に甘えまして,リンクを張っています) ⇒ この Web ページは,分かりやすく,また,Octave に関係する種々の有益な情報が載ったページです.この Web ページからもたくさんの情報を得ました. (ごく一部紹介しますと,Octave の MinGW ライブラリキットのリリース等々で,昔から継続的に多大な貢献をされておられます).
※ 本 Web ページに残っているであろうミスは,掲示板等のミスではなく,本 Web ページの作者である私の責任です.
http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html のように,Octave については,すでに多数の優れた情報源があります, Octave を使いたい方は,そちらを見ていただきたいと考えています.例えば,ATLAS の性能をより引き出す方法(そのヒント)なども得られることでしょう.
この Web ページでは、以下,次の3通りの手順について説明している
■ Ubuntu の場合の操作手順(例)
sudo apt-get -yV update sudo apt-get -yV upgrade sudo shutdown -r now
■ Fedora の場合の操作手順(例)
yum check-update yum update
◆ Ubuntu での操作手順(例)(パッケージを用いてインストールする場合)
バージョン 3.8.4 がインストールされます (2012/06 時点)
sudo apt-get install gnome-applets sudo cpufreq-selector -g performance sudo apt-get -yV install libatlas-base-dev sudo apt-get -yV install libatlas-dev sudo apt-get -yV install libatlas-doc sudo apt-get -yV install libatlas-test sudo apt-get -yV install libatlas3gf-base
◆ Ubuntu での操作手順(例)(ソースパッケージを用いてビルドとインストールを行う場合)
バージョン 3.8.4 がインストールされます (2012/06 時点)
※ multilib (g++-4.6-multilib, gcc-4.6-multilib, gfortran-4.6-multilib など) がインストールされていると、うまくビルドできない場合があります.
sudo apt-get install gnome-applets sudo cpufreq-selector -g performance mkdir /tmp/atlas cd /tmp/atlas apt-get source libatlas-dev sudo apt-get -yV build-dep libatlas-dev cd atlas-3.8.4 LANG=C sudo dpkg-buildpackage -uc -us -rfakeroot cd .. sudo dpkg -i *.deb
◆ Ubuntu 12.04 での実行結果(例)
◆ Fedora での操作手順(例)(パッケージを用いてインストールする場合)
sudo yum -y install atlas-sse atlas-sse2 atlas-sse3 atlas-devel atlascpp-devel atlas
楽をしたいのでシェルスクリプトを作りました。 1つ1つコマンドを入力したい(シェルスクリプトにしたくない)場合については、この Web ページの下で説明している.
※ multilib (g++-4.6-multilib, gcc-4.6-multilib, gfortran-4.6-multilib など) がインストールされていると、うまくビルドできない場合があります.
#!/bin/bash sudo apt-get -yV install build-essential # GNU gcc, g++, gfortran を使う場合: gcc, g++, gfortran # Intel Compiler を使う場合: CC=icc, icpc, ifort if [ -x /opt/intel/bin/icc ]; then if [ -x /opt/intel/bin/ifort ]; then echo USE Intel Compiler USEINTEL=YES fi fi if [ "$USEINTEL" = "YES" ]; then if [ `arch` = 'i686' ]; then source /opt/intel/bin/compilervars.sh ia32 fi if [ `arch` = 'x86_64' ]; then source /opt/intel/bin/compilervars.sh intel64 fi fi # LAPACK 前提ソフトウエアをパッケージを用いてインストール (install LAPACK build dependency softwares using package) mkdir /tmp/lapack cd /tmp/lapack apt-get source liblapack-dev sudo apt-get -yV build-dep liblapack-dev # ATLAS 前提ソフトウエアをパッケージを用いてインストール (install ATLAS build dependency softwares using package) mkdir /tmp/atlas cd /tmp/atlas apt-get source libatlas-dev sudo apt-get -yV build-dep libatlas-dev # BLAS 参照実装のダウンロードとビルド (Download BLAS reference implementarion and build it and install it) cd /tmp if [ ! -f blas.tgz ]; then wget http://netlib.org/blas/blas.tgz fi rm -rf BLAS tar -xvzof blas.tgz cd /tmp/BLAS if [ "$USEINTEL" = "YES" ]; then # Intel Compiler if [ `arch` = 'i686' ]; then make LOADER="ifort -fPIC" FORTRAN="ifort -m32 -fPIC" elif [ `arch` = 'x86_64' ]; then make LOADER="ifort -fPIC" FORTRAN="ifort -m64 -fPIC" fi else # GNU Compiler if [ `arch` = 'i686' ]; then make LOADER="gfortran -fPIC" FORTRAN="gfortran -m32 -fPIC" elif [ `arch` = 'x86_64' ]; then make LOADER="gfortran -fPIC" FORTRAN="gfortran -m64 -fPIC" fi fi sudo cp blas_LINUX.a /usr/local/lib # LAPACK バージョン 3.5.0 のダウンロードとビルドとインストール (Download lapack 3.5.0 and build it and install it) sudo apt-get install gnome-applets sudo cpufreq-selector -g performance cd /tmp if [ ! -f lapack-3.5.0.tgz ]; then wget http://www.netlib.org/lapack/lapack-3.5.0.tgz fi rm -rf lapack-3.5.0 tar -xvzof lapack-3.5.0.tgz cd /tmp/lapack-3.5.0 if [ "$USEINTEL" = "YES" ]; then # Intel Compiler F1="-fPIC -fomit-frame-pointer -mfpmath=sse -fexceptions -funroll-all-loops -O3 -march=native" cp INSTALL/make.inc.ifort make.inc if [ `arch` = 'i686' ]; then make LOADER="ifort -fPIC" FORTRAN="ifort -m32 -mieee-fp $F1 " BLASLIB="/tmp/BLAS/blas_LINUX.a -lpthread -ldl" elif [ `arch` = 'x86_64' ]; then make LOADER="ifort -fPIC" FORTRAN="ifort -m64 -mieee-fp $F1 " BLASLIB="/tmp/BLAS/blas_LINUX.a -lpthread -ldl" fi else # GNU Compiler F1="-fPIC -fomit-frame-pointer -mfpmath=sse -msse3 -fno-schedule-insns2 -fopenmp -fno-tree-loop-optimize -fno-tree-vectorize -fexceptions -funroll-all-loops -O3 -march=native" cp make.inc.example make.inc if [ `arch` = 'i686' ]; then make LOADER="gfortran -fPIC" FORTRAN="gfortran -m32 -mieee-fp $F1" BLASLIB="/tmp/BLAS/blas_LINUX.a -lgfortran -lgomp -lpthread -ldl" elif [ `arch` = 'x86_64' ]; then make LOADER="gfortran -fPIC" FORTRAN="gfortran -m64 -mieee-fp $F1" BLASLIB="/tmp/BLAS/blas_LINUX.a -lgfortran -lgomp -lpthread -ldl" fi fi sudo cp liblapack.a /usr/local/lib/liblapack.a sudo cp libtmglib.a /usr/local/lib/libtmglib.a sudo chmod 755 /usr/local/lib/liblapack.a sudo chmod 755 /usr/local/lib/libtmglib.a # LAPACK の共有オブジェクト (LAPACK shared object) cd /tmp/lapack-3.5.0 rm -rf hoge mkdir hoge cd hoge ar x ../liblapack.a gcc -shared -o liblapack.so *.o sudo cp liblapack.so /usr/local/lib/liblapack.so cd /tmp/lapack-3.5.0 rm -rf hoge mkdir hoge cd hoge ar x ../libtmglib.a gcc -shared -o libtmglib.so *.o sudo cp libtmglib.so /usr/local/lib/libtmglib.so # ATLAS のダウンロードとビルドとインストール (Download ATLAS 3.10.1 and build it and install it) sudo apt-get install gnome-applets sudo cpufreq-selector -g performance cd /tmp if [ ! -f atlas3.10.1.tar.bz2 ]; then wget http://sourceforge.net/projects/math-atlas/files/Developer%20%28unstable%29/3.10.1/atlas3.10.1.tar.bz2 fi cd /tmp rm -rf ATLAS rm -rf ATLAS3.10.1 tar -xvjof atlas3.10.1.tar.bz2 mv ATLAS ATLAS3.10.1 cd ATLAS3.10.1 mkdir B1 cd B1 if [ "$USEINTEL" = "YES" ]; then # Intel Compiler FF="-fomit-frame-pointer -mfpmath=sse -mavx -O2 -fno-schedule-insns2 -fPIC -m32" if [ `arch` = 'i686' ]; then source /opt/intel/bin/compilervars.sh ia32 ../configure -b 32 --prefix=/usr/local/atlas -C ic 'icc' -F ic '$FF' -C sm 'icc' -F sm '$FF' -C dm 'icc' -F dm '$FF' -C sk 'icc' -F sk '$FF' -C dk 'icc' -F dk '$FF' -C xc 'icc' -F xc '$FF' -C if 'ifort' -F if '$FF' elif [ `arch` = 'x86_64' ]; then source /opt/intel/bin/compilervars.sh intel64 ../configure -b 64 --prefix=/usr/local/atlas -C ic 'icc' -F ic '$FF' -C sm 'icc' -F sm '$FF' -C dm 'icc' -F dm '$FF' -C sk 'icc' -F sk '$FF' -C dk 'icc' -F dk '$FF' -C xc 'icc' -F xc '$FF' -C if 'ifort' -F if '$FF' -Si nof77 0 fi else if [ `arch` = 'i686' ]; then ../configure -b 32 --prefix=/usr/local/atlas -Fa alg '-fPIC -DPIC -mieee-fp -fopenmp' -Si omp 1 -Si latune 1 # -Ss f77lib -lgfortran -lgcc_s -lpthread elif [ `arch` = 'x86_64' ]; then ../configure -b 64 --prefix=/usr/local/atlas -Fa alg '-fPIC -DPIC -mieee-fp -fopenmp' -Si omp 1 -Si latune 1 fi fi make make time sudo rm -f /usr/local/atlas/lib/*.so sudo make install # ATLAS の共有オブジェクト (.so) の生成とインストール cd lib make ptshared cptshared sudo cp *.so /usr/local/atlas/lib # CBLAS のサンプルプログラム cd /tmp if [ ! -f cblas.tgz ]; then wget http://www.netlib.org/blas/blast-forum/cblas.tgz fi cd /tmp sudo rm -rf /tmp/CBLAS tar -xvzof cblas.tgz cd /tmp/CBLAS cd examples gcc -o a.out -I/usr/local/atlas/include cblas_example1.c -L/usr/local/atlas/lib -lptcblas -lptf77blas -latlas -lpthread -lgomp ./a.out
Linux のビット数は,「32」か「64」のいずれか.必ず調べておく.arch コマンドで簡単に確認できる
CPU の周波数と論理コア数は,「cat /proc/cpuinfo」を使って,簡単に分かる.
cat /proc/cpuinfo
■ Ubuntu の場合の操作手順(例)
sudo apt-get -yV install build-essential # 前提ソフトウエア cd /tmp apt-get source atlas sudo apt-get build-dep atlas
■ Fedora の場合の操作手順(例)
yum groupinstall -y "Development Tools" yum install gcc yum install gcc-c++ yum install gcc-gfortran yum install compat-gcc-34-g77 yum install make
LAPACK のビルドのために ATLAS が欲しい.ATLAS のビルドのために LAPACK が欲しい,という状況なので, 先に ATLAS, LAPACK をパッケージを使ってインストールし.後で LAPACK, ATLAS をビルドという手順を踏むことにする.
◆ Ubuntu での操作手順(例)
# LAPACK を Ubuntu でパッケージを用いてインストールを行う mkdir /tmp/lapack cd /tmp/lapack apt-get source liblapack-dev sudo apt-get -yV build-dep liblapack-dev # ATLAS を Ubuntu でパッケージを用いてインストールを行う mkdir /tmp/atlas cd /tmp/atlas apt-get source libatlas-dev sudo apt-get -yV build-dep libatlas-dev
BLAS 参照実装のダウンロードとビルドを行なっておきたい (LAPACK のビルドで使う). 次のシェルスクリプトを実行する.
#!/bin/bash
if [ -x /opt/intel/bin/icc ]; then
if [ -x /opt/intel/bin/ifort ]; then
echo USE Intel Compiler
USEINTEL=YES
fi
fi
if [ "$USEINTEL" = "YES" ]; then
if [ `arch` = 'i686' ]; then
source /opt/intel/bin/compilervars.sh ia32
fi
if [ `arch` = 'x86_64' ]; then
source /opt/intel/bin/compilervars.sh intel64
fi
fi
cd /tmp
if [ ! -f blas.tgz ]; then
wget http://netlib.org/blas/blas.tgz
fi
rm -rf BLAS
tar -xvzof blas.tgz
cd /tmp/BLAS
if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler
if [ `arch` = 'i686' ]; then
make LOADER="ifort -fPIC" FORTRAN="ifort -m32 -fPIC"
elif [ `arch` = 'x86_64' ]; then
make LOADER="ifort -fPIC" FORTRAN="ifort -m64 -fPIC"
fi
else
# GNU Compiler
if [ `arch` = 'i686' ]; then
make LOADER="gfortran -fPIC" FORTRAN="gfortran -m32 -fPIC"
elif [ `arch` = 'x86_64' ]; then
make LOADER="gfortran -fPIC" FORTRAN="gfortran -m64 -fPIC"
fi
fi
下記の手順でLAPACK のソースコードのダウンロードと展開を行う.
cd /tmp tar -xvzof lapack-3.5.0.tgz
※ 「/tmp/lapack-3.5.0 が無いよ」というときは, http://www.netlib.org/lapack/ から lapack-3.5.0.tgz をダウンロードして, 「tar -xvzof lapack-3.5.0.tgz」を実行
※ Intel のコンパイラを使いたいときは,「cp INSTALL/make.inc.example.ifort make.inc」を実行してください
LAPACK の設定ファイル /tmp/lapack-3.5.0/make.inc の設定例は次の通り
BLASLIIB の行 には,BLAS のライブラリファイル名(1つ)を書くとともに,「-l...」を並べます.
BLASLIB=/tmp/BLAS/blas_LINUX.a -lgfortran -lgomp -lpthread -ldl
BLASLIB=/tmp/BLAS/blas_LINUX.a -lpthread -ldl
FORTRAN=gfortran -m32 -fPIC -mieee-fp -fomit-frame-pointer -mfpmath=sse -msse3 -fno-schedule-insns2 -fopenmp -fno-tree-loop-optimize -fimplicit-none -fno-tree-vectorize -fexceptions -funroll-all-loops -O3 -march=native
FORTRAN=gfortran -m64 -fPIC -mieee-fp -fomit-frame-pointer -mfpmath=sse -msse3 -fno-schedule-insns2 -fopenmp -fno-tree-loop-optimize -fimplicit-none -fno-tree-vectorize -fexceptions -funroll-all-loops -O3 -march=native
FORTRAN=ifort -m32 -fPIC -mieee-fp -fomit-frame-pointer -mfpmath=sse -fexceptions -funroll-all-loops -O3 -march=native
FORTRAN=ifort -m64 -fPIC -mieee-fp -fomit-frame-pointer -mfpmath=sse -fexceptions -funroll-all-loops -O3 -march=native
「-march=native」は Pentium 系のマシンにおいて「そのマシンの CPU に特化したコードを生成する」という意味.詳しくは「gcc -E -v -march=native -」
その後,「make clean」,「make」
make clean make
◆ GNU のコンパイラを使ったときの実行結果例
sudo cp liblapack.a /usr/local/lib/liblapack.a sudo cp libtmglib.a /usr/local/lib/libtmglib.a sudo chmod 755 /usr/local/lib/liblapack.a sudo chmod 755 /usr/local/lib/libtmglib.a
共有オブジェクトを生成したいときは「-fPIC」を付けてコンパイルしておくこと
cd /tmp/lapack-3.5.0 rm -rf hoge mkdir hoge cd hoge ar x ../liblapack.a gcc -shared -o liblapack.so *.o sudo cp liblapack.so /usr/local/lib/liblapack.so cd /tmp/lapack-3.5.0 rm -rf hoge mkdir hoge cd hoge ar x ../libtmglib.a gcc -shared -o libtmglib.so *.o sudo cp libtmglib.so /usr/local/lib/libtmglib.so
http://math-atlas.sourceforge.net/atlas_install/atlas_install.html
http://math-atlas.sourceforge.net/
最新のファイル が欲しい. 「Development (unstable)」→ パージョンを選択し、 altlas.ほにゃらら.tar.bz2をクリック ※ 最新の Stable が欲しいという場合には,下の方の Stable を展開して,ダウンロードする. ※ 但し,Core i7 のように新しい CPU を使う場合には,Stable よりも,最新のファイル(たとえ unstable であっても)うまくいく可能性がある.
クリックすると,ダウンロードが始まる.
cd /tmp rm -rf ATLAS rm -rf ATLAS3.10.1 tar -xvjof atlas3.10.1.tar.bz2
mv ATLAS ATLAS3.10.1
作業用のディレクトリの作成.「B1」のところは好きな名前でよい.
cd ATLAS3.10.1 mkdir B1 cd B1
※ cpufreq-selector の install
sudo apt-get install gnome-applets
これを忘れると、configure の時点でエラーが出る場合がある.
sudo cpufreq-selector -g performance
「--prefix=/usr/local/atlas」で指定するディレクトリは何でもいいですが,分かりやすいディレクトリに設定すること.
■ 32 ビットの場合
※ ATLAS 3.10, ATLAS 3.9 系列を使いたいときは「-Si latune 1」をつける
../configure -b 32 --prefix=/usr/local/atlas -Fa alg '-fPIC -DPIC -mieee-fp -fopenmp' -Si omp 1 -Si latune 1
■ 64 ビットの場合
※ ATLAS 3.10, ATLAS 3.9 系列を使いたいときは「-Si latune 1」をつける
../configure -b 64 --prefix=/usr/local/atlas -Fa alg '-fPIC -DPIC -mieee-fp -fopenmp' -Si omp 1 -Si latune 1
※ ビルドがうまくいかないときのヒント
ビルドがうまくいかないとき,configure の引数の値を調整するとうまくいくことがある
■ Intel Xeon E5450 の場合
⇒ 実行手順の例
../configure -t 8 -m 3000 -b 64 -D c -DPentiumCPS=3000 -D c -DWALL --prefix=/usr/local/atlas -A Corei764SSE -Fa alg '-fPIC -DPIC -fopenmp'
※ 「-t ... -m ...」のところは,コア数と周波数を正しく設定すること.
<説明>
マルチコアの CPU では,「-t <コア数>」を引数に含めます. 「-t 8 」は、「コア数が 8 個」というような意味.コア数が 2 個のときは -t 2 になる. 「-t <コア数>」を付けると,ATLAS のシングルスレッド版とマルチスレッド版の両方のライブラリファイルがビルドされる.
マルチコアの CPU でない場合には,「-t <コア数>」を付けないで下さい. ATLAS のシングルスレッド版のライブラリファイルだけがビルドされる.
周波数 (MHz 単位)
※ 32 ビットの時は -b 32 になる.
「1」にしているので,「CYGWIN でない」という意味になる.
--cc=gcc-4 -C acg gcc-4 -C ic gcc-4 -C xc gcc-4 -C dk gcc-4 -C dm gcc-4 -C if gfortran-4
使用するコンパイラを明示的に指定.
configure の結果,エラーメッセージが出ないことを確認しておく.
※ エラーメッセージが出ていたら,「rm -rf /tmp/ATLAS3.10.1/B1」の後,上記に書いている「mkdir B1」まで戻ってやり直す.
※ もし、 CPU スロットリングが有効になっているとエラーが出る CPU スロットリングが原因でエラーが出ている場合は,
make
configure で -Ss flapack /tmp/lapack-3.5.0/SRC -Si latune 1 を付けときは,ATLAS LAPACK と BLAS のテストを行う
make lapack_test_al_ab
make check
「make check」 の結果,エラーメッセージが出ないことを確認しておく.
make ptcheck
「make ptcheck」 の結果,エラーメッセージが出ないことを確認しておく.
make time
「make time」 の結果,エラーメッセージが出ないことを確認しておく.
「rm -f /usr/local/atlas/lib/*.so」は、古いバージョンがもしあれば消すための操作.
sudo rm -f /usr/local/atlas/lib/*.so sudo make install
エラーメッセージが出ていないことを確認する.
※ -Ss flapack /tmp/lapack-3.5.0/SRC -Si latune 1 を付けた場合には次のようになる.
※ 「-Ss flapack /tmp/lapack-3.5.0 /SRC -Si latune 1」 を付けていなかった場合には liblapack.a と liblapack.so がありません.
cd lib make ptshared cptshared sudo cp *.so /usr/local/atlas/lib
rm -f /usr/local/atlas/lib/liblapack.a rm -f /usr/local/atlas/lib/liblapack.so
次の1行を追加する
/usr/local/atlas/lib
その後,下記のコマンドを実行する
sudo /sbin/ldconfig
http://www.netlib.org/blas/blast-forum/
tar -xvzof cblas.tgz cd /tmp/CBLAS cd examples gcc -o a.out -I/usr/local/atlas/include cblas_example1.c -L/usr/local/atlas/lib -lptcblas -lptf77blas -latlas -lpthread -lgomp ./a.out
cblas_example1.c を引用すると次の通り。