FreeBSD で ATLAS と LAPACK をビルドとインストール
このページでは, ATLAS と CBLAS と LAPACK のインストール手順を図解で説明する.
- ATLASとは, GotoBLAS と並んで,BLAS 実装の決定版です. (無料で使えるソフトウェアの範囲では,そう言い切ってしまって良いと考えています.ライセンス条項は各自でよく確認すること.どちらもソフトウェアです).
- CBLAS は,それらの BLAS 実装を,C 言語から使えるようにするためのプログラムです(本来の BLAS 実装は FORTRAN).
- CBLAS は,ATLAS に同梱されているので,ATLAS をインストールすると,CBLAS もインストールされたことになる.
- LAPACK とは,行列に関する種々の問題(連立1次方程式,固有値問題,などなど多数)を解く機能を持つソフトウェア.BLAS の機能を使う.
<BLAS の主な機能(ごく一部を紹介)>
- Level 1 ベクトルとベクトルの演算
- DOT : 内積
- AXPY : AXPY 演算 ( y <- ax + y の形など)
- NORM : ノルム など
- Level 2 行列とベクトルと計算
- 行列とベクトルの積 ( y <- Ax )
- 行列の rank-1 更新 ( A <- A + xy' )
- Level 3 行列同士の演算
- 行列と行列の積 ( Z <- XY )
<ATLAS と LAPACK のインストールの要点>
- ATLASのライセンスについて
ATLAS は BSD ライセンスとなっているようです.ライセンス条項は,各自でよく確認してください.
- FreeBSD を使う.
* Windows の Cygwin での手順は,別のページで説明している
* Linux での手順は,別のページで説明している
- ATLAS と LAPACK と CBLAS をソースコードからコンパイルします(CBLAS は,ATLAS に同梱されている).それには C コンパイラや FORTRAN コンパイラなどが必要.
- LAPACK のコンパイルには、GNU コンパイラのバージョン 4を使う.
ATLAS のビルドと同時に,LAPACK 3.2.1 をソースコードからビルドするのですが,GNU の FORTRAN コンパイラ・バージョン 3 を使うことはできないためです.
- ATLAS の configure の引数の例 (Intel E8500, 64 ビットの FreeBSD (amd) の場合の設定例)
* ATLAS バージョン 3.9.12 以上
../configure -t 2 -m 3160 -b 64 -Fa alg -fPIC -D c -DPentiumCPS=3000 -D c -DWALL -Si nof77 0 -Si nocygwin 1 --prefix=/usr/atlas \ -Ss flapack /tmp/lapack-3.2.1/SRC -Si latune 1
* ATLAS バージョン 3.9.11 以下 (バージョン 3.8.ほにゃらら, 3.9.ほにゃららのとき)
../configure -t 2 -m 3160 -b 64 -Fa alg -fPIC -D c -DPentiumCPS=3000 -D c -DWALL -Si nof77 0 -Si nocygwin 1 --prefix=/usr/atlas \ --with-netlib-lapack=/usr/ports/math/lapack/work/lapack-3.2.1//lapack_FREEBSD.a
【設定の要点】
64 ビットの FreeBSD (amd)では「-b 64」のようになる
CPU の種類によって設定すべき引数値
- CPU のコア数: -t 2 ・・・ 「コア数が 8 個」というような意味.コア数が 2 個のときは -t 2 になる.
* 例えば,Intel Core2 Duo E8500 は 2 つの物理コアを持ち,Intel Core2 Quad Q9550は 4 つの物理コアを持つ.Corei7 のように物理コアは 4個だが論理コアは 8個(物理コア数と論理コア数が違う)という場合がありますが,-t ... には物理コア数を指定した方がよいみたいです(未確認の情報)
- CPU のクロック周波数: -m 3160 ・・・ 周波数 (MHz 単位)
- CPU のビット数(ポインタの幅): -b 64 ・・・ 64 ビット.32 ビットの CPU のときや,32 ビットの FreeBSD をつかっているときは -b 32 になる.
- CPU のコア数: -t 2 ・・・ 「コア数が 8 個」というような意味.コア数が 2 個のときは -t 2 になる.
<この Web ページについて>
情報共有のために,この Web ページを公開している.ATLAS の情報減としては、 ATLAS errata ファイルや,ATLAS の説明書を読みきっていない等の問題を自覚している. 参考情報としてお使いください.
謝辞など
Octave や ATLAS に関しては,「octave for windowsメモの筆者」様が, http://c.2ch.net/ の「データ解析ツールoctaveを語ろう」掲示板 に書かれた内容を読み,掲示板での議論を通して,いくつかの貴重な示唆,ヒントを頂きました.この掲示板の匿名の投稿者の方々からも,やはり,重要な示唆を頂きました. この掲示板が無ければ,この Web ページはなかったでしょう. ありがとうございました.この場を借りてお礼申し上げます. ごく一部を以下に紹介しておく(私の判断で,大胆にまとめると次のようになる.詳しくは掲示板をご覧下さい).
- ATLAS を Octave に組み込む手順について
- ATLAS はマルチコアで動く機能がある
- ATLAS の configure の引数「-t ...」でコア数を指定できる.
- Octave をインストールし終わったら make check で確認しておくことが重要,などなど
ここで,敬意を込めて, 「octave for windowsメモの筆者」様の URL を記しておく. http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない) (「リンクの許可は要りません」に甘えまして,リンクを張っています) ⇒ この Web ページは,分かりやすく,また,Octave に関係する種々の有益な情報が載ったページです.この Web ページからもたくさんの情報を得ました. (ごく一部紹介しますと,Octave の MinGW ライブラリキットのリリース等々で,昔から継続的に多大な貢献をされておられます).
* 本 Web ページに残っているであろうミスは,掲示板等のミスではなく,本 Web ページの作者である私の責任です.
http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない) のように,Octave については,すでに多数の優れた情報源があります, Octave を使いたい方は,そちらを見ていただきたいと考えています.例えば,ATLAS の性能をより引き出す方法(そのヒント)なども得られることでしょう.
前準備
前もってインストールしておくべきソフトウェア
- lapack (/usr/ports/math/lapack) のインストール
cd /usr/ports/math/lapack; make clean; make; make install pkgdb -F
このとき gcc43 などもインストールされる.
事前に決めておく事項
- ATLAS のインストールディレクトリ: /usr/atlas
- ATLAS のソースコードを展開してできるディレクトリ: /tmp/ATLAS3.9.13
CPU の論理コア数,クロック周波数,ビット数の確認
- CPU のビット数の確認
CPU のビット数は,「32」か「64」のいずれか.必ず調べておく.
- CPU の周波数と論理コア数の確認
CPU の周波数と論理コア数は,「cat /proc/cpuinfo」を使って,簡単に分かる.
# cd /usr/ports/emulators/linux_base-fc4 make clean; make; make install mount -t linprocfs linprocfs /compat/linux/proc cat /compat/linux/proc/cpuinfo
cat /compat/linux/proc/cpuinfo の実行例.CPU: Intel E8500 の場合
ATLAS と LAPACK のビルドとインストール
ここでの説明は,CPU の種類,物理コア数,クロック周波数,ビット数が下記の通りであるとして説明を続けるので, 適切に読み替えてください.
【本 Web ページでの設定】
* Intel E8500 の場合
- CPU の物理コア数: 2
- CPU のクロック周波数: 3160
- CPU のビット数(ポインタの幅): 64
⇒ 各自,読み替えてください.
ATLAS のダウンロード
- ATLAS の「インストール概要」の Web ページを開く.
http://math-atlas.sourceforge.net/atlas_install/atlas_install.html
- この Web ページの「Turn off CPU throttling when installing ATLAS」にあるように, CPU の周波数を落として節電する,というような機能があれば無効にしておく.
- ATLAS の Web ページを開く
- 「SourceForge Summary Page」をクリック
- 「Files」をクリック
- ファイルの選択
最新のファイル が欲しいので,一番上の altlas.ほにゃらら.tar.bz2をクリック *最新の Stable が欲しいという場合には,下の方の Stable を展開して,ダウンロードする. * 但し,Core i7 のように新しい CPU を使う場合には,Stable よりも,最新のファイル(たとえ unstable であっても)うまくいく可能性がある.
クリックすると,ダウンロードが始まる.
ATLAS のビルドとインストール(1回目)
LAPACK のビルドのために ATLAS が欲しい.ATLAS のビルドのために LAPACK が欲しい,という状況なので, 先に ATLAS をビルド.後で LAPACK をビルドし,その後,ATLAS を再度ビルドという手順を踏むことにする.
- ダウンロードしたファイルを /tmp に移動
- tar コマンドを用いて解凍
cd /tmp tar -xvjof altas3.9.13.tar.bz2
- 解凍終了の確認
- 「mv ATLAS ATLAS3.9.13」の実行
- configure コマンドの実行
【本 Web ページでの設定】
* Intel E8500 の場合
- CPU の物理コア数: 2
- CPU のクロック周波数: 3160
- CPU のビット数(ポインタの幅): 64
⇒ 各自,読み替えてください.
cd ATLAS3.9.13 mkdir B1 cd B1 export CC=gcc43 export CXX=g++43 export F77=gfortran43 ../configure --cc=gcc43 -C acg gcc43 -C ic gcc43 -C xc gcc43 -C dk gcc43 -C dm gcc43 -C if gfortran43 -t 2 -m 3160 -b 64 -Fa alg -fPIC -D c -DPentiumCPS=3160 -D c -DWALL -Si nof77 0 -Si nocygwin 1 --prefix=/usr/atlas \ -Ss flapack /tmp/lapack-3.2.1/SRC -Si latune 1
* 「-t ... -m ...」のところは,コア数と周波数を正しく設定すること.
* 例えば,Corei7 のように物理コアは 4個だが論理コアは 8個(物理コア数と論理コア数が違う)という場合がありますが,-t ... には物理コア数を指定した方がよいみたいです(未確認の情報)
* ATLAS バージョン 3.9.11 以下 (バージョン 3.8.ほにゃらら, 3.9.ほにゃららのとき)
ATLAS バージョン 3.9.11 以下のときは, 「-Ss flapack /usr/ports/math/lapack/work/lapack-3.2.1/SRC -Si latune 1」とは書かずに, 「--with-netlib-lapack=/usr/ports/math/lapack/work/lapack-3.2.1//lapack_FREEBSD.a 」を付けます
<説明>
- mkdir B1
作業用のディレクトリの作成.「B1」のところは好きな名前でよい.
- CPU のコア数: -t 2
マルチコアの CPU では,「-t <コア数>」を引数に含めます. 「-t 2 」は、「コア数が 2 個」というような意味.コア数が 4 個のときは -t 4 になる. 「-t <コア数>」を付けると,ATLAS のシングルスレッド版とマルチスレッド版の両方のライブラリファイルがビルドされる.
マルチコアの CPU でない場合には,「-t <コア数>」を付けないで下さい. ATLAS のシングルスレッド版のライブラリファイルだけがビルドされる.
- CPU のクロック周波数: -m 3160
周波数 (MHz 単位)
- CPU のビット数(ポインタの幅): -b 64
32 ビットの時は -b 32 になる.
- -D c -DWALL:
- -Si nocygwin 1:
「1」にしているので,「CYGWIN でない」という意味になる.
- (オプション)コンパイラを変えたいときの設定例
使用するコンパイラを明示的に指定.
--cc=gcc43 -C acg gcc43 -C ic gcc43 -C xc gcc43 -C dk gcc43 -C dm gcc43 -C if gfortran43
- LAPACK のソースコードの指定
configure コマンドの引数に「-Ss flapack /usr/ports/math/lapack/work/lapack-3.2.1/SRC -Si latune 1」を付けます.
- configure コマンドの結果の確認
- 「make」 の実行
make
- 「make」の結果,エラーメッセージが出ないことを確認しておく.
- 「make check」 の実行
make check
「make check」 の結果,エラーメッセージが出ないことを確認しておく.
- 「make ptcheck」 の実行
make ptcheck
「make ptcheck」 の結果,エラーメッセージが出ないことを確認しておく.
- make time の実行
make time
- make time の結果の確認
「make time」 の結果,エラーメッセージが出ないことを確認しておく.
- 「make install」 の実行
make install
- 「make install」 の結果の確認
エラーメッセージが出ていないことを確認する.

cd lib make ptshared cptshared cp *.so /usr/atlas/lib
CBLAS のテスト
- BLAS Technical Forum の Web ページを開く
- 「Reference implementation for the C interface to the Legacy BLAS」をクリック.ダウンロードが始まる.
- ダウンロードしたソースコードを,/tmp の下に展開./tmp/CBLAS ができる
- 「Reference implementation for the C interface to the Legacy BLAS」に同梱のサンプルプログラムのテスト実行
cd /tmp/CBLAS gcc -I/usr/atlas/include cblas_example1.c -L/usr/atlas/lib -lptcblas -lptf77blas -latlas -lpthread -L/usr/local/lib/gcc43 -lgfortran ./a.out
cblas_example1.c を引用すると次の通り。
- cblas_dgemv() : 行列とベクトルの積
- lncy = 1, lnvy = 1 になっている