ベンチマークの準備
スパコン用のベンチマークであるHPCCは、PC上でも動きます。しかし、インストーラをダウンロードして、ダブルクリックでインストールというわけにはいきません。少し準備が必要です。ここでは次のような環境でHPCCを実行します。
- Windows/Cygwin (32 bit)
BLASはATLAS(ソースからビルド)、MPIはMPICH(Windows版)のバイナリを利用
- KNOPPIX/MATH DVD (32 bit)
BLASはATLASのバイナリ、MPIはMPICHのバイナリを利用
- Fedora (32 bit)
BLASはATLAS(バイナリ)とGotoBLAS(ソースからビルド)、MKL(バイナリ)、MPIはOpenMPI(バイナリ)を利用
HPCCをコンパイルしなければならないのはすべての環境で共通ですが、それ以外はバイナリのパッケージをダウンロードしてインストールするだけでいい環境もあるので、自分の環境で都合のよいもので試すとよいでしょう。
Windows/Cygwin
WindowsでCygwinを利用している場合、ATLASをコンパイルし、MPICH(Windows版)をインストールすればHPCCを実行できます。CygwinのインストールとATLASのコンパイルには時間と手間がかかるので、面倒な場合はKNOPPIX/MATH上で試すことをお勧めします(ちなみに、Cygwinは遅いイメージがありますが、KNOPPIX/MATHの場合と比較して、結果に大きな差はありませんでした)。
- Cygwin Information and Installationからインストーラをダウンロード・実行します。インストールは大体デフォルトのまま進めて構いませんが、DevelとLibsはすべてインストールするようにします。
- MPICH(Windows版)をダウンロード・インストールします。
- SourceForge.net:ATLASから最新のATLASをダウンロード・ビルドします(atlas3.8.0.tar.bz2)。
- HPCCから最新のHPCCをダウンロード・ビルドします(hpcc-1.2.0.tar.gz)。
ATLASのビルド
ATLASのビルドは次のように行います(ATLASはCPUの性能を測定しながらビルドするので、電源オプションの電源設定を「常にオン」にして、省電力モードにならないようにしておいてください)。
bzip2 -dc atlas3.8.0.tar.bz2 | tar xf - mkdir ATLAS38 cd ATLAS38 ../ATLAS/configure -b 32 -D c -DWALL make
ここでは「/cygdrive/d/work/ATLAS38/lib」にライブラリができたとして話を進めます(電源オプションは元通りにしてかまいません)。
HPCCのビルド
HPCCを展開し、「hpl/setup/Make.Linux_PII_CBLAS」を「hpl/Make.Atlas」にコピーします。この「Make.Atlas」にビルドのための情報を記述します。変更箇所を以下に挙げます(LAdirはATLASをコンパイルした環境に合わせてください。CCFLAGSに「-mtune=athlon-xp」のような最適化オプションを追加しても良いでしょう。GCCのマニュアルを参考にしてください)。
MPdir = /cygdrive/c/Program\ Files/MPICH/SDK.gcc/ MPinc = -I$(MPdir)/include MPlib = $(MPdir)/lib/libmpich.a
LAdir = /cygdrive/d/work/ATLAS38/lib LAinc = LAlib = -L$(LAdir) -lcblas -latlas
次のコマンドでコンパイルします(プロセッサが2つあるなら、make -j 2 arch=Atlasなどとすると速くなります)。
make arch=Atlas
ちなみに、ビルドをやり直す場合は、まず、次のコマンドで初期化してください。
make arch=Atlas clean
HPCCの実行
入力パラメータの設定
「_hpccinf.txt」を「hpccinf.txt」にコピーします。ベンチマークへの入力ファイルです。このファイルの書き方については後述します。とりあえず、次のように変更しておきましょう。
2 # of process grids (P x Q) 1 2 Ps 2 1 Qs
PxQは計算プロセスの数なので、プロセッサ(あるいはコア)が一つの場合は次のようにしてください。
1 # of process grids (P x Q) 1 Ps 1 Qs
HPCCの実行
MPIRunを用いてhpccを実行します(-npの後には利用するプロセス数を書きます)。
/cygdrive/c/Program\ Files/MPICH/mpd/bin/MPIRun -np 2 hpcc
うまく実行できると「hpccoutf.txt」というファイルができます。ファイルの最後は次のようになっているはずです(hpccを再度実行すると、新しい結果はこのファイルに追記されます)。
######################################################################## End of HPC Challenge tests. Current time (1195413062) is Mon Nov 19 04:11:02 2007 ########################################################################
結果の見方は後述します。
KNOPPIX/MATH
KNOPPIX/MATH上でHPCCを実行する方法を紹介しましょう。KNOPPIX/MATHは数学関係のソフトウェアが充実したライブDVDです(本稿では5.1.1 DVD版を使いました)。
SSH Serverの準備
MPICHがSSHでパスワード無しでコマンドを実行できるようにします。
- メニューから[KNOPPIX]-[Services]-[Start SSH Server]
- SSH Serverを適当なパスワードで起動
- ssh localhostでログインできることを確認
- シェルから
ssh-keygenとして「~/.ssh/id_dsa.pub」を作成 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ATLASのインストール
KNOPPIX/MATHに収録されているATLASは、一般的なIntel系32ビットCPU用のものです。このままでも動作しますが、利用CPUに特化したATLASの方がはるかに高速です。そこで、パッケージ管理ソフトウェア(Synaptic)で「ATLAS」を検索し、「atlas3-3dnow-dev」など、適切なものをインストールします(本稿執筆時点でATLASの最新バージョンは3.8ですが、バイナリのパッケージは3.6のものしかありませんでした。最新版を使いたい場合は、ATLASのサイトからバイナリをダウンロードするか、Cygwinの場合のようにソースをコンパイルしてください)。
HPCCのビルド
HPCCのビルドはCygwinの場合と同じです。
tar zxf hpcc-1.2.0.tar.gz cd hpcc-1.2.0 cp hpl/setup/Make.Linux_ATHLON_CBLAS hpl/Make.Atlas
「Make.Atlas」の修正箇所は次のとおりです(CCFLAGSに「-mtune=athlon-xp」のような最適化オプションを追加しても良いでしょう。GCCのマニュアルを参考にしてください)。
MPdir=/usr/lib/mpich LAdir=/usr/lib/3dnow (CPU専用のATLASを導入していない場合は/usr/lib)
ビルドします。
make -j 2 arch=Atlas
Cygwinの場合と同じようにHPCCの入力ファイル「hpccinf.txt」を作り、試しに実行してみましょう。
Fedora
最後にFedora上でHPCCを実行する方法を紹介します。KNOPPIX/MATHと同じGNU/Linuxなので、本質的な違いはありませんが、ライブCDではないので、導入が多少面倒なソフトウェアも利用できます(ライブCDはもっと手軽なもののためにあると筆者は考えています)。
まず、必要なソフトウェアをインストールします(KNOPPIX/MATHの場合と同様に、本稿執筆時点では、ATLASの最新版(3.8)のバイナリパッケージはありませんでした)。これは32ビット環境の場合です。64ビット環境の場合は、64ビット用のソフトウェアをインストールしてください。
yum install lapack-devel yum install blas-devel yum install openmpi yum install openmpi-devel yum install atlas-sse2-devel yum install compat-libstdc++-33 (Intelのコンパイラのために必要)
ATLAS
ATLASを利用する方法はCygwinやKNOPPIX/MATHの場合と同様です。この環境に合わせるための「Make.Atlas」の変更点を以下に挙げます(ライブラリやインクルードファイルのパスは、環境に合わせて設定してください。筆者のCPUはCore2Duoなのでatlas-sse2を利用しています)。
MPdir = MPinc = -I/usr/include/openmpi/1.2.4-gcc MPlib = -L/usr/lib/openmpi/1.2.4-gcc -lmpi LAdir = /usr/lib/sse2 LAinc = LAlib = -L$(LAdir) -lcblas -latlas HPL_OPTS = -DHPL_CALL_CBLAS CC = gcc CCNOOPT = $(HPL_DEFS) CCFLAGS = $(HPL_DEFS) -mtune=core2 -fomit-frame-pointer -O3 -funroll-loops -W -Wall LINKER = gcc LINKFLAGS = $(CCFLAGS)
Intel C++ CompilerとMath Kernel Library
GNU/Linux上で利用するコンパイラと言えばGCCが一般的ですが、Intelもコンパイラを提供しています。常にというわけではありませんが、GCCよりも高速なバイナリを生成する場合があるので、試す価値はあるでしょう。Intelは、コンパイラの他にMath Kernel Libraryという数値計算ライブラリも提供しているので、これも試してみましょう(BLASの実装を含んでいるので、ATLASの代わりに使います)。どちらも評価版あるいは非商用の無料版があります(コンパイラとMKLのインストールおよび環境設定方法はここでは割愛します)。
「Make.Atlas」を作成したのと同じ要領で、「Make.Intel」を作成します。変更点を以下に挙げます。
MPdir = MPinc = -I/usr/include/openmpi/1.2.4-gcc MPlib = -L/usr/lib/openmpi/1.2.4-gcc -lmpi LAdir = /opt/intel/mkl/10.0.1.014 LAinc = -I$(LAdir)/include LAlib = -L$(LAdir)/lib/32 -lmkl HPL_OPTS = CC = icc CCNOOPT = $(HPL_DEFS) -O0 -g CCFLAGS = $(HPL_DEFS) -O3 -xP -ip -fno-alias -openmp -mp LINKER = icc LINKFLAGS = $(CCFLAGS)
GotoBLAS
知名度という点ではATLASとMKLに劣りますが、GotoBLASという高性能なBLASがあります。これも試してみましょう(導入方法は割愛します)。
「Make.Atlas」や「Make.Icc」を作成したのと同じ要領で、「Make.Goto」を作成します。変更点を以下に挙げます(GotoBLASは/home/yabuki/work/GoroBLASでビルドしています)。
MPdir = MPinc = -I/usr/include/openmpi/1.2.4-gcc MPlib = -L/usr/lib/openmpi/1.2.4-gcc -lmpi LAdir = /home/yabuki/work/GotoBLAS LAinc = LAlib = -L$(LAdir) -lgoto HPL_OPTS = CC = gcc CCNOOPT = $(HPL_DEFS) CCFLAGS = $(HPL_DEFS) -mtune=core2 -fomit-frame-pointer -O3 -funroll-loops -W -Wall LINKER = gcc LINKFLAGS = $(CCFLAGS)
