Octave とは,MATLAB に互換の数値解析ソフトウェア.
このページでは,Octave バージョン 3 のソースコードパッケージ(Cygwin のもの)をダウンロードし,Cywgin 上でビルドしてインストールする手順を図解などで説明する. ソースコードからビルドしたい(例えば,最新の Octave を追いかけたいなど)の場合には,この Web ページの手順が参考になるでしょう.
Linux での Octave のビルドとインストールについては,別ページで説明
※ liboctave の使い方については,別のページで説明している.liboctave を使って,Octave の行列関係の機能を呼び出すような C++ のプログラムを簡単に作ることができる.
貴重な情報源: http://www40.atwiki.jp/gnuoctavejp (Octave for Windows メモの著者様による Wiki)
【要点】
BLAS(Basic Linear Algebra Subprograms)とは,行列演算,ベクトル演算の機能をもったプログラム群です. GotoBLAS や ATLAS は,無料で使えるソフトウェアの中では,BLAS 実装の決定版といってよいでしょう.※ 他にも,優れた実装が複数あります.
<BLAS の主な機能(ごく一部を紹介)>
LAPACK とは,行列に関する種々の計算(連立1次方程式,固有値問題,などなど多数)のソフトウェア. LAPACK は Octave に必要.
Octave を,Cygwin のパッケージからインストールする場合は, GotoBLAS や ATLAS) を組み込むことは難しいです. これら(GotoBLAS か ATLAS のどちらか)を組み込むことで, 格段に早く動く(行列の掛け算で確かめました)ようにできる.そのために, Octave のソースコードを使ってビルドとインストールを行うことが必要になってきます.
■ GotoBLAS を使う場合
CC=gcc-4 CPP=cpp-4 LDFLAGS="-Xlinker --enable-auto-import" CFLAGS="-Dtimezone=_timezone -I/usr/include/suitesparse -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" CXX="g++-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" F77="gfortran-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" ./configure --prefix=/usr --enable-static --enable-shared --enable-dl --with-blas="-lgoto2 -lpthread" --with-lapack="-llapack_LINUX -ltmglib_LINUX"
※ GotoBLAS は素晴らしいプログラムで,しかも,無料で使える.但し,GotoBLAS はフリーソフトウェアではない.「再配布や,商用・業務利用は原則不可」と明記されている. 再配布不可ですから,ソースコードやビルドしたバイナリを人にあげることはできません(パソコンを借りてインストールしてあげる,ということも難しい,という意味です).
※ GotoBLAS のライセンス条項に「不安」がある場合は,ATLAS を使うことも検討してください.(決して違法なことはしないように).
■ ATLAS を使う場合
CC=gcc-4 CPP=cpp-4 LDFLAGS="-Xlinker --enable-auto-import" CFLAGS="-Dtimezone=_timezone -I/usr/include/suitesparse -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" CXX="g++-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" F77="gfortran-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" LDFLAGS="-Xlinker --enable-auto-import" ./configure --prefix=/usr --enable-static --enable-shared --enable-dl --with-blas="-L/usr/atlas/lib -lptf77blas -latlas -lpthread" --with-lapack="-llapack_LINUX -ltmglib_LINUX"
※ ATLAS も素晴らしいプログラムで,無料で使える. ATLAS は BSD ライセンスとなっているようです.ライセンスは,各自でよく確認してください. ライセンスからいうと,GotoBLAS より使い勝手がいいです. 性能面では,GotoBLAS と遜色ありません.
【この Web ページで行うこと】
https://www.gnu.org/software/octave/ Octave の本家 からソースコードをダウンロードして使うよりも, Cygwin のソースパッケージのソースコードからビルドして,インストールする.ほうが楽だと考えています.
ソースコードからビルドする最大の理由は,BLAS(GotoBLAS や ATLAS) や LAPACK を組み込みたいからです.
このページでは,GNU の C, C++, Fortran コンパイラを使う. これらは,Cygwin のパッケージを使って,簡単にインストールできる.
※ GNU の C, C++, Fortran コンパイラ・バージョン 3 を使って Octave をビルドすることは,勧めません. バージョン 4 を使ってビルドするのは簡単です.バージョン 3 では,Octave のプログラムの動作が極端に遅くなることがあるという問題が知られています.
octave-forge の組み込みでは,GSL (GNU Scientific Library)が,必要になる.
本 Web ページは,Octave のインストール法と,インストール時における GotoBLAS の組み込みに焦点をあてていますが, 本 Web ページの作成にあたっては, まず, 「octave for windowsメモの筆者」様(http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない))に, 2ちゃんねる (http://2ch.net/) の「データ解析ツールoctaveを語ろう」掲示板での議論を通して,数々の貴重なご教示,コメント頂きました. さらには,Web ページの記述を丁寧に見ていただきました.ありがとうございました.(本 Web ページに間違いが残っていれば,それは,作者である私の責任です). 具体的には下記の情報など多数お寄せ頂きました(一部分だけ書いています).
GotoBLAS は再配布不可.ビルドしたバイナリであっても再配布不可
敬意を込めて, 「octave for windowsメモの筆者」様の URL を記しておきます. http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない) (とてもお世話になった.ありがとうございました.)
⇒ この Web ページは,分かりやすく,また,Octave に関係する種々の有益な情報が載ったページです. 情報の宝庫,オンリーワンの Web ページと言ってよいでしょう. この Web ページからも多数の情報を頂きました.ありがとうございました.
さらには, 「データ解析ツールoctaveを語ろう」掲示板の匿名の投稿者の投稿からも数多くの貴重な情報を頂きました.ありがとうございました. 多くの方々に支えられて仕上げることができた Web ページです.
「Windows で ATLAS と LAPACK をビルドとインストール」 の Web ページに従って, ATLAS と LAPACK のインストールが終わっていること.ライセンス条項を確認しておくこと.
Cygwinのセットアッププログラム setup.exe を使って, Octave をソースプログラムからビルドするのに必要となる他のソフトウェアをインストールする.簡単にインストールできる.
下記のパッケージを選ぶ.
「keep」になっている場合には,インストール済みなので,keep のままでよい.
※ Octave のビルドのとき gcc-4 等を使うので,バージョンをあわせておく
tar -xvjof curl-7.19.5.tar.bz2 cd curl-7.19.5 CC=gcc-4 ./configure --prefix=/usr --without-zlib make
make install
ここで行うことは,日本国内の Cygwin 配布サイトから, Cygwin の Octave ソースコードパッケージファイル をダウンロードすること.
ls /usr/src
cd /tmp tar -xvjof pcre-8.02.tar.bz2
cd pcre-8.02 patch -p1 < /usr/src/pcre-8.02-1.cygwin.patch ./configure --enable-newline-is-lf --enable-unicode-properties --enable-utf8 --enable-pcregrep-libbz2 --enable-pcregrep-libz --enable-pcretest-libreadline --disable-stack-for-recursion
make make install
エラーメッセージが出ていないことを確認する.
Cygwin のソースパッケージのソースコードからビルドします.
cd /tmp tar -xvjof /usr/src/octave-3.2.4.tar.bz2
※ ファイルが無いよ,というときは,上の方に書いている 「Cygwin の Octave ソースコードパッケージファイルのダウンロード」をやり直す.
cd /tmp patch -p1 < /usr/src/octave-3.2.4-3.src.patch
cd /tmp patch -p1 < /usr/src/octave-3.2.4-3.cygwin.patch
GotoBLAS または ATLAS のどちらかを使う.
■ GotoBLAS を使う場合
Cygwin のコンソール で次の操作を行う.
cd /tmp cd octave-3.2.4 CC=gcc-4 CPP=cpp-4 LDFLAGS="-Xlinker --enable-auto-import" CFLAGS="-Dtimezone=_timezone -I/usr/include/suitesparse -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" CXX="g++-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" F77="gfortran-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" ./configure --prefix=/usr --enable-static --enable-shared --enable-dl --with-blas="-lgoto2 -lpthread" --with-lapack="-llapack_LINUX -ltmglib_LINUX"
■ ATLAS を使う場合
Cygwin のコンソール で次の操作を行う.
cd /tmp cd octave-3.2.4 CC=gcc-4 CPP=cpp-4 LDFLAGS="-Xlinker --enable-auto-import" CFLAGS="-Dtimezone=_timezone -I/usr/include/suitesparse -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" CXX="g++-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" F77="gfortran-4 -fimplicit-none -fexceptions -mieee-fp -m32 -mthreads" LDFLAGS="-Xlinker --enable-auto-import" ./configure --prefix=/usr --enable-static --enable-shared --enable-dl --with-blas="-L/usr/atlas/lib -lptf77blas -latlas -lpthread" --with-lapack="-llapack_LINUX -ltmglib_LINUX"
※ 上に書いているのは,ATLAS のマルチスレッド版ライブラリファイルを使うときの設定です.シングルスレッド版を使うときは, 「--with-blas="-L/usr/atlas/lib -lcblas -lf77blas -latlas" --with-lapack="-L/usr/atlas/lib -llapack -llapack_LINUX -ltmglib_LINUX"」のようになる.
《《 設定の要点 》》
<Core2 プロセッサで ATLAS を使う場合>
Core2 プロセッサを使う場合には,「-O3 fno-tree-vectorize -msse4.2 -march=native」を付けても良いでしょう(下記のように).※ -fno-tree-vectorize を付けているのは gcc4.4 におけるバグ(=伝聞情報)の回避のため.
■ GotoBLAS を使う場合
■ ATLAS を使う場合
※ GNU の新しいコンパイラは,Core2 のようなベクトル演算機能(つまり SSE)を持った CPU 用のコードを生成する機能があります.Core2 プロセッサの場合「-O3 -march=core2」のように指定すると,この機能が有効になるようです(というのが私の推測.アセンブラコードを見て確かめたわけではない).
なお, 「-O3 -march=core2」以上に最適化オプションを増やす(-falign-loop とか -msse4 とか)と,うまくビルドできなかったり,make check が通らない可能性が一層高まるので,あまり、お勧めできません.
<--enable-static を引数に入れたいときの注意点>
configure コマンドで,--enable-static を引数に入れることができるが,下記の点が要注意.
※ さもないと,「octave を起動すると,何も表示されず終わる」という現象に悩む.
gcc-4, g++-4, gfortran-4 になっていることを確認する. → なっていなければ configure からやり直す.
必ず,エラーメッセージが出ていないことを確認する.
■ GotoBLAS を使う場合の実行結果の例
■ ATLAS を使う場合の実行結果の例
※ エラーが出ている場合の対処について.
原因はいろいろ考えられる.
Cygwin のコンソール で次の操作を行う.
make
エラーが出ていないことを確認する.
※ エラーが出ている場合の対処について.
まずは,configure のときのタイプミスを疑う.
あるいは,「C:\Cygwin\lib\cygwin1.dll を C:\Windows\System32 (あるいはパスが通ったディレクトリ)にコピー」すると 直ることがある
ATLAS や GotoBLAS のビルド時に gfortran を使ったはず. だから,configure の実行時に 「... F77="gfortran-4..." ...」のように指定する(つまり,同じバージョンのものを使う)
エラーが出ている場合には,やり直しになりますが, 「make distclean」を実行して、その後、上記の手順をやり直すか, ソースコードの展開まで戻ってやり直すことになる. (例えば configure の引数を間違っていたとき,その結果が残ってしまうので,正しい引数で configure をやり直してもうまくいかないことが多いです).
make check したいが make check を実行すると,次のようなエラーが出る. src/DLD-FUNCTIONS/time.cc を調べたがよく分からない
小手先の方法ですが、次のコマンドで,エラーを回避する。
「make check」を実行すると,チェック用プログラムが動き,自動でチェックされる.
これは、ATLAS の configure での「-t ...」の部分が間違っているときのエラー.
Cygwin のコンソール で次の操作を行う.
make SOPRE=lib install
エラーメッセージが出ていないことを確認しておく.
コマンドプロンプトで
octave
を実行して起動してみる.
試しに使ってみる.
※ 「make SOPRE=lib install」のときに,「SOPRE=lib」を忘れていた場合には octave が起動しないことがあります.
Cygwin のコンソール で次の操作を行う.
octave
Cygwin のコンソール で次の操作を行う.
x = [1 2 3] y = [4 5 6] x + y x * y'
exit
■ ハードウェアとソフトウェア
実測値が遅い場合,ATLAS のビルド時に指定した「-t ... -m ...」の部分が,CPU のコア数,周波数と一致していなかった可能性がある.
【要点】 Octave は,ソースコードからビルド, Intel Corei7 9200, Cygwin, Windows XP, Octave バージョン 3.0.3 + ATLAS バージョン 3.9.11
実測値
【要点】 Octave は,ソースコードからビルド, Intel Core2 Duo E8500, Cygwin, Windows XP, Octave バージョン 3.0.3 + ATLAS バージョン 3.9.11 + LAPACK バージョン 3.2.1
※ GNU コンパイラは Cygwin パッケージのもの
実測値
Octave では,gnuplot の機能を呼び出してグラフを作る,というのが定番なので,試してみる.
グラフの描画のために,Cygwin のコンソール で次の操作を行う.
※ startx を忘れるとエラーメッセージが出ます.(gnuplot が動かないので).
startx octave x = [0 0.2 0.4 0.6 0.8 1.0 1.2] plot(x, sin(x)) close
tar -xvjof octave-forge-20080831-3-src.tar.bz2
※ ファイルが無いよ,ダウンロードをやり直す.
cd /tmp tar -xvzof octave-forge-bundle-20080831.tar.gz
cd /tmp patch -p1 < ./octave-forge-20080831-3.src.patch
cd /tmp patch -p1 < ./octave-forge-20080831-3.cygwin.patch
/tmp/octave-forge-bundle-20080831/octave-forge-packages.base を書き換える.
「new_inst_dir/usr」を,すべて「/usr」に置換する.
次のようになる.
それに加えて,このファイルの下の方にある 「load new_install_dir/usr ...」以降の部分は不要なので全て削除する.
この操作は,Octave の「インストール」を行った後,別の Cygwin のコンソールを開いて行ってください.
mkdir /usr/lib/octave mkdir /usr/lib/octave/packages mkdir /usr/share/octave/packages cd /tmp/octave-forge-bundle-20080831 octave octave-forge-packages.base
※ エラーが出た場合,Octave のビルドやインストールに失敗していて,見落としていた可能性がある.
(参考)ディレクトリ構成
/usr/bin octave.exe など /usr/include/octave-3.2.4/octave インクルードファイル /usr/lib/octave/3.2.4 /usr/lib/octave/api-v32 /usr/lib/octave/site /usr/lib/octave3.2.4 liboctave.dll.a など /usr/share/info octave.info など /usr/share/man/man1 octave.1 など /usr/share/octave/3.2.4/m いろいろ /usr/share/octave/3.2.4/site/m /usr/share/octave/site/api-v32 /usr/share/octave/site/m
※ GSL のインストールを忘れていると,このとき下記のようなエラーが出ます.octave-forge の組み込みでは,GSL の組み込みが必要.
octave-forge のインストールが成功していれば,「pkg list」の実行結果は,次のように表示されるはず.
pkg list
例えば io パッケージが動作するかを,簡単に確認するには,下記のような手順を踏みます.
pkg load io help dlmread
※ エラーが出たらインストールのやり直しなのですが, 「octave-forge-packages.base 」の書き換えミスの場合,Octave 本体の設定ファイルが壊れてしまうという症状がありえるので,要注意.そうなると, rm -rf /usr/lib/octave; rm -rf /usr/share/octave の実行後,Octave のインストールからやり直す,ということになるかも知れません.
liboctave については, 別の Web ページで説明している.