Ubuntu, Fedora で Octave バージョン 3.8.0 のビルドとインストールとテスト実行

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

◆ このページでは,Octave のソースコードをダウンロードし, Ubuntu や Fedora 上でビルドしてインストールする手順を図解などで説明する.

◆ なぜ,ソースコードからビルドするのか?

などの場合には,この Web ページの手順が参考になるでしょう.

※ Octave をパッケージ (yum) を使ってインストールしたい(わざわざソースコードからビルドしない) 場合は,別の Web ページを見てください.

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

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

※ 関連Webページ: Octave の活用

http://software.intel.com/en-us/articles/using-intel-mkl-in-gnu-octave/

【要点】

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

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

謝辞

本 Web ページは,Linux での Octave のビルドとインストール法に焦点をあてていますが, 本 Web ページの作成にあたっては, まず, 「octave for windowsメモの筆者」様(http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない))に, 2ちゃんねる (http://2ch.net/) の「データ解析ツールoctaveを語ろう」掲示板での議論を通して,数々の貴重なご教示,コメント頂きました. ありがとうございました.

などなど.

敬意を込めて, 「octave for windowsメモの筆者」様の URL を記しておきます. http://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html (当時の URL,現存しない)

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

Ubuntu で Octave のソースコードのインストール(ソースコードを使用)を行うシェルスクリプト

楽をしたいのでシェルスクリプトを作りました。 1つ1つコマンドを入力したい(シェルスクリプトにしたくない)場合については、この Web ページの下で説明している. Octave バージョン 3.8.0 のインストール(ソースコードを使用)が行われます.前提ソフトウェアとして用いる graphicsmagick, curl, gsl, fftw3, glpk, qrupdate, suitesparce, lapack, atlas のインストールも行う. Ubuntu 12.04 を用いて動作確認済みです.

■ 前準備

Intel のコンパイラやIntel Math Kernel Library を使う場合には、.bashrc などで 「export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/lib/ia32:/opt/intel/lib/ia32」 あるいは 「export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/lib/intel64:/opt/intel/lib/intel64」 のように設定しておくこと。

■ シェルスクリプト

#!/bin/bash
 
sudo apt -y 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 
    export USEINTEL=YES
  fi
fi
if [ -x /opt/intel/bin/compilervars.sh ]; then 
    echo USE Intel MKL 
    export USEMKL=YES
fi

if [ "$USEMKL" = "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

# octave 前提ソフトウェア (Octave build dependency softwares)
cd /tmp; sudo apt-get source octave3.2
cd /tmp; sudo apt-get build-dep octave3.2

# /etc/ld.so.conf
sudo cp /etc/ld.so.conf /etc/ld.so.conf.$$
echo "/usr/local/lib" | sudo tee -a >> /etc/ld.so.conf
echo "/usr/local/lib/octave/3.8.0" | sudo tee -a >> /etc/ld.so.conf
sudo /sbin/ldconfig

# graphicsmagick 
  sudo apt -y install graphicsmagick-dbg
  sudo apt -y install graphicsmagick
  sudo apt -y install graphicsmagick-imagemagick-compat
  sudo apt -y install graphicsmagick-libmagick-dev-compat
  sudo apt -y install libgraphics-magick-perl
  sudo apt -y install libgraphicsmagick++1-dev
  sudo apt -y install libgraphicsmagick++3
  sudo apt -y install libgraphicsmagick1-dev
  sudo apt -y install libgraphicsmagick3

# curl
  sudo apt -y install curl
  sudo apt -y install libcurl3-dbg
  sudo apt -y install libcurl3-gnutls
  sudo apt -y install libcurl3
  sudo apt -y install libcurl4-gnutls-dev

# gsl
if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler
  mkdir /tmp/gsl
  cd  /tmp/gsl
  apt-get source gsl
  sudo apt-get -yV build-dep gsl
  cd gsl-*
  CC=icc CXX=icpc F77=ifort dpkg-buildpackage -rfakeroot
  cd ..
  sudo dpkg -i *.deb
else
# package install
  sudo apt -y install gsl-bin
  sudo apt -y install libgsl0-dbg
  sudo apt -y install libgsl0-dev
  sudo apt -y install libgsl0ldbl
fi

# fftw3
if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler
  mkdir /tmp/fftw3
  cd  /tmp/fftw3
  apt-get source fftw3
  sudo apt-get -yV build-dep fftw3
  cd fftw3-*
  CC=icc CXX=icpc F77=ifort dpkg-buildpackage -rfakeroot
  cd ..
  sudo dpkg -i *.deb
else
# package install
  sudo apt -y install libfftw3-3
  sudo apt -y install libfftw3-dev
  sudo apt -y install libfftw3-doc
fi

# glpk
if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler
  mkdir /tmp/glpk
  cd  /tmp/glpk
  apt-get source glpk
  sudo apt -y install libiodbc2-dev 
  sudo apt-get -yV build-dep glpk
  cd glpk-*
  CC=icc CXX=icpc F77=ifort dpkg-buildpackage -rfakeroot
  cd ..
  sudo dpkg -i *.deb
else
# package install
  sudo apt -y install glpk-doc
  sudo apt -y install glpk-utils
  sudo apt -y install libglpk-dev
  sudo apt -y install libglpk0-dbg
  sudo apt -y install libglpk0
  sudo apt -y install glpk
fi

# qrupdte 
if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler
  mkdir /tmp/qrupdate
  cd  /tmp/qrupdate
  apt-get source qrupdate
  sudo apt-get -yV build-dep qrupdate
  cd qrupdate-*
  CC=icc CXX=icpc F77=ifort dpkg-buildpackage -rfakeroot
  cd ..
  sudo dpkg -i *.deb
else
# package install
  sudo apt -y install libqrupdate-dev
  sudo apt -y install libqrupdate1
fi

# arpack
if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler
  mkdir /tmp/arpack
  cd /tmp/arpack
  apt-get source arpack
  sudo apt-get -yV build-dep arpack
  cd arpack-*
  CC=icc CXX=icpc F77=ifort dpkg-buildpackage -rfakeroot
  cd ..
  sudo dpkg -i *.deb
else
# package install
  sudo apt -y install libarpack2-dbg
  sudo apt -y install libarpack2-dev
  sudo apt -y install libarpack2
fi

# suitesparse-metis 
if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler
  mkdir /tmp/suitesparse-metis
  cd  /tmp/suitesparse-metis
  apt-get source suitesparse-metis
  sudo apt-get -yV build-dep suitesparse-metis
  cd suitesparse-metis-*
  CC=icc CXX=icpc F77=ifort dpkg-buildpackage -rfakeroot
  cd ..
  sudo dpkg -i *.deb
else
# package install
  sudo apt -y install libsuitesparse-metis-3.1.0
  sudo apt -y install libsuitesparse-metis-dbg
  sudo apt -y install libsuitesparse-metis-dev
fi

# LAPACK をパッケージを用いてインストール (install the LAPACK softwares using package)
sudo apt -y install liblapack-dev
sudo apt -y install liblapack-test
sudo apt -y install liblapack-doc
sudo apt -y install liblapack3gf
sudo apt -y install liblapack-pic

# 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
cp /tmp/BLAS/blas_LINUX.a /usr/local/lib/libblas_LINUX.a

# Octave のインストール(ソースコードを使用)
cd /tmp
if [ ! -f octave-3.8.0.tar.gz ]; then 
    wget ftp://ftp.gnu.org/gnu/octave/octave-3.8.0.tar.gz
fi

sudo rm -rf octave-3.8.0
tar -xvzof octave-3.8.0.tar.gz
cd octave-3.8.0


if [ "$USEINTEL" = "YES" ]; then
# Intel Compiler (インテル C++ Composer XE Linux 版, インテル Fortran Composer XE Linux 版を使う場合) 
  if [ `arch` = 'i686' ]; then
    echo "source /opt/intel/bin/compilervars.sh ia32" >> ~/.bashrc
  elif [ `arch` = 'x86_64' ]; then
    echo "source /opt/intel/bin/compilervars.sh intel64" >> ~/.bashrc
  fi
#
  if [ `arch` = 'i686' ]; then
  # Ubuntu 32 bit version (かきかけ. このままでは動かない)
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/lib/ia32:/opt/intel/lib/ia32
      export B1="-lmkl_gf -lmkl_intel -lmkl_intel_thread -lmkl_core -limf -lintlc -liomp5 -lpthread -lquadmath -lm"
      CC=icc CXX=icpc F77=gfortran F1="-fPIC -DPIC -fomit-frame-pointer -O2 -march=native -I/usr/include -I/opt/intel/mkl/include/ia32 -I/opt/intel/include/ia32 -I/opt/intel/mkl/include/fftw -I/usr/local/include" LDFLAGS="-L/opt/intel/lib/ia32 -L/opt/intel/mkl/lib/ia32" LIBS="-lmetis -lquadmath" CFLAGS="-ipo- -std=c99 $F1" CPPFLAGS="$F1" FFLAGS="$F1" ./configure --enable-static --enable-shared --enable-dl --with-blas="${B1}" --with-lapack="${B1}" --with-fftw3="${B1}" --with-fftw3f="${B1}" PTHREAD_LIBS="-lpthread"
  elif [ `arch` = 'x86_64' ]; then
  # Ubuntu 64 bit version (かきかけ. このままでは動かない)
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/lib/intel64:/opt/intel/lib/intel64
      export B1="-lmkl_gf_lp64 -lmkl_intel_lp64 -lmkl_intel_thread  -lmkl_core -limf -lintlc -liomp5 -lpthread -lquadmath -lm" 
      CC=icc CXX=icpc F77=gfortran F1="-m64 -DMKL_LP64 -fPIC -DPIC -fomit-frame-pointer -O2 -I/usr/include -I/opt/intel/mkl/include/intel64 -I/opt/intel/include/intel64 -I/opt/intel/mkl/include/fftw -I/usr/local/include" LDFLAGS="-L/opt/intel/lib/intel64 -L/opt/intel/mkl/lib/intel64" LIBS="-lmetis -lquadmath" CFLAGS="-ipo- -std=c99 $F1" CPPFLAGS="$F1" FFLAGS="$F1" ./configure --enable-static --enable-shared --enable-dl --with-blas="${B1}" --with-lapack="${B1}" --with-fftw3="${B1}" --with-fftw3f="${B1}" PTHREAD_LIBS="-lpthread"
  fi
else
# GNU Compiler (GNU のコンパイラを使う場合) 
  if [ `arch` = 'i686' ]; then
    # 32 ビット Ubuntu
    if [-d /opt/intel/mkl/lib/ia32 ]; then  
      # try to use Intel MKL 32bit  (GNU のコンパイラ + インテル マス・カーネル・ライブラリー Linux 版) 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/lib/ia32:/opt/intel/lib/ia32
CC=gcc CXX=g++ F77=gfortran \
CXXFLAGS="-m32 -fPIC -DPIC -fomit-frame-pointer -O2 -march=native -I/usr/include -I/opt/intel/mkl/include/ia32 -I/opt/intel/include/ia32 -I/opt/intel/mkl/include/fftw -I/usr/local/include" 
FFLAGS="-m32 -fPIC -DPIC -fomit-frame-pointer -O2 -march=native -I/usr/include -I/opt/intel/mkl/include/ia32 -I/opt/intel/include/ia32 -I/opt/intel/mkl/include/fftw -I/usr/local/include" \
export B1="-L/opt/intel/lib/ia32 -L/opt/intel/mkl/lib/ia32 -lmkl_gf -lmkl_intel -lmkl_intel_thread  -lmkl_core -limf -lintlc -liomp5 -lmetis -lpthread -lquadmath -lm" 
./configure --enable-static --enable-shared --enable-dl \
--with-blas="${B1}" \
--with-lapack="${B1}" \
--with-fftw3="${B1}" \
--with-fftw3f="${B1}" \
PTHREAD_LIBS="-lpthread"
    fi
  elif [ `arch` = 'x86_64' && ]; then
    # 64 ビット Ubuntu
    if [ -d /opt/intel/mkl/lib/intel64 ]; then  
      # try to use Intel MKL 64bit  (GNU のコンパイラ + インテル マス・カーネル・ライブラリー Linux 版) 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/mkl/lib/intel64:/opt/intel/lib/intel64
CC=gcc CXX=g++ F77=gfortran \
CXXFLAGS="-m64 -DMKL_LP64 -fPIC -DPIC -fomit-frame-pointer -O2 -march=native -I/usr/include -I/opt/intel/mkl/include/intel64 -I/opt/intel/include/intel64 -I/opt/intel/mkl/include/fftw -I/usr/local/include" \
FFLAGS="-m64 -DMKL_LP64 -fPIC -DPIC -fomit-frame-pointer -O2 -march=native -I/usr/include -I/opt/intel/mkl/include/intel64 -I/opt/intel/include/intel64 -I/opt/intel/mkl/include/fftw -I/usr/local/include" \
export B1="-L/opt/intel/lib/intel64 -L/opt/intel/mkl/lib/intel64 -lmkl_gf_lp64 -lmkl_intel_lp64 -lmkl_intel_thread  -lmkl_core -limf -lintlc -liomp5 -lmetis -lpthread -lquadmath -lm" 
./configure --enable-static --enable-shared --enable-dl \
--with-blas="${B1}" \
--with-lapack="${B1}" \
--with-fftw3="${B1}" \
--with-fftw3f="${B1}" \
PTHREAD_LIBS="-lpthread"
    fi
  elif [ -d /usr/lib/openblas-base ]; then
    # openBLAS
CXXFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
FFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
./configure --enable-shared --enable-dl \
--with-blas="-L/usr/lib/openblas-base -lcblas -lopenblas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" \
--with-lapack="-L/usr/lib/lapack -llapack -L/usr/lib/openblas-base -lopenblas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" 
  elif [ -f /usr/lib/atlas-base/libptf77blas.a ]; then
    # Ubuntu package LAPACK and ATLAS (GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK) 
CXXFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
FFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
./configure --enable-shared --enable-dl \
--with-blas="-L/usr/lib/atlas-base -lptf77blas -latlas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" \
--with-lapack="-L/usr/lib/atlas-base -llapack_atlas -llapack -lptf77blas -latlas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" 
  else
    # 「-llapack -lblas 」でコンパイル
    F1="-fPIC -DPIC -fomit-frame-pointer -O2 -I/usr/local/include" LDFLAGS="-L/usr/local/lib" LIBS="-lmetis -lgfortran -lgomp -lpthread -ldl -lquadmath" CFLAGS="$F1" CPPFLAGS="$F1" FFLAGS="$F1" ./configure --enable-static --enable-shared --enable-dl --with-blas="-lblas -lgfortran -lgomp -lpthread -ldl -lquadmath" --with-lapack="-llapack -lblas -lgfortran -lgomp -lpthread -ldl -lquadmath" PTHREAD_LIBS="-lpthread"
  fi
fi

# memo
# LIBS="-lmetis" CFLAGS="-I/usr/local/include -I/usr/local/atlas/include -mieee-fp -DH5_USE_16_API -fomit-frame-pointer -mfpmath=sse -msse3 -fno-schedule-insns2 -fopenmp -fno-tree-loop-optimize -fno-tree-vectorize -fexceptions -march=native -O3 -fopenmp" CPPFLAGS="-I/usr/local/include -I/usr/local/atlas/include -mieee-fp -DH5_USE_16_API -fomit-frame-pointer -mfpmath=sse -msse3 -fno-schedule-insns2 -fopenmp -fno-tree-loop-optimize -fno-tree-vectorize -fexceptions -march=native -O3 -fopenmp" FFLAGS="-DH5_USE_16_API -fomit-frame-pointer -mfpmath=sse -msse3 -fno-schedule-insns2 -fopenmp -fno-tree-loop-optimize -fno-tree-vectorize -fexceptions -march=native -O3 -fopenmp" ./configure --enable-static --enable-shared --enable-dl --with-blas="-L/usr/local/atlas/lib -lptf77blas /usr/local/atlas/lib/libatlas.a -lgfortran -lpthread -lgomp" --with-lapack="-llapack_LINUX -ltmglib_LINUX -L/usr/local/atlas/lib -lptf77blas /usr/local/atlas/lib/libatlas.a -lgfortran -lpthread -lgomp"  

make -j4
make check
sudo make install

Ubuntu で, コマンドを手入力して,Octave のソースコードのインストール(ソースコードを使用)を行う

前もって決めておく事項

1. 前提となるソフトウェアのインストール

◆ Ubuntu バージョン 12.04 の場合の操作手順例

Ubuntu の他のバージョンでも同様の手順になります

  1. アップデート操作
    sudo apt-get -yV update
    sudo apt-get -yV upgrade
    sudo reboot
    
  2. Octaveのビルドで用いる前提ソフトウェアのインストール
    # 前提ソフトウェア
    cd /tmp; sudo apt-get source octave3.2
    cd /tmp; sudo apt-get build-dep octave3.2
    # 開発環境等
    sudo apt -y install make
    sudo apt -y install patch
    sudo apt -y install build-essential
    sudo apt -y install autoconf
    sudo apt -y install automake
    sudo apt -y install autogen
    sudo apt -y install flex
    sudo apt -y install bison
    sudo apt -y install gawk
    sudo apt -y install libtool
    sudo apt -y install ccache
    sudo apt -y install binutils
    sudo apt -y install openssl
    sudo apt -y install libgmp3-devel
    sudo apt -y install libmpfr-dev
    sudo apt -y install libppl-dev
    sudo apt -y install libmpc-dev
    sudo apt -y install cpp
    sudo apt -y install gcc
    sudo apt -y install g++
    sudo apt -y install gfortran
    sudo apt -y install libreadline-dev
    sudo apt -y install gperf
    sudo apt -y install libftgl-dev
    sudo apt -y install libgomp1
    # gsl
    sudo apt -y install gsl-bin
    sudo apt -y install libgsl0-dev
    sudo apt -y install libgsl0-dbg
    sudo apt -y install libgsl0ldbl
    # atlas
    sudo apt -y install libatlas-base-dev
    sudo apt -y install libatlas-dev
    sudo apt -y install libatlas-doc
    sudo apt -y install libatlas-test
    sudo apt -y install libatlas3gf-base
    # lapack
    sudo apt -y install liblapack-dev
    sudo apt -y install liblapack-doc
    sudo apt -y install liblapack-pic
    sudo apt -y install liblapack-test
    sudo apt -y install liblapack3gf
    # pcre
    sudo apt -y install libpcre3-dev
    # readline
    sudo apt -y install libreadline-dev
    # arpack
    sudo apt -y install libarpack2-dbg
    sudo apt -y install libarpack2-dev
    sudo apt -y install libarpack2
    # cURL
    sudo apt -y install curl
    sudo apt -y install libcurl3-dbg
    sudo apt -y install libcurl3-gnutls
    sudo apt -y install libcurl3
    sudo apt -y install libcurl4-gnutls-dev
    # fftw3
    sudo apt -y install libfftw3-3
    sudo apt -y install libfftw3-dev
    sudo apt -y install libfftw3-doc
    # FLTK  
    sudo apt -y install libfltk1.3-dev
    # fontconfig
    sudo apt -y install fontconfig
    sudo apt -y install libfontconfig1-dev
    # freetype
    sudo apt -y install libfreetype6-dev
    # glpk
    sudo apt -y install glpk
    sudo apt -y install libglpk-dev
    # gl2ps
    sudo apt -y install libgl2ps-dev
    # gnuplot
    sudo apt -y install gnuplot
    # graphicsmagick
    sudo apt -y install graphicsmagick-dbg
    sudo apt -y install graphicsmagick
    sudo apt -y install libgraphics-magick-perl
    sudo apt -y install libgraphicsmagick++1-dev
    sudo apt -y install libgraphicsmagick++3
    sudo apt -y install libgraphicsmagick1-dev
    sudo apt -y install libgraphicsmagick3
    # Qhull
    sudo apt -y install libqhull-dev
    # qrupdate
    sudo apt -y install libqrupdate-dev
    sudo apt -y install libqrupdate1
    # qscintilla
    sudo apt -y install libqscintilla2-dev 
    # qt
    sudo apt -y install libqt4-dev 
    # SuiteSparse
    sudo apt -y install libamd2
    sudo apt -y install libbtf1
    sudo apt -y install libcamd2
    sudo apt -y install libccolamd2
    sudo apt -y install libcholmod1
    sudo apt -y install libcolamd2
    sudo apt -y install libcsparse2
    sudo apt -y install libcxsparse2
    sudo apt -y install libklu1
    sudo apt -y install libldl2
    sudo apt -y install libsuitesparse-dbg
    sudo apt -y install libsuitesparse-dev
    sudo apt -y install libsuitesparse-doc
    sudo apt -y install libumfpack5
    sudo apt -y install libsuitesparse-metis
    sudo apt -y install libsuitesparse-metis-dev
    # zlib
    sudo apt -y install zlib1g-dev 
    

◆ Fedora の場合の実行例

  1. パッケージの更新

    インストール前に「yum check-update; sudo yum update」を実行しておくとトラブルが減るでしょう. これは更新可能な全パッケージを更新するという操作です.

    yum check-update
    sudo yum update
    
  2. 必須ソフトウェアのインストール

    Octave のビルドとインストールに必要になる次のソフトウェアをインストール済みであること.

    ※ 下記のように「yum install <パッケージ名>」で簡単にインストールできる.

    sudo yum -y install bison
    sudo yum -y install flex
    sudo yum -y install less
    sudo yum -y install tetex
    sudo yum -y install gcc
    sudo yum -y install gcc-c++
    sudo yum -y install gcc-gfortran
    sudo yum -y install lapack-devel
    sudo yum -y install blas-devel
    sudo yum -y install atlas-devel
    sudo yum -y install ncurses-devel
    sudo yum -y install zlib-devel
    sudo yum -y install hdf5-devel
    sudo yum -y install texinfo
    sudo yum -y install qhull-devel
    sudo yum -y install readline-devel
    sudo yum -y install glibc-devel
    sudo yum -y install fftw-devel
    sudo yum -y install gsl-devel
    sudo yum -y install gperf
    sudo yum -y install ghostscript
    sudo yum -y install curl-devel
    sudo yum -y install pcre-devel
    sudo yum -y install texinfo-tex
    sudo yum -y install arpack-devel
    sudo yum -y install libX11-devel
    sudo yum -y install suitesparse-devel
    sudo yum -y install glpk-devel
    sudo yum -y install gnuplot
    sudo yum -y install desktop-file-utils
    sudo yum -y install GraphicsMagick-c++-devel
    sudo yum -y install fltk-devel
    sudo yum -y install ftgl-devel
    sudo yum -y install qrupdate-devel
    sudo yum -y install rpmlib
    sudo yum -y install gsl-devel
    sudo yum -y install ffmpeg
    sudo yum -y install ffmpeg-devel
    
  3. metis のインストール
    cd /tmp
    wget http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz
    tar -xvzof metis-5.1.0.tar.gz
    cd metis-5.1.0
    make config
    make
    sudo make install
    

2. (オプション)ATLAS をソースパッケージを用いてインストール

Ubuntu では、ATLAS のインストールはパッケージを用いて簡単に行うことができる。 もし、ATLASのパッケージを用いて何かの問題が出たときは、 次の手順で、ATLASのソースパッケージを試すことができる.

インストールに数時間以上かかります.

ATLASのパッケージを用いて問題がなかったときは、この手順を試す必要はありません。

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

※ /usr/bin/cpufreq-selector が無いときは「sudo apt -y install gnome-applets」

※ 「sudo dpkg -i *.deb」でエラーが出るときは、BIOS メニューで、CPU の電源管理に関する機能を OFF にすると改善する場合がある

3. (オプション)前提ソフトウェアをソースコードからビルドしてインストール

あとで Octave のビルド時に configure を実行しますが,configure でエラーが出る場合,あるいは、octave のテスト時にエラーが出る場合など、 ソースコードからビルドし,インストールすることでエラーが回避できる可能性がある.

※ かなり手間と時間がかかりますので、エラーが出たときのみに試すのがいいと考えます.

<それぞれのインストール手順の Web ページへのリンク>

4. Octave のソースコードのダウンロード

ここで行うことは, Octave ソースコードをダウンロードすること.

  1. https://www.gnu.org/software/octave/ を開く
  2. 「Download」をクリック
  3. 「ftp://ftp.gnu.org/gnu/octave」をクリック
  4. 「octave-3.8.0.tar.gz」をクリック

    ダウンロードが始まる.

  5. ダウンロードしたファイルを /tmp に移す

5. Octave-Forge のソースコードのダウンロード

  1. 今度は,https://octave.sourceforge.io/ を開く
  2. 「Links」をクリック
  3. 「http://sourceforge.net/projects/octave/」をクリック
  4. 「Files」をクリック
  5. 「Octave Forge」をクリック
  6. 最新版をクリック
  7. ファイルをクリック
  8. ダウンロードしたファイル (octave-forge-bundle-20090607.tar.gz ) を /tmp に移す

    あとで役に立つことが多いので、ダウンロードしておく.(インストール手順は、この Web ページ中に示します)

6. Octave のビルドとインストールの手順

  1. 先ほどダウンロードした octave-3.8.0.tar.gz を解凍
    cd /tmp
    sudo rm -rf octave-3.8.0
    tar -xvzof octave-3.8.0.tar.gz
    

    結果の確認(実行結果の例をここに示す).

  2. /etc/ld.so.conf の調整

    設定例は次の通り

    ■ Octave バージョン 3.8.0 の場合

    /usr/local/lib
    /usr/local/lib/octave/3.8.0
    

    ◆ Ubuntu 12.04 での設定例

  3. sudo /sbin/ldconfig の実行
    sudo /sbin/ldconfig
    
  4. cd /tmp/octave-3.8.0 の実行
    cd /tmp/octave-3.8.0
    
  5. configure の実行

    configure の実行については,いくつかの場合を説明する.

    ■   Ubuntu の場合 ■

    ■ Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた OpenBLAS
    • Octave 3.8.0
    • OpenBLAS
    • GNU コンパイラ
    • Ubuntu 12.04

    「sudo apt -y install libopenblas-base libatlas3gf-base」で OpenBLAS のインストールの後, コンソールで次の操作を行う.

    ◆ configure の操作例

    sudo update-alternatives --config libblas.so.3gf
    sudo update-alternatives --config liblapack.so.3gf
    CXXFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
    FFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
    ./configure --enable-shared --enable-dl \
    --with-blas="-L/usr/lib/openblas-base -lcblas -lopenblas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" \
    --with-lapack="-L/usr/lib/lapack -llapack -L/usr/lib/openblas-base -lopenblas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" 
    
    ■ Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04

    ATLAS をパッケージを用いてインストールの後, コンソールで次の操作を行う.

    ◆ configure の操作例

    sudo update-alternatives --config libblas.so.3gf
    sudo update-alternatives --config liblapack.so.3gf
    CXXFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
    FFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
    ./configure --enable-shared --enable-dl \
    --with-blas="-L/usr/lib/atlas-base -lptf77blas -latlas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" \
    --with-lapack="-L/usr/lib/atlas-base -llapack_atlas -llapack -lptf77blas -latlas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" 
    

    ■ Ubuntu + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS 3.10.1 (ソースコードからビルドしてインストール)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ATLAS のインストールの後, コンソールで次の操作を行う.

    ◆ configure の操作例

    CXXFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2 -I/usr/local/include -I/usr/local/atlas/include" \
    FFLAGS="-fomit-frame-pointer  -fno-schedule-insns2 -fopenmp -mfpmath=sse -msse3  -fexceptions -O2" \
    ./configure --enable-shared --enable-dl \
    --with-blas="-L/usr/local/lib -L/usr/local/atlas/lib -lptcblas -lptf77blas -latlas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" \
    --with-lapack="-L/usr/local/lib -L/usr/local/atlas/lib -ltmglib -llapack -lptcblas -lptf77blas -latlas -lmetis -lquadmath -lgfortran -lgomp -lpthread -ldl" 
    

    ■   Fedora の場合 ■  

    ■ Fedora + GNU のコンパイラ + パッケージでインストールされた ATLAS と LAPACK
    • ATLAS (パッケージ)
    • GNU コンパイラ
    • Fedora

    ◆ configure の操作例

    CC=gcc CXX=g++ F77=gfortran LIBS="-lquadmath -lm" CFLAGS="-O3 -fexceptions" CPPFLAGS="-O3 -fexceptions" FFLAGS="-O3 -fexceptions" ./configure --prefix=/usr/local --enable-static --enable-shared --enable-dl --disable-static --with-blas="-L/usr/lib64/atlas -lptf77blas -latlas -lgfortran -lpthread -lquadmath" --with-lapack="-L/usr/lib64/atlas -llapack -lquadmath" --with-qrupdate-libdir=/usr/local/lib PTHREAD_LIBS="-lpthread"
    

    ※ なお,metis をリンクしたい場合には「LIBS="-lmetis -lm"」を付ける.

    ※ OpenMP も使いたい場合は,CFLAGS と CPPFLAGS に「-fopenmp」を付ける

    ※ Core2 プロセッサであり,かつ,64 ビット Linux を使っている場合.
    • 64 ビット Linux なので「-m64」を付ける.
    • Core2 プロセッサなので「-mfpmath=sse -msse4.2 -march=native」を付ける.(gcc 等のバージョンによっては,「-mfpmath=sse -mssse3 -march=core2」に変えることもある)

      ※ -mnative は Pentium 系のマシンにおいて「そのマシンの CPU に特化したコードを生成する」という意味.詳しくは「gcc -E -v -march=native -」

    つまり,以下の通り

    CC=gcc CXX=g++ F77=gfortran LIBS="-lquadmath -lm" CFLAGS="-O3 -fexceptions -m64 -march=native -mfpmath=sse -msse4.2" CPPFLAGS="-O3 -fexceptions -m64 -march=native -mfpmath=sse -msse4.2" FFLAGS="-O3 -fexceptions -m64 -march=native -mfpmath=sse -msse4.2" ./configure --prefix=/usr/local --enable-static --enable-shared --enable-dl --disable-static --with-blas="-L/usr/lib64/atlas -lptf77blas -latlas -lgfortran -lpthread -lquadmath" --with-lapack="-L/usr/lib64/atlas -llapack -lquadmath" --with-qrupdate-libdir=/usr/local/lib PTHREAD_LIBS="-lpthread"
    

    ■ Fedora + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK

    ATLAS を自前でビルドした場合で,それを使いたい場合は,コンソールで次の操作を行う.

    ATLAS を自前でビルドした場合には「-L/usr/lib64/atlas」の部分は「-L/usr/local/atlas/lib」のように変える.例えば,次のようになる.

    ■ Fedora + GNU のコンパイラ + GotoBLAS

    GotoBLAS のビルドとインストールの後, コンソールで次の操作を行う.

    ◆ configure の操作例

    CC=gcc CXX=g++ F77=gfortran LIBS="-lquadmath -lm" CFLAGS="-O3 -fexceptions" CPPFLAGS="-fexceptions" FFLAGS="-O3 -fexceptions" ./configure --prefix=/usr/local --enable-static --enable-shared --enable-dl --disable-static --with-blas="-lgoto -lgfortran -lpthread -lquadmath" --with-lapack="-llapack_LINUX -ltmglib_LINUX -lquadmath" --with-qrupdate-libdir=/usr/local/lib PTHREAD_LIBS="-lpthread"
    

    ※ なお,metis をリンクしたい場合には「LIBS="-lmetis -lm"」を付ける.

  6. configure の結果の確認

    ※ エラーメッセージが出ていないこと を確認してください

    ■   Ubuntu の場合 ■  

  7. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた OpenBLAS と LAPACK
    • Octave 3.8.0
    • OpenBLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ configure の実行結果例

  8. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ configure の実行結果例

  9. Ubuntu + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS 3.10.1 (ソースコードからビルドしてインストール)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ■   Fedora の場合 ■  

    Fedora 17 での configure の実行結果例

  10. make の実行
    make -j4
    
  11. make の結果の確認

    エラーメッセージが出ていないこと.

  12. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた OpenBLAS と LAPACK
    • Octave 3.8.0
    • OpenBLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ make の実行結果例

  13. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ make の実行結果例

  14. Ubuntu + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS 3.10.1 (ソースコードからビルドしてインストール)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ■   Fedora の場合 ■  

    Fedora 17 での make の実行結果例

    (octave バージョン 3.6.2 の場合)

  15. make check の実行
    make check
    
  16. make check の結果の確認

    ■   Ubuntu の場合 ■

    ◆ make check の実行結果例

  17. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ make check の実行結果例

  18. Ubuntu + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS 3.10.1 (ソースコードからビルドしてインストール)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版
    • Octave 3.6.1
    • GotoBLAS
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ make check の実行結果例

    ※ Octave バージョン 3.2.4 の場合, 次のようなエラーが出る場合がある.
    scripts/image/imread.m ... octave: magick/semaphore.c:525: LockSemaphoreInfo: Assertion `semaphore_info != (SemaphoreInfo *) ((void *)0)' failed.
    panic: Aborted -- stopping myself...
    

    これは,GraphicsMagick の新しいバージョンに,Octave バージョン 3.2.4 が対応していないことに起因するエラーである. GraphicsMagick の古いバージョンをインストールすることで解決する場合がある.

    1. GraphicsMagick-1.2.7.tar.gzのダウンロード→解凍
    2. .configure または .configure --without-perl
    3. make
    4. make install

    ■   Fedora の場合 ■  

    Fedora 17 での make check の実行結果例

    Octave バージョン 3.6.2 の場合

  19. sudo make install の実行
    sudo make install
    
  20. make install の結果の確認

    □ Ubuntu での実行結果例

  21. 試しに実行してみる
      X = rand(2000,2000); Y = rand(2000,2000); tic(); Z = X * Y; toc()
      X = rand(2000,2000); tic(); [L, U, P] = lu(X); toc()
      X = rand(2000,2000); tic(); [Z, RCOND] = inv(X); toc()
      X = rand(2000,2000); tic(); [D, RCOND] = det(X); toc()
      X = rand(2000,2000); tic(); [U, S, V] = svd(X); toc()
      X = rand(2000,2000); tic(); [Q, R, P] = qr(X); toc()
      X = rand(2000,2000); Y = rand(2000,2000); tic(); Z = cov(X, Y); toc()
      X = rand(2000,2000); tic(); [v, L] = eig( cov(X) ); toc()
      X = rand(2000,2000); B = rand(21); tic(); Z = conv2(X, B, 'full'); toc()
      X = rand(2000,2000); tic(); Z = fft2(X, 2000, 2000); toc()
      x = rand(1000000,1); y = rand(1000000,1); tic(); H = convhull(x, y); toc()
    
  22. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた OpenBLAS と LAPACK
    • Octave 3.8.0
    • OpenBLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ 実行結果例

  23. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK
    • Octave 3.8.0
    • ATLAS (Ubuntu のパッケージ)
    • GNU コンパイラ
    • Ubuntu 12.04, 64 ビット版

    ◆ 実行結果例

Octave-forge のインストール

  1. Octave-forge ソースコードの入手を済ませておくこと

    http://sourceforge.net/projects/octave

    詳しい手順は,この Web ページの上の方に記述している.

  2. Octave-forge ソースコード octave-forge-bundle-200900607.tar.gz を /tmp に解凍
    cd /tmp
    tar -xvzof octave-forge-bundle-200900607.tar.gz
    
  3. .octaverc の設定

    ホームディレクトリに,ファイル「.octaverc」を作成しておく. 下記の「pkg install ...」の実行時に 「UINT_64_C was not declared in this scope」のようなエラーが出ることを防ぐために、下記の設定を行う.

    setenv("CFLAGS", "-D__STDC_CONSTANT_MACROS");
    setenv("CXXFLAGS", "-D__STDC_CONSTANT_MACROS");
    
  4. インストール

    (方針)

    • octave を起動し,「pkg install ...」でインストールする.
    • octave-forge-bundle-20090607.tar.gz を使う。但し、新しいパッケージについては、「pkg install -global -forge ・・・」でインストールする
    • パッケージ間の依存関係があるので、下のようなシェルスクリプトを作り、インストールを3回繰り返すことにする

    参考 Web ページ https://www.gnu.org/software/octave/doc/interpreter/Installing-and-Removing-Packages.html

    cd /tmp
    ldconfig 
    tar -xvzof /tmp/octave-forge-bundle-20090607.tar.gz
    # 不要なパッケージの削除
    for i in time-2.0.0 financial-0.4.0 communications-1.1.1 ncArray-1.0.0 splines-1.1.0 issa-0.1.2 mechanics-1.2.1 data-smoothing-1.3.0 strings-1.1.0 quaternion-2.0.0 specfun-1.1.0 dicom-0.1.1 geometry-1.5.0 queueing-1.1.0 NaN-2.5.5 actuarial-1.1.0 bim-1.0.1 control-2.3.53 dataframe-0.9.1 econometrics-1.0.8 es-0.0.4 fenv-0.1.0 fits-1.0.2 fl-core-1.0.0 fpl-1.3.1 ga-0.10.0 general-1.3.2 generate_html-0.1.3 gnuplot-1.0.1 gpc-0.1.7 image-1.0.14 io-1.0.19 java-1.2.9 linear-algebra-2.2.0 miscellaneous-1.1.0 msh-1.0.2 nan-2.4.1 nlwing2-1.2.0 nnet-0.1.13 nurbs-1.3.3 ocs-0.1.3 octcdf-1.1.5 octgpr-1.2.0 octproj-1.1.0 ode-1.0.1 odepkg-0.6.12 openmpi_ext-1.1.0 optim-1.2.0 optiminterp-0.3.3 parallel-2.0.6 plot-1.0.8 pt_br-1.0.9 signal-1.1.3 sockets-1.0.8 specfun-1.0.9 statistics-1.1.3 struct-1.0.10 tsa-4.2.4 vrml-1.0.13 fuzzy-logic-toolkit-0.4.1; do A=${i/-*}; rm -f /tmp/octave-forge-bundle-20090607/main/${A}*; rm -f /tmp/octave-forge-bundle-20090607/extra/${A}* ; done
    # repeat 3 times
    # 1 回目だけは「-nodeps 」付き
    for i in /tmp/octave-forge-bundle-20090607/main/*.tar.gz; do echo $i; echo "pkg install -nodeps -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" |  octave; done
    # octave forge bundle-20090607 が古いので、
    # 必要なものを拾う作業が残っている
    for i in time-2.0.0 financial-0.4.0 communications-1.1.1 ncArray-1.0.0 splines-1.1.0 issa-0.1.2 mechanics-1.2.1 data-smoothing-1.3.0 strings-1.1.0 quaternion-2.0.0 specfun-1.1.0 dicom-0.1.1 geometry-1.5.0 queueing-1.1.0 NaN-2.5.5 actuarial-1.1.0 bim-1.0.1 control-2.3.53 dataframe-0.9.1 econometrics-1.0.8 es-0.0.4 fenv-0.1.0 fits-1.0.2 fl-core-1.0.0 fpl-1.3.1 ga-0.10.0 general-1.3.2 generate_html-0.1.3 gnuplot-1.0.1 gpc-0.1.7 image-1.0.14 io-1.0.19 java-1.2.9 linear-algebra-2.2.0 miscellaneous-1.1.0 msh-1.0.2 nan-2.4.1 nlwing2-1.2.0 nnet-0.1.13 nurbs-1.3.3 ocs-0.1.3 octcdf-1.1.5 octgpr-1.2.0 octproj-1.1.0 ode-1.0.1 odepkg-0.6.12 openmpi_ext-1.1.0 optim-1.2.0 optiminterp-0.3.3 parallel-2.0.6 plot-1.0.8 pt_br-1.0.9 signal-1.1.3 sockets-1.0.8 specfun-1.0.9 statistics-1.1.3 struct-1.0.10 tsa-4.2.4 vrml-1.0.13 fuzzy-logic-toolkit-0.4.1; do echo $i; echo "pkg install -nodeps -global -forge `echo $i | sed 's/\-[0-9\.]*//g'`" |  octave; done
    for i in /tmp/octave-forge-bundle-20090607/extra/*.tar.gz; do echo $i; echo "pkg install -nodeps -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" |  octave; done
    # 2
    for i in /tmp/octave-forge-bundle-20090607/main/*.tar.gz; do echo $i; echo "pkg install -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" |  octave; done
    for i in time-2.0.0 financial-0.4.0 communications-1.1.1 ncArray-1.0.0 splines-1.1.0 issa-0.1.2 mechanics-1.2.1 data-smoothing-1.3.0 strings-1.1.0 quaternion-2.0.0 specfun-1.1.0 dicom-0.1.1 geometry-1.5.0 queueing-1.1.0 NaN-2.5.5 actuarial-1.1.0 bim-1.0.1 control-2.3.53 dataframe-0.9.1 econometrics-1.0.8 es-0.0.4 fenv-0.1.0 fits-1.0.2 fl-core-1.0.0 fpl-1.3.1 ga-0.10.0 general-1.3.2 generate_html-0.1.3 gnuplot-1.0.1 gpc-0.1.7 image-1.0.14 io-1.0.19 java-1.2.9 linear-algebra-2.2.0 miscellaneous-1.1.0 msh-1.0.2 nan-2.4.1 nlwing2-1.2.0 nnet-0.1.13 nurbs-1.3.3 ocs-0.1.3 octcdf-1.1.5 octgpr-1.2.0 octproj-1.1.0 ode-1.0.1 odepkg-0.6.12 openmpi_ext-1.1.0 optim-1.2.0 optiminterp-0.3.3 parallel-2.0.6 plot-1.0.8 pt_br-1.0.9 signal-1.1.3 sockets-1.0.8 specfun-1.0.9 statistics-1.1.3 struct-1.0.10 tsa-4.2.4 vrml-1.0.13 fuzzy-logic-toolkit-0.4.1; do echo $i; echo "pkg install -global -forge `echo $i | sed 's/\-[0-9\.]*//g'`" |  octave; done
    for i in /tmp/octave-forge-bundle-20090607/extra/*.tar.gz; do echo $i; echo "pkg install -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" |  octave; done
    # 3
    for i in /tmp/octave-forge-bundle-20090607/main/*.tar.gz; do echo $i; echo "pkg install -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" |  octave; done
    for i in time-2.0.0 financial-0.4.0 communications-1.1.1 ncArray-1.0.0 splines-1.1.0 issa-0.1.2 mechanics-1.2.1 data-smoothing-1.3.0 strings-1.1.0 quaternion-2.0.0 specfun-1.1.0 dicom-0.1.1 geometry-1.5.0 queueing-1.1.0 NaN-2.5.5 actuarial-1.1.0 bim-1.0.1 control-2.3.53 dataframe-0.9.1 econometrics-1.0.8 es-0.0.4 fenv-0.1.0 fits-1.0.2 fl-core-1.0.0 fpl-1.3.1 ga-0.10.0 general-1.3.2 generate_html-0.1.3 gnuplot-1.0.1 gpc-0.1.7 image-1.0.14 io-1.0.19 java-1.2.9 linear-algebra-2.2.0 miscellaneous-1.1.0 msh-1.0.2 nan-2.4.1 nlwing2-1.2.0 nnet-0.1.13 nurbs-1.3.3 ocs-0.1.3 octcdf-1.1.5 octgpr-1.2.0 octproj-1.1.0 ode-1.0.1 odepkg-0.6.12 openmpi_ext-1.1.0 optim-1.2.0 optiminterp-0.3.3 parallel-2.0.6 plot-1.0.8 pt_br-1.0.9 signal-1.1.3 sockets-1.0.8 specfun-1.0.9 statistics-1.1.3 struct-1.0.10 tsa-4.2.4 vrml-1.0.13 fuzzy-logic-toolkit-0.4.1; do echo $i; echo "pkg install -global -forge `echo $i | sed 's/\-[0-9\.]*//g'`" |  octave; done
    for i in /tmp/octave-forge-bundle-20090607/extra/*.tar.gz; do echo $i; echo "pkg install -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" |  octave; done
    # update
    echo "pkg update -global" | octave
    
  5. (オプション) パッケージの追加

    「pkg install -global -forge ...」を使って簡単に追加できる.

    for i in NaN-2.0.4 actuarial-1.1.0 bim-1.0.1 control-2.1.53 dataframe-0.8.2 econometrics-1.0.8 es-0.0.4 fenv-0.1.0 fits-1.0.1 fl-core-1.0.0 fpl-1.2.0 ga-0.9.8 general-1.2.2 generate_html-0.1.3 gnuplot-1.0.1 gpc-0.1.7 image-1.0.14 io-1.0.14 java-1.2.7 linear-algebra-2.0.0 miscellaneous-1.0.11 msh-1.0.2 nan-2.4.1 nlwing2-1.2.0 nnet-0.1.13 nurbs-1.3.3 ocs-0.1.1 octcdf-1.1.2 octgpr-1.2.0 octproj-1.0.2 ode-1.0.1 odepkg-0.6.12 openmpi_ext-1.0.2 optim-1.0.16 optiminterp-0.3.3 parallel-2.0.5 plot-1.0.8 pt_br-1.0.9 signal-1.0.11 sockets-1.0.7 specfun-1.0.9 statistics-1.0.10 struct-1.0.9 tsa-4.1.0 vrml-1.0.11 fuzzy-logic-toolkit-0.2.3; do echo $i; echo "pkg install -global -forge `echo $i | sed 's/\-[0-9\.]*//g'`" | sudo octave; done
    
  6. (オプション) 最新版に更新

    「pkg install -global -forge ...」を使って簡単に更新できる.

    for i in /tmp/octave-forge-bundle-20090607/main/*.tar.gz; do echo $i; echo "pkg install -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" | sudo octave; done
    for i in /tmp/octave-forge-bundle-20090607/extra/*.tar.gz; do echo $i; echo "pkg install -global -forge `basename $i .tar.gz | sed 's/\-[0-9\.]*//g'`" | sudo octave; done
    
  7. インストールされたパッケージの確認
  8. テスト実行

    ためしに、video パッケージの機能を使って,avi 形式の動画ファイルの読み込みと、フレーム100番の表示を行ってみる. (OpenCV に付属の avi ファイルを使っています)

    pkg load video
    img = aviread("/usr/local/share/opencv/samples/c/tree.avi", 100);
    imshow(img);
    
※ (参考情報)個別のパッケージのインストール方法

なお,octave の「pkg install」だとエラーメッセージが分かりにくいので, エラーが出るけど原因が分からないという場合, 下記のようなコマンドを実行して,エラーの有無を確認するという方法もあります.

cd main
tar -xvzof image-1.0.10.tar.gz
cd image-1.0.10
cd src
sh autogen.sh
CFLAGS="-I/usr/local/include/octave-3.6.2 -I/usr/local/include" LDFLAGS="-L/usr/local/lib/octave-3.6.2 -L/usr/local/lib" LIBS="-lavcodec -lavdevice -lavutil -lavformat -lswscale -lpng12 -lm" ./configure
make LIBS="-lavcodec -lavdevice -lavutil -lavformat -lswscale -lpng12 -lm"
make install

性能測定の例

  1. Octave をパッケージを用いてインストール: Octave 3.2.4 をパッケージを用いてインストール
  2. ATLAS 3.8.4 のパッケージ: ATLAS 3.8.4 をパッケージを用いてインストール. Octave 3.6.2 をビルド(本ページの手順)
  3. ATLAS 3.9.81 をビルド: ATLAS 3.9.81 をソースコードからビルドしてインストール. Octave 3.6.2 をビルド(本ページの手順)
  4. Intel MKL: Intel MKL をインストール. Octave 3.6.2 をビルド・インストール(本ページの手順)
      1. Octave をパッケージを用いてインストール 2. ATLAS 3.8.4 のパッケージ 3. ATLAS 3.9.81 をビルド 4. Intel MKL
(a) 行列と行列の積 X = rand(2000,2000); Y = rand(2000,2000); Z = X * Y 1.25 sec 1.23 sec 0.30 sec 0.188 sec
(b) LU 分解 (LU decomposition) X = rand(2000,2000); [L, U, P] = lu(X) 0.67 sec 0.70 sec 0.31 sec 0.181 sec
(c) 正方行列の逆行列 X = rand(2000,2000); [Z, RCOND] = inv(X) 1.72 sec 1.75 sec 0.58 sec 0.30 sec
(d) 行列式 (determinant) X = rand(2000,2000); [D, RCOND] = det(X) 0.63 sec 0.65 sec 0.25 sec 0.118 sec
(e) Singular Value Decomposition (SVD), X = U*S*V X = rand(2000,2000); [U, S, V] = svd(X) 72 sec 72 sec 70 sec 5.7 sec
(f) QR factorization X = rand(2000,2000); [Q, R, P] = qr(X) 4.2 sec 4.2 sec 1.80 sec 1.52 sec
(g) 分散共分散行列 X = rand(2000,2000), Y = rand(2000,2000); Z = cov(X, Y) 1.34 sec 1.27 sec 0.32 sec 0.23 sec
(h) 分散共分散行列の固有値と固有ベクトル(主成分分析) X = rand(2000,2000); [v, L] = eig( cov(X) ) 13.3 sec 13.2 sec 13.7 sec 2.1 sec
(i) 2次元の畳み込み(コンボリューション) X = rand(2000,2000); B = rand(21); Z = conv2(X, B, 'full') 4.1 sec 1.26 sec 0.73 sec 0.42 sec
(j) 2次元の高速フーリエ変換 (FFT) X = rand(2000,2000); Z = fft2(X, 2000, 2000) 0.105 sec 0.090 sec 0.098 sec 0.092 sec
(k) convex hull x = rand(1000000,1); y = rand(1000000,1); H = convhull(x, y) 0.51 sec 0.115 sec 0.126 sec 0.114 sec

【お断り】プログラムのテストを行っていない.他のプロセスを止めるなどしていない(従って,比較ではなく,傾向を見るための参考値だと思ってください).※ 単位は秒で,3桁目を四捨五入.

「2. ATLAS 3.8.4 のパッケージ」の実測値の例

ATLAS 3.8.4 をパッケージを用いてインストール. Octave 3.6.2 をビルド(本ページの手順)


(a) 行列と行列の積: X = rand(2000,2000); Y = rand(2000,2000); Z = X * Y

(b) LU 分解 (LU decomposition): X = rand(2000,2000); [L, U, P] = lu(X)

(c) 正方行列の逆行列: X = rand(2000,2000); [Z, RCOND] = inv(X)

(d) 行列式 (determinant): X = rand(2000,2000); [D, RCOND] = det(X)

(e) Singular Value Decomposition (SVD), X = U*S*V: X = rand(2000,2000); [U, S, V] = svd(X)

(f) QR factorization (QR decomposition ともいう): X = rand(2000,2000); [Q, R, P] = qr(X)

(g) 分散共分散行列: X = rand(2000,2000); Y = rand(2000,2000); Z = cov(X, Y)

(h) 分散共分散行列の固有値と固有ベクトル(主成分分析): X = rand(2000,2000); [v, L] = eig( cov(X) )

(i) 2次元の畳み込み(コンボリューション): X = rand(2000,2000); B = rand(21); Z = conv2(X, B, 'full')

(j) 2次元の高速フーリエ変換 (FFT): X = rand(2000,2000); Z = fft2(X, 2000, 2000)

(k) convex hull: x = rand(1000000,1); y = rand(1000000,1); H = convhull(x, y)

「3. ATLAS 3.9.81 をビルド」の実測値の例

ATLAS 3.9.81 をソースコードからビルドしてインストール. Octave 3.6.2 をビルド(本ページの手順)


(a) 行列と行列の積: X = rand(2000,2000); Y = rand(2000,2000); Z = X * Y

(b) LU 分解 (LU decomposition): X = rand(2000,2000); [L, U, P] = lu(X)

(c) 正方行列の逆行列: X = rand(2000,2000); [Z, RCOND] = inv(X)

(d) 行列式 (determinant): X = rand(2000,2000); [D, RCOND] = det(X)

(e) Singular Value Decomposition (SVD), X = U*S*V: X = rand(2000,2000); [U, S, V] = svd(X)

(f) QR factorization (QR decomposition ともいう): X = rand(2000,2000); [Q, R, P] = qr(X)

(g) 分散共分散行列: X = rand(2000,2000); Y = rand(2000,2000); Z = cov(X, Y)

(h) 分散共分散行列の固有値と固有ベクトル(主成分分析): X = rand(2000,2000); [v, L] = eig( cov(X) )

(i) 2次元の畳み込み(コンボリューション): X = rand(2000,2000); B = rand(21); Z = conv2(X, B, 'full')

(j) 2次元の高速フーリエ変換 (FFT): X = rand(2000,2000); Z = fft2(X, 2000, 2000)

(k) convex hull: x = rand(1000000,1); y = rand(1000000,1); H = convhull(x, y)

「4. Intel MKL」での実測値の例

Intel MKL をインストール. Octave 3.6.2 をビルド・インストール(本ページの手順)

【実測値の例】


(a) 行列と行列の積: X = rand(2000,2000); Y = rand(2000,2000); Z = X * Y

(b) LU 分解 (LU decomposition): X = rand(2000,2000); [L, U, P] = lu(X)

(c) 正方行列の逆行列: X = rand(2000,2000); [Z, RCOND] = inv(X)

(d) 行列式 (determinant): X = rand(2000,2000); [D, RCOND] = det(X)

(e) Singular Value Decomposition (SVD), X = U*S*V: X = rand(2000,2000); [U, S, V] = svd(X)

(f) QR factorization (QR decomposition ともいう): X = rand(2000,2000); [Q, R, P] = qr(X)

(g) 分散共分散行列: X = rand(2000,2000); Y = rand(2000,2000); Z = cov(X, Y)

(h) 分散共分散行列の固有値と固有ベクトル(主成分分析): X = rand(2000,2000); [v, L] = eig( cov(X) )

(i) 2次元の畳み込み(コンボリューション): X = rand(2000,2000); B = rand(21); Z = conv2(X, B, 'full')

(j) 2次元の高速フーリエ変換 (FFT): X = rand(2000,2000); Z = fft2(X, 2000, 2000)

(k) convex hull: x = rand(1000000,1); y = rand(1000000,1); H = convhull(x, y)

Intel MKL 1125 to 1135 tobe filled
  if [ ! -f /usr/lib/libgcc_s.so ]; then
      if [ -f /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so ]; then 
          cd /usr/lib
          ln -s /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so .
      fi
      if [ -f /usr/lib/gcc/i386-linux-gnu/4.6/libgcc_s.so ]; then 
          cd /usr/lib
          ln -s /usr/lib/gcc/i386-linux-gnu/4.6/libgcc_s.so .
      fi
  fi

see atlaslinux.html


# sudo apt -y install libatlas-base-dev
# sudo apt -y install libatlas-dev
# sudo apt -y install libatlas-doc
# sudo apt -y install libatlas-test
# sudo apt -y install libatlas3gf-base

l libatlas-doc
# sudo apt -y install libatlas-test
# sudo apt -y install libatlas3gf-base

F1="-fPIC -DPIC -fomit-frame-pointer -O2 -I/usr/include/atlas -I/usr/local/include" LDFLAGS="-L/usr/lib/atlas-base -L/usr/local/lib" LIBS="-lmetis -lgfortran -lgomp -lpthread -ldl -lquadmath" CFLAGS="$F1" CPPFLAGS="$F1" FFLAGS="$F1" ./configure --enable-static --enable-shared --enable-dl --with-blas="-lptcblas -lptf77blas -latlas -lgfortran -lgomp -lpthread -ldl -lquadmath" --with-lapack="-llapack_atlas -lptcblas -lptf77blas -latlas -lgfortran -lgomp -lpthread -ldl -lquadmath" PTHREAD_LIBS="-lpthread"

  # コンパイル時のエラー回避のため
  rm -f /tmp/malloca.c.$$
  cat libgnu/malloca.c | fgrep -v verify > /tmp/malloca.c.$$
  cp /tmp/malloca.c.$$ libgnu/malloca.c
#  cat libcruft/arpack/util/second.f | sed 's/INTRINSIC/EXTERNAL/g' > /tmp/second.f.$$
#  cp /tmp/second.f.$$ libcruft/arpack/util/second.f
  rm -f /tmp/stdio.h.$$
  cat libgnu/stdio.h | sed "s/_GL_CXXALIAS_SYS (getchar, int, (void));/\/\/_GL_CXXALIAS_SYS (getchar, int, (void));/g" | sed "s/_GL_CXXALIAS_SYS (putchar, int, (int c));/\/\/_GL_CXXALIAS_SYS (putchar, int, (int c));/g" | sed "s/_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char/\/\/_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char/g" > /tmp/stdio.h.$$
  cp /tmp/stdio.h.$$ libgnu/stdio.h
  #
  rm -f /tmp/nanosleep.c.$$
  cat libgnu/nanosleep.c | sed "s/verify (TYPE/\/\/ verify (TYPE/g" > /tmp/nanosleep.c.$$
  cp /tmp/nanosleep.c.$$ libgnu/nanosleep.c
# 


  • (インテルのコンパイラを使うときに限る)インテルのコンパイラを使ってビルドしたいときは,ソースコードの調整を行う

    libgnu/stdio.h を次のように変更

    libgnu/verify.h の 「#define _GL_HAVE_STATIC_ASSERT 1」の行をコメントアウト