金子邦彦研究室プログラミングOctave の活用Ubuntu, Fedora で Octave バージョン 3.8.0 のビルドとインストールとテスト実行

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」をクリック
    [image]
  3. ftp://ftp.gnu.org/gnu/octave」をクリック
    [image]
  4. octave-3.8.0.tar.gz」をクリック
    [image]

    ダウンロードが始まる.

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

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

  1. 今度は,https://octave.sourceforge.io/ を開く
  2. Links」をクリック
    [image]
  3. http://sourceforge.net/projects/octave/」をクリック
    [image]
  4. Files」をクリック
    [image]
  5. Octave Forge」をクリック
    [image]
  6. 最新版をクリック
    [image]
  7. ファイルをクリック
    [image]
  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
    
    [image]

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

    [image]
  2. /etc/ld.so.conf の調整

    設定例は次の通り

    ■ Octave バージョン 3.8.0 の場合

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

    ◆ Ubuntu 12.04 での設定例

    [image]
  3. sudo /sbin/ldconfig の実行
    sudo /sbin/ldconfig
    
    [image]
  4. cd /tmp/octave-3.8.0 の実行
    cd /tmp/octave-3.8.0
    
    [image]
  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" 
    

    [image]

    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"
    

    [image]

    ※ なお,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"
    

    [image]

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

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

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

    [image]

    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

    ◆ configure の実行結果例

  8. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK

    ◆ configure の実行結果例

    [image]
  9. Ubuntu + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK

    ■   Fedora の場合 ■  

    Fedora 17 での configure の実行結果例

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

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

  12. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた OpenBLAS と LAPACK

    ◆ make の実行結果例

  13. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK

    ◆ make の実行結果例

    [image]
  14. Ubuntu + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK

    ■   Fedora の場合 ■  

    Fedora 17 での make の実行結果例

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

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

    ■   Ubuntu の場合 ■

    ◆ make check の実行結果例

  17. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK

    ◆ make check の実行結果例

    [image]
  18. Ubuntu + GNU のコンパイラ + ソースコードからビルドされた ATLAS と LAPACK

    ◆ make check の実行結果例

  19. ※ 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...
    
    [image]

    これは,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 の場合

    [image]
  20. sudo make install の実行
    sudo make install
    
    [image]
  21. make install の結果の確認

    Ubuntu での実行結果例

    [image]
  22. 試しに実行してみる
      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()
    
  23. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた OpenBLAS と LAPACK

    ◆ 実行結果例

    [image]
  24. Ubuntu + GNU のコンパイラ + Ubuntu のパッケージでインストールされた ATLAS と LAPACK

    ◆ 実行結果例

    [image]

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. インストール

    (方針)

    参考 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. インストールされたパッケージの確認
    [image]
  8. テスト実行

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

    pkg load video
    img = aviread("/usr/local/share/opencv/samples/c/tree.avi", 100);
    imshow(img);
    
    [image]
    [image]

※ (参考情報)個別のパッケージのインストール方法

なお,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
[image]

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

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

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

[image]
(a) 行列と行列の積: X = rand(2000,2000); Y = rand(2000,2000); Z = X * Y
[image]
(b) LU 分解 (LU decomposition): X = rand(2000,2000); [L, U, P] = lu(X)
[image]
(c) 正方行列の逆行列: X = rand(2000,2000); [Z, RCOND] = inv(X)
[image]
(d) 行列式 (determinant): X = rand(2000,2000); [D, RCOND] = det(X)
[image]
(e) Singular Value Decomposition (SVD), X = U*S*V: X = rand(2000,2000); [U, S, V] = svd(X)
[image]
(f) QR factorization (QR decomposition ともいう): X = rand(2000,2000); [Q, R, P] = qr(X)
[image]
(g) 分散共分散行列: X = rand(2000,2000); Y = rand(2000,2000); Z = cov(X, Y)
[image]
(h) 分散共分散行列の固有値と固有ベクトル(主成分分析): X = rand(2000,2000); [v, L] = eig( cov(X) )
[image]
(i) 2次元の畳み込み(コンボリューション): X = rand(2000,2000); B = rand(21); Z = conv2(X, B, 'full')
[image]
(j) 2次元の高速フーリエ変換 (FFT): X = rand(2000,2000); Z = fft2(X, 2000, 2000)
[image]
(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 をビルド(本ページの手順)

[image]
(a) 行列と行列の積: X = rand(2000,2000); Y = rand(2000,2000); Z = X * Y
[image]
(b) LU 分解 (LU decomposition): X = rand(2000,2000); [L, U, P] = lu(X)
[image]
(c) 正方行列の逆行列: X = rand(2000,2000); [Z, RCOND] = inv(X)
[image]
(d) 行列式 (determinant): X = rand(2000,2000); [D, RCOND] = det(X)
[image]
(e) Singular Value Decomposition (SVD), X = U*S*V: X = rand(2000,2000); [U, S, V] = svd(X)
[image]
(f) QR factorization (QR decomposition ともいう): X = rand(2000,2000); [Q, R, P] = qr(X)
[image]
(g) 分散共分散行列: X = rand(2000,2000); Y = rand(2000,2000); Z = cov(X, Y)
[image]
(h) 分散共分散行列の固有値と固有ベクトル(主成分分析): X = rand(2000,2000); [v, L] = eig( cov(X) )
[image]
(i) 2次元の畳み込み(コンボリューション): X = rand(2000,2000); B = rand(21); Z = conv2(X, B, 'full')
[image]
(j) 2次元の高速フーリエ変換 (FFT): X = rand(2000,2000); Z = fft2(X, 2000, 2000)
[image]
(k) convex hull: x = rand(1000000,1); y = rand(1000000,1); H = convhull(x, y)

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

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

【実測値の例】

[image]
(a) 行列と行列の積: X = rand(2000,2000); Y = rand(2000,2000); Z = X * Y
[image]
(b) LU 分解 (LU decomposition): X = rand(2000,2000); [L, U, P] = lu(X)
[image]
(c) 正方行列の逆行列: X = rand(2000,2000); [Z, RCOND] = inv(X)
[image]
(d) 行列式 (determinant): X = rand(2000,2000); [D, RCOND] = det(X)
[image]
(e) Singular Value Decomposition (SVD), X = U*S*V: X = rand(2000,2000); [U, S, V] = svd(X)
[image]
(f) QR factorization (QR decomposition ともいう): X = rand(2000,2000); [Q, R, P] = qr(X)
[image]
(g) 分散共分散行列: X = rand(2000,2000); Y = rand(2000,2000); Z = cov(X, Y)
[image]
(h) 分散共分散行列の固有値と固有ベクトル(主成分分析): X = rand(2000,2000); [v, L] = eig( cov(X) )
[image]
(i) 2次元の畳み込み(コンボリューション): X = rand(2000,2000); B = rand(21); Z = conv2(X, B, 'full')
[image]
(j) 2次元の高速フーリエ変換 (FFT): X = rand(2000,2000); Z = fft2(X, 2000, 2000)
[image]
(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 を次のように変更

    [image]

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

  •