Octaveのインストール

http://www.db.is.kyushu-u.ac.jp/rinkou/octave/octavelinux.htmlを見ながら進めました。途中いろいろ試行錯誤したので書いておきます。

全体の流れ

  1. ATLAS (ATLAS3.9.25)
  2. LAPACK (lapack-3.2.2)
  3. ATLAS
  4. METIS (metis-4.0)
  5. SuiteSparse (SuiteSparse-3.4.0)
  6. Octave (octave-3.2.4)

の順にコンパイルしてインストールします。

ATLAS 1回目

cat /proc/cpuinfo

とすると、

model name      : Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
stepping        : 11
cpu MHz         : 2659.918

となっており、model nameに書いてある周波数とcpu MHzが違っていて気持ち悪いです。VPSはそんなものなんだろう、と割り切って2660 MHzを使うことにします。コア数は2にしました。
いろいろなページを見てみると「ATLASの最適化を行っている間はCPUの省電力機能などをOFFにしておく」と書いてあって、

cpufreq-set -g performance

というコマンドを使うことになっていますが、これもVPSのせいか動きません。無視して進めます。
さくらのVPSはCentOS5.5、64bitで、入っているのはgcc4.1.2です。-march=nativeを入れて最適化することを考えていたので、事前にgcc4.4.0を入れています。これを呼ぶのにgcc、g++、gfortranのあとに44をつけます。
共有ライブラリを作れるほうが何かと便利なので、-fPICをつけます。(共有ライブラリがつくれないのが、他のソフトのコンパイルが通らないことがある)

../configure -t 2 -m 2660 -b 64 -Fa alg '-fopenmp -fPIC' \
--prefix=/usr/atlas -C acg gcc44 -C if gfortran44

Make.incを確認すると、CDEFSのところに-fPICが入っていなかったので書き加えます。

CDEFS = $(L2SIZE) $(INCLUDES) $(F2CDEFS) $(ARCHDEFS)  -DATL_NCPU=$(NPROC) -fPIC

また、gcc44への変更がGOODGCCに反映されていなかったので修正します。

GOODGCC = gcc44 -fopenmp -fPIC -m64

/etc/ld.so.conf

/usr/atlas/lib

を追加して、

/sbin/ldconfig

でリンクを更新すると書かれていますが、私の環境ではエラーが出ます。/usr/atlas/libの代わりに、

/usr/local/lib

の追加が必要でした。

LAPACK

make.incを編集します。

FORTRAN  = gfortran44 -fimplicit-none -g
OPTS     = -O3 -fopenmp -fPIC -m64 -march=native -fexceptions -fomit-frame-pointer -fno-tree-vectorize
DRVOPTS  = $(OPTS)
NOOPT    = -fPIC -m64
LOADER   = gfortran44 -g
LOADOPTS = -L/usr/atlas/lib
BLASLIB = /usr/atlas/lib/libptf77blas.a -latlas -lpthread -lgomp

ATLAS 2回目

../configure -t 2 -m 2660 -b 64 -Fa alg '-fopenmp -fPIC' \
--prefix=/usr/atlas -C acg gcc44 -C if gfortran44 \
-Ss flapack /root/tmp/lapack-3.2.2/SRC -Si latune 1

Make.incにてCDEFSGOODGCCを1回目と同様に変更します。

METIS

make CC=gcc44 COPTIONS="-O3 -fno-tree-vectorize -fPIC -fexceptions -m64 -march=native"

SuiteSparse

make CC=gcc44 CPLUSPLUS=g++44 F77=gfortran44 \
CFLAGS="-I../Include -O3 -fno-tree-vectorize -fPIC -fexceptions -m64 -march=native" \
F77FLAGS="-O3 -fno-tree-vectorize -fPIC -fexceptions -m64 -march=native" \
BLAS="-L/usr/atlas/lib -lptf77blas -latlas -L/usr/local/lib -lmetis -lpthread -lgfortran  -lm" \
LAPACK="-llapack_LINUX -ltmglib_LINUX"

Octaveコンパイル

CC=gcc44 CXX=g++44 F77=gfortran44 LIBS="-lmetis -lm" \
CFLAGS="-DH5_USE_16_API -O3 -fexceptions -m64 -march=native" \
FFLAGS="-DH5_USE_16_API -O3 -fexceptions -m64 -march=native" \
CPPFLAGS="-DH5_USE_16_API -O3 -fexceptions -m64 -march=native" \
./configure --prefix=/usr/local --enable-shared --enable-dl --disable-static \
--with-blas="-L/usr/atlas/lib -lptf77blas -latlas -lgfortran -lpthread -lgomp" \
--with-lapack="-L/usr/local/lib -llapack_LINUX -ltmglib_LINUX"