スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)

opi-clst HPLでベンチマーク まずは動かす編

 2016-11-24
クラスタPCを作成したらまずはやってみるべし、のHPLを走らせてみます。
 

HPLとは?

HPLはHPLinpackをC言語で実装したもので、本来はガイドラインとして書かれたものだが、TOP500でも広く使われている。なお、HPL以外のテクノロジーやパッケージを使うことに問題はない。HPLはn次の線型方程式系を生成し、部分ピボット選択によるLU分解でそれを解く。使用するにはMPIとBLASまたはVSIPLをインストールしておく必要がある。
(wikipediaより)


TOP500とかいうスーパーコンピュータのランキングでも使われているベンチマークソフトなわけです。


参考文献

計算工学ナビ
http://www.cenav.org/raspi3/


ubuntu 14.04でBLASを使う
http://verifiedby.me/adiary/058


2 つ以上のノードにベンチマークを拡張する
https://www.xlsoft.com/jp/products/intel/perflib/mkl/11.2/mkl_userguide_lnx/GUID-9CE68847-49F2-4A98-B324-FE803D2F35CF.htm


特に、計算工学ナビさんのページは非常に参考になりました。 というかここの真似っこです。


setup (MASTER)

  • MPI環境を構築しておくこと。
  • 必要なパッケージをインストール
    • blasには複数の実装があり、atlasとopenblasが早いらしい(参考文献)ので両方入れてみた。
  • www.netlib.orgから最新のhplをダウンロードする(現在最新はhpl-2.2)
  • ダウンロードしたtarballを作業領域に展開する
  • 作業領域から~/hplにシンボリックリンクを張る
    • MakeFileが~/hplを前提にしているため (なんで?)
  • 参考文献と同様にsetup/Make.Linux_ATHLON_CBLASを参考にしてMake.Linux_ARM_CBLASを作成する
    • ARM用のMakeFileは用意されていないため

[MASTER]% sudo apt-get install libblas-dev libatlas-base-dev libopenblas-dev liblapack-dev
[MASTER]% mkdir /mnt/USB01/tmp/hpl
[MASTER]% cd /mnt/USB01/tmp/hpl
[MASTER]% wget "http://www.netlib.org/benchmark/hpl/hpl-2.2.tar.gz"

[MASTER]% tar xzvf ./hpl-2.2.tar.gz

[MASTER]% ln -s /mnt/USB01/tmp/hpl/hpl-2.2 ~/hpl
[MASTER]% cd ./hpl-2.2
[MASTER]% cp setup/Make.Linux_ATHLON_CBLAS ./Make.Linux_ARM_CBLAS
[MASTER]% nano ./Make.Linux_ARM_CBLAS

[MASTER]% diff ./Make.Linux_ARM_CBLAS ./setup/Make.Linux_ATHLON_CBLAS
64c64
< ARCH = Linux_ARM_CBLAS
---
> ARCH = Linux_ATHLON_CBLAS
84,86c84,86
< ###MPdir = /usr/local/mpi
< MPinc = -I/usr/include/mpi
< MPlib = /usr/lib/arm-linux-gnueabihf/libmpich.a
---
> MPdir = /usr/local/mpi
> MPinc = -I$(MPdir)/include
> MPlib = $(MPdir)/lib/libmpich.a
95c95
< LAdir = /usr/lib
---
> LAdir = $(HOME)/netlib/ARCHIVES/Linux_ATHLON
159c159
< HPL_OPTS = -DHPL_CALL_CBLAS -DHPL_DETAILED_TIMING
---
> HPL_OPTS = -DHPL_CALL_CBLAS
169c169
< CC = /usr/bin/mpicc
---
> CC = /usr/bin/gcc
173c173
< LINKER = /usr/bin/mpicc
---
> LINKER = /usr/bin/gcc

Make.Linux_ARM_CBLASをイイカンジに編集したら、そのままmakeする。
[MASTER]% make arch=Linux_ARM_CBLAS
一応これでエラーはなくコンパイルできた。


libblasとliblapack

ちなみに、apt-getで入れっぱなしのlibblasとliblapackは、どうやらopenblasのほうが優先されているらしい。
[MASTER]% update-alternatives --config libblas.so.3
There are 3 choices for the alternative libblas.so.3 (providing /usr/lib/libblas.so.3).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/openblas-base/libblas.so.3 40 auto mode
1 /usr/lib/atlas-base/atlas/libblas.so.3 35 manual mode
2 /usr/lib/libblas/libblas.so.3 10 manual mode
3 /usr/lib/openblas-base/libblas.so.3 40 manual mode


[MASTER]% update-alternatives --config liblapack.so.3
There are 3 choices for the alternative liblapack.so.3 (providing /usr/lib/liblapack.so.3).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/openblas-base/liblapack.so.3 40 auto mode
1 /usr/lib/atlas-base/atlas/liblapack.so.3 35 manual mode
2 /usr/lib/lapack/liblapack.so.3 10 manual mode
3 /usr/lib/openblas-base/liblapack.so.3 40 manual mode

ただし、ご覧の通り共有ライブラリの場合です。
HPLはstaticライブラリを使うのでこの設定はHPLには無関係。


setup (clst-NODE)

基本的にはMASTERと同じことをするが、コンパイルは1回だけ行い、出来上がったバイナリを分配する。
[MASTER]% for HOGE in 01 02 03 04 05 06 07 08 09 10 11 12 13 14
do
echo clst${HOGE}
ssh opipc-clst${HOGE} sudo apt-get -y install libblas-dev libatlas-base-dev libopenblas-dev liblapack-dev
done

[MASTER]% ssh clst01

[clst01]% mkdir -p /mnt/USB01/tmp/hpl
[clst01]% cd /mnt/USB01/tmp/hpl
[clst01]% wget "http://www.netlib.org/benchmark/hpl/hpl-2.2.tar.gz"

[clst01]% tar xzvf hpl-2.2.tar.gz

[clst01]% ln -s /mnt/USB01/tmp/hpl/hpl-2.2 ~/hpl
[clst01]% cd ./hpl-2.2
[clst01]% cp setup/Make.Linux_ATHLON_CBLAS ./Make.Linux_ARM_CBLAS
[clst01]% nano ./Make.Linux_ARM_CBLAS

[clst01]% make arch=Linux_ARM_CBLAS
Make.Linux_ARM_CBLASの変更内容はMASTERと同じ。RaspberryPiでもOrangePiでも同じ対応でエラー無くコンパイルは通った。warningはいくつか出ているがとりあえず無視。

[clst01]% for HOGE in `seq -w 14 -1 1`
do
rsync -auv /mnt/USB01/tmp/hpl clst${HOGE}:/mnt/USB01/tmp/
ssh clst${HOGE} ln -s /mnt/USB01/tmp/hpl/hpl-2.2 ~/hpl
done



setting (MASTER, clst-NODE)

実行時のパラメータを書いておくHPL.datはいろいろとチューニングできるようだが、とりあえずは参考文献が配布してくれているモノを使用することにする。
しかし、別の参考文献によると Ps * Qs = ノード数になるように調整が必要とのことなのでそこだけはこちらの環境に合わせて変更する。

HPL.dat ファイルで、Ps * Qs がノード数と等しくなるように Ps パラメーターと Qs パラメーターを設定します。
例えば、2 ノードの場合、Ps を 1 に設定し、Qs を 2 に設定します。
Ps = Qs の場合、簡単に最適な結果が得られるため、Ps ≤ Qs を満たすできるだけ近い値を選択します。


今回はPs = 2 , Qs = 7 でやってみる。

[MASTER]% cd /mnt/USB01/tmp/hpl/hpl-2.2/bin/Linux_ARM_CBLAS
[MASTER]% mv HPL.dat HPL.dat_orig

[MASTER]% wget http://www.cenav.org/public/HPL.dat -O HPL.dat_cenav
[MASTER]% cp ./HPL.dat_cenav ./HPL.dat

[MASTER]% nano ./HPL.dat

[MASTER]% diff HPL.dat HPL.dat_cenav
11,12c11,12
< 2 Ps
< 7 Qs
---
> 4 Ps
> 4 Qs




run

普通に(?)mpirunやmpiexecで実行するだけです。計算内容の設定はHPL.datで指定するので雑多なコマンドラインオプションは不要。
[MASTER% mpiexec -f ./hostlist_IP -np 14  /mnt/USB01/tmp/hpl/hpl-2.2/bin/Linux_ARM_CBLAS/xhpl




result

================================================================================
HPLinpack 2.2 -- High-Performance Linpack benchmark -- February 24, 2016
Written by A. Petitet and R. Clint Whaley, Innovative Computing Laboratory, UTK
Modified by Piotr Luszczek, Innovative Computing Laboratory, UTK
Modified by Julien Langou, University of Colorado Denver
================================================================================

An explanation of the input/output parameters follows:
T/V : Wall time / encoded variant.
N : The order of the coefficient matrix A.
NB : The partitioning blocking factor.
P : The number of process rows.
Q : The number of process columns.
Time : Time in seconds to solve the linear system.
Gflops : Rate of execution for solving the linear system.

The following parameter values will be used:

N : 25600
NB : 96
PMAP : Row-major process mapping
P : 2
Q : 7
PFACT : Right
NBMIN : 4
NDIV : 2
RFACT : Crout
BCAST : 1ringM
DEPTH : 1
SWAP : Mix (threshold = 64)
L1 : transposed form
U : transposed form
EQUIL : yes
ALIGN : 8 double precision words

--------------------------------------------------------------------------------

- The matrix A is randomly generated for each test.
- The following scaled residual check will be computed:
||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )
- The relative machine precision (eps) is taken to be 1.110223e-16
- Computational tests pass if scaled residuals are less than 16.0

================================================================================
T/V N NB P Q Time Gflops
--------------------------------------------------------------------------------
WR11C2R4 25600 96 2 7 2761.87 4.050e+00
HPL_pdgesv() start time *** *** ** 14:23:16 2016

HPL_pdgesv() end time *** *** ** 15:09:18 2016

--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV--VVV-
Max aggregated wall time rfact . . . : 23.50
+ Max aggregated wall time pfact . . : 13.30
+ Max aggregated wall time mxswp . . : 12.25
Max aggregated wall time update . . : 2738.51
+ Max aggregated wall time laswp . . : 348.99
Max aggregated wall time up tr sv . : 0.46
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 0.0008259 ...... PASSED
================================================================================

Finished 1 tests with the following results:
1 tests completed and passed residual checks,
0 tests completed and failed residual checks,
0 tests skipped because of illegal input values.
--------------------------------------------------------------------------------

End of Tests.
================================================================================


結果、実行時間は約46分、計算性能は 4.050 GFLOPS となった。

日立HITAC S-820(3GFLOPS 1987年)以上、FUJITSU VP2000(5GFLOPS 1988年)以下、って感じですかね。

これはまだまだショボいので、もっともっとチューニングで早くなります。
一回実行するのに1時間前後かかるので、最適なパラメータを探すのも一苦労です。
でももうちょっと考えてみて、良いスコアを出してみたいと思います。

とりあえず現状では1コアしか使ってないので、4コア使う様にチューニングすることで2倍くらいにはなるんじゃないかなーとか・・・。なるかな?
4コア使うにしても、RAMのサイズは変わらないので1プロセスあたりに使用できるRAMサイズは1/4になっちゃいます。4コア使うから4倍、とは行かないんですよね。。。
 
 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/272-37106239
≪ トップページへこのページの先頭へ  ≫
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。