金子邦彦研究室インストールWindows の種々のソフトウェア(インストール)Windows に Octave バージョン 3.2.4 と octave-forge をビルドとインストール(ソースコードからビルド.Windows 上の Cygwin にインストール)

Windows に Octave バージョン 3.2.4 と octave-forge をビルドとインストール(ソースコードからビルド.Windows 上の Cygwin にインストール)

Octave とは,MATLAB に互換の数値解析ソフトウェア.

このページでは,Octave バージョン 3 のソースコードパッケージ(Cygwin のもの)をダウンロードし,Cywgin 上でビルドしてインストールする手順図解などで説明する. ソースコードからビルドしたい(例えば,最新の Octave を追いかけたいなど)の場合には,この Web ページの手順が参考になるでしょう.

Linux での Octave のビルドとインストールについては,別ページで説明

※ liboctave の使い方については,別のページで説明している.liboctave を使って,Octave の行列関係の機能を呼び出すような C++ のプログラムを簡単に作ることができる.

貴重な情報源: http://www40.atwiki.jp/gnuoctavejp (Octave for Windows メモの著者様による Wiki)

【要点】

【この Web ページで行うこと】

Octave のオンラインマニュアル

謝辞

本 Web ページは,Octave のインストール法と,インストール時における GotoBLAS の組み込みに焦点をあてていますが, 本 Web ページの作成にあたっては, まず, 「octave for windowsメモの筆者」様(http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない))に, 2ちゃんねる (http://2ch.net/) の「データ解析ツールoctaveを語ろう」掲示板での議論を通して,数々の貴重なご教示,コメント頂きました. さらには,Web ページの記述を丁寧に見ていただきました.ありがとうございました.(本 Web ページに間違いが残っていれば,それは,作者である私の責任です). 具体的には下記の情報など多数お寄せ頂きました(一部分だけ書いています).

敬意を込めて, 「octave for windowsメモの筆者」様の URL を記しておきます. http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない) (とてもお世話になった.ありがとうございました.)

⇒ この Web ページは,分かりやすく,また,Octave に関係する種々の有益な情報が載ったページです. 情報の宝庫,オンリーワンの Web ページと言ってよいでしょう. この Web ページからも多数の情報を頂きました.ありがとうございました.

さらには, 「データ解析ツールoctaveを語ろう」掲示板の匿名の投稿者の投稿からも数多くの貴重な情報を頂きました.ありがとうございました. 多くの方々に支えられて仕上げることができた Web ページです.

前準備

前もってインストールしておくべきソフトウェア

  1. Cygwin の Web ページの記述に従って,Cygwin のセットアッププログラム setup.exe を入手しておくこと.
  2. BLAS のインストール
  3. (オプション)octave-forge をインストールする場合は,「Windows に GSL (GNU Scientific Library) をインストール」 の Web ページに従って, GSL (GNU Scientific Library) のインストールが終わっていること.

    前もって調べておく事項

    インストール手順

    Octave のビルドに必要なソフトウェア等を Cygwin のパッケージを使ってインストール

    Cygwinのセットアッププログラム setup.exe を使って, Octave をソースプログラムからビルドするのに必要となる他のソフトウェアをインストールする.簡単にインストールできる.

    1. Cygwin のセットアッププログラム setup.exe の起動

      [image]

      [image]

      [image]

      [image]

      [image]
    2. パッケージ選択画面 (Select Packages)」(下図)まで進む
    3. パッケージ選択画面で,パッケージを選ぶ

      下記のパッケージを選ぶ.

      「keep」になっている場合には,インストール済みなので,keep のままでよい.

      • Devel/bison
      • Devel/flex
      • Devel/gcc4-core (Core C compiler subpackage)
      • Devel/gcc4-fortran (Fortran subpackage) (バージョン4)
      • Devel/gcc4-g++ (C++ subpackage) (バージョン4)
      • Devel/gperf
      • Devel/libhdf5-devel
      • Devel/libncurses-devel
      • Devel/libqhull-devel
      • Devel/libtool
      • Devel/libxml2-devel
      • Devel/make
      • Devel/patchutils
      • Devel/readline
      • Graphics/ghostscript
      • Graphics/ghostscript-fonts-other
      • Graphics/ghostscript-fonts-std
      • Graphics/gnuplot
      • Graphics/libGraphicsMagick-devel
      • Graphics/libjasper-devel
      • Graphics/libjbig-devel
      • Graphics/libjpeg-devel
      • Graphics/liblcms-devel
      • Graphics/libtiff-devel
      • Graphics/libwmf-devel
      • Graphics/opengl
      • Libs/libbz2-devel
      • Libs/libfftw3-devel
      • Math/SuiteSparse
      • Math/fftw3 (Discrete Fourier Transform Library)
      • Math/fftw3-doc (Discrete Fourier Transform Library)
      • Math/glpk (GNU Linear Programming Kit)
      • Math/lapack (Comprehensive FORTRAN library for linear algebra operations)
      • Math/libSuiteSparse-devel (SuiteSparse - development)
      • Math/libarpack-devel
      • Math/libfftw3-devel
      • Math/libglpk-devel (GNU Linear Programming Kit) development libraries
      • Math/libqrupdate-devel
      • Math/octave
      • Math/octave-devel
      • Math/octave-forge ・・・ 拡張パッケージ
      • Text/pcre
      • Text/tetex
      • Text/tetex-base
      • Text/texi2html
      • Utils/diffutils
      • Web/libcurl-devel
      • X11/X-start-menu-icons
      • X11/fltk
      • X11/libGL-devel
      • X11/libGLU-devel
      • X11/libGLw-devel
      • X11/libX11-devel
      • X11/libfreetype-devel
    4. インストールの開始
    5. インストール完了の確認

    (参考)cURL のインストール方法

    Cygwin の Octave ソースコードパッケージファイルのダウンロード

    ここで行うことは,日本国内の Cygwin 配布サイトから, Cygwin の Octave ソースコードパッケージファイル をダウンロードすること.

    1. Cygwin のセットアッププログラム setup.exe の起動

      [image]
    2. 先ほど同様に操作する.今度は,次の 4 つについて「Source」を選び,操作を進める.
      • Math/octave
      • Math/octave-devel
      • Math/octave-doc
      • Math/octave-forge

      [image]
    3. ファイルの確認

      ls /usr/src
      

      [image]

    pcre のビルドとインストール

    1. Cygwin のセットアッププログラム setup.exe の起動

      [image]
    2. 先ほど同様に操作する.今度は,次の Text/pcre について「Source」を選び,操作を進める.
      • text/pcre

      [image]
    3. ソースコードの展開

      cd /tmp
      tar -xvjof pcre-8.02.tar.bz2
      

      [image]
    4. configure の実行

      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
      

      [image]
    5. ビルドとインストール

      make
      make install
      
    6. 結果の確認

      エラーメッセージが出ていないことを確認する.

      [image]

    Octave バージョン 3.2.4 のビルドとインストールの手順

    Cygwin のソースパッケージのソースコードからビルドします.

    1. Cygwin のコンソールを起動
    2. ソースコードの展開

      cd /tmp
      tar -xvjof /usr/src/octave-3.2.4.tar.bz2
      

      [image]

      ファイルが無いよ,というときは,上の方に書いている 「Cygwin の Octave ソースコードパッケージファイルのダウンロード」をやり直す.

    3. (オプション)パッチ (Octave へのソースコード・パッチ)

      cd /tmp
      patch -p1 < /usr/src/octave-3.2.4-3.src.patch
      

      [image]
    4. (オプション)パッチ (Octave への cygwin パッチ)

      cd /tmp
      patch -p1 < /usr/src/octave-3.2.4-3.cygwin.patch
      

      [image]
    5. ビルド準備

      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"
      

      [image]

      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"
      

      [image]

      に書いているのは,ATLAS のマルチスレッド版ライブラリファイルを使うときの設定です.シングルスレッド版を使うときは, 「--with-blas="-L/usr/atlas/lib -lcblas -lf77blas -latlas" --with-lapack="-L/usr/atlas/lib -llapack -llapack_LINUX -ltmglib_LINUX"」のようになる.

      《《 設定の要点 》》

      • 最適化したい場合には「-O3」を付けてもよいでしょう.

        Core2 プロセッサで ATLAS を使う場合

        Core2 プロセッサを使う場合には,「-O3 fno-tree-vectorize -msse4.2 -march=native」を付けても良いでしょう(下記のように).※ -fno-tree-vectorize を付けているのは gcc4.4 におけるバグ(=伝聞情報)の回避のため.

        GotoBLAS を使う場合

        [image]

        ATLAS を使う場合

        [image]

        ※ GNU の新しいコンパイラは,Core2 のようなベクトル演算機能(つまり SSE)を持った CPU 用のコードを生成する機能があります.Core2 プロセッサの場合「-O3 -march=core2」のように指定すると,この機能が有効になるようです(というのが私の推測.アセンブラコードを見て確かめたわけではない).

        なお, 「-O3 -march=core2」以上に最適化オプションを増やす(-falign-loop とか -msse4 とか)と,うまくビルドできなかったり,make check が通らない可能性が一層高まるので,あまり、お勧めできません.

      • 試験的に,いろいろなバージョンやコンパイル時オプションでの Octave を共存させたいときは,「--prefix=/usr/local/octave-3.2.4.hoge.hoge」のように設定することになるでしょう(パス等は適切に通す).
      • CC=gcc-4 CXX="g++-4 -mthreads" F77="gfortran-4 -mthreads" : GNU の C, C++, Fortran コンパイラ・バージョン 4 を使用
      • --with-blas="-lgoto2 ..." : このように書いた場合には、 GotoBLASを使うという意味. (インストール手順は,「Windows に GotoBLAS と CBLAS をインストール」 の Web ページ)
      • --with-blas="-L/usr/atlas/lib -lptf77blas -latlas ..." : このように書いた場合には、 ATLASを使うという意味. (インストール手順は,「Windows で ATLAS と LAPACK をビルドとインストール」 の Web ページ)
      • --with-lapack="-llapack_LINUX -ltmglib_LINUX" : LAPACK を使用 (インストール手順は,「Windows に LAPACK をインストール」 の Web ページ)

      <--enable-static を引数に入れたいときの注意点>

      configure コマンドで,--enable-static を引数に入れることができるが,下記の点が要注意.

      • --enable-static を入れ、かつ、「-prefix=...」の「...」を「/usr」以外に設定している場合, Octave の dll ファイルを含むディレクトリをパスに含めるか,dll ファイルをパスを通したディレクトリにコピーするなどの操作が必要になることがある.

        ※ さもないと,「octave を起動すると,何も表示されず終わる」という現象に悩む.

      • Octave の pkg install 実行時にエラーが出ることがあり,対処が必要.
    6. configure コマンドの結果の確認

      gcc-4, g++-4, gfortran-4 になっていることを確認する. → なっていなければ configure からやり直す.

      必ず,エラーメッセージが出ていないことを確認する.

      GotoBLAS を使う場合の実行結果の例

      [image]

      ATLAS を使う場合の実行結果の例

      [image]

      エラーが出ている場合の対処について

      原因はいろいろ考えられる.

      • configure の引数のスペルミス,ということはよくある.
      • cxsparse が無い」というようなエラーの場合,
      • Cygwin のセットアッププログラムで,Octave のビルドに必要なソフトウェアをインストールしたはずですが,このときの「パッケージ選択画面で,パッケージを選ぶ」ときの間違い,も原因として考えられる.
      • 「--with-blas="-lgoto2 -lpthread"」と指定したときエラーが出るならば,GotoBLAS がインストールされていない可能性がある.
    7. ビルド

      Cygwin のコンソール で次の操作を行う.

      make
      

      [image]
    8. ビルド終了の確認

      エラーが出ていないことを確認する.

      [image]

      ※ エラーが出ている場合の対処について.

      • ビルド時に,リンク関係でエラーが出るとき.

        まずは,configure のときのタイプミスを疑う.

        あるいは,「C:\Cygwin\lib\cygwin1.dll を C:\Windows\System32 (あるいはパスが通ったディレクトリ)にコピー」すると 直ることがある

      • LAPACK 関係のファイルがリンクできていない場合

        ATLASGotoBLAS のビルド時に gfortran を使ったはず. だから,configure の実行時に 「... F77="gfortran-4..." ...」のように指定する(つまり,同じバージョンのものを使う)

      エラーが出ている場合には,やり直しになりますが, 「make distclean」を実行して、その後、上記の手順をやり直すか, ソースコードの展開まで戻ってやり直すことになる. (例えば configure の引数を間違っていたとき,その結果が残ってしまうので,正しい引数で configure をやり直してもうまくいかないことが多いです).

    9. Cygwin で octave 3.2.4 をビルドする場合

      make check したいが make check を実行すると,次のようなエラーが出る. src/DLD-FUNCTIONS/time.cc を調べたがよく分からない

      [image]

      小手先の方法ですが、次のコマンドで,エラーを回避する。

      [image]
    10. チェック

      「make check」を実行すると,チェック用プログラムが動き,自動でチェックされる.

      make check

      [image]

      「make check 」でエラーが出たときの対処法のヒント。
      • syscall でのエラー.「popen2: process creation failed ... Resource Temporary Available」:  オプションを変えて再コンパイルしても直らないが、パソコンを再起動すると、このエラーが出なくなることがある。
      • syscall でのエラー.「Can not allocate heap」:  オプションを変えて再コンパイルしても, Cygwin をインストールしなおしても直らないが、Windows の再インストールからやり直すと、このエラーが出なくなることがある。
      • script/special-matrix/hadamard.m でのエラー(下図): 

        これは、ATLAS の configure での「-t ...」の部分が間違っているときのエラー.

        [image]
    11. インストール

      Cygwin のコンソール で次の操作を行う.

      make SOPRE=lib install
      
    12. インストール結果の確認

      エラーメッセージが出ていないことを確認しておく.

      [image]
    13. 起動チェック

      コマンドプロンプトで

      octave
      

      を実行して起動してみる.

      [image]

    動作確認

    試しに使ってみる.

    1. Cygwin のコンソールを起動
    2. octave の起動

      ※ 「make SOPRE=lib install」のときに,「SOPRE=lib」を忘れていた場合には octave が起動しないことがあります.

      Cygwin のコンソール で次の操作を行う.

      octave
      

      [image]
    3. 試しに使ってみる

      Cygwin のコンソール で次の操作を行う.

      x = [1 2 3]
      y = [4 5 6]
      x + y
      x * y'
      

      [image]
    4. octave の終了
      exit
      

    性能測定の例

    ■ ハードウェアとソフトウェア

    実測値が遅い場合,ATLAS のビルド時に指定した「-t ... -m ...」の部分が,CPU のコア数,周波数と一致していなかった可能性がある.

    ■ 実測値の例 (Intel Corei7 9200)

    【要点】 Octave は,ソースコードからビルド, Intel Corei7 9200, Cygwin, Windows XP, Octave バージョン 3.0.3 + ATLAS バージョン 3.9.11

    [image]
    (a) 行列と行列の積: Z = X * Y
    [image]
    (b) 分散共分散行列: cov(X, Y)
    [image]
    (c) 分散共分散行列の固有値と固有ベクトル(主成分分析): eig( cov(X) )
    [image]
    (d) princomp 関数による主成分分析 : [pc, z, w, Tsq] = princomp(X)
    [image]
    (e) Singular Value Decomposition (SVD) : [U, S, D] = svd(X)
    [image]
    (f) 2次元の畳み込み(コンボリューション) : conv2(X, B, 'full')
    (g) 条件分岐プログラム( 2ch の「データ解析ツールoctaveを語ろう」掲示板で話題になっているもの.この掲示板のプログラムを引用している)

    実測値

    ■ 実測値の例 (Intel Core2 Duo E8500)

    【要点】 Octave は,ソースコードからビルド, Intel Core2 Duo E8500, Cygwin, Windows XP, Octave バージョン 3.0.3 + ATLAS バージョン 3.9.11 + LAPACK バージョン 3.2.1

    ※ GNU コンパイラは Cygwin パッケージのもの

    [image]
    (a) 行列と行列の積: Z = X * Y
    [image]
    (b) 分散共分散行列: cov(X, Y)
    [image]
    (c) 分散共分散行列の固有値と固有ベクトル(主成分分析): eig( cov(X) )
    [image]
    (d) princomp 関数による主成分分析 : [pc, z, w, Tsq] = princomp(X)
    [image]
    (e) Singular Value Decomposition (SVD) : [U, S, D] = svd(X)
    [image]
    (f) 2次元の畳み込み(コンボリューション) : conv2(X, B, 'full')
    [image]
    (g) FFT : fft(w)
    [image]
    (h) 条件分岐プログラム( 2ch の「データ解析ツールoctaveを語ろう」掲示板で話題になっているもの.この掲示板のプログラムを引用している)

    実測値

    gnuplot との連携

    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
    

    [image]

    octave-forge のインストール手順

    1. Cygwin のコンソールを起動
    2. 先ほどダウンロードした octave-forge-20080831-3.tar.bz2 を解凍

      tar -xvjof octave-forge-20080831-3-src.tar.bz2
      

      ※ ファイルが無いよ,ダウンロードをやり直す.

    3. ソースコードの展開

      cd /tmp
      tar -xvzof octave-forge-bundle-20080831.tar.gz
      
    4. パッチ (octave-forge へのソースコード・パッチ)

      cd /tmp
      patch -p1 < ./octave-forge-20080831-3.src.patch
      

      [image]
    5. パッチ (octave-forge への cygwin パッチ)

      cd /tmp
      patch -p1 < ./octave-forge-20080831-3.cygwin.patch
      

      [image]
    6. octave-forge の設定

      /tmp/octave-forge-bundle-20080831/octave-forge-packages.base を書き換える

      new_inst_dir/usr」を,すべて「/usr」に置換する.

      次のようになる.

      [image]

      それに加えて,このファイルの下の方にある 「load new_install_dir/usr ...」以降の部分は不要なので全て削除する

      [image]
    7. octave octave-forge-packages.base」を実行

      この操作は,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
      
    8. octave octave-forge-packages.base」の実行の結果,エラーメッセージが出ていないことの確認.

      GSL のインストールを忘れていると,このとき下記のようなエラーが出ます.octave-forge の組み込みでは,GSL の組み込みが必要.

      [image]
    9. インストールできたことの簡単な確認

      octave-forge のインストールが成功していれば,「pkg list」の実行結果は,次のように表示されるはず.

      pkg list
      

      [image]

      例えば io パッケージが動作するかを,簡単に確認するには,下記のような手順を踏みます.

      pkg load io
      help dlmread
      

      [image]

    ※ エラーが出たらインストールのやり直しなのですが, 「octave-forge-packages.base 」の書き換えミスの場合,Octave 本体の設定ファイルが壊れてしまうという症状がありえるので,要注意.そうなると, rm -rf /usr/lib/octave; rm -rf /usr/share/octave の実行後,Octave のインストールからやり直す,ということになるかも知れません.

    liboctave に関するメモ

    liboctave については, 別の Web ページで説明している.