各種計算機基本性能調査

平成２４年度第2四半期
目次
1. SR16000/M1 システム
1.1 姫野ベンチ(実数型倍精度、実数型4倍精度,複素数型倍精度)
1.2 内積計算
1.3 QCD計算
1.4 分子動力学計算
1.5 ルジャンドル陪関数計算
1.6 1次元複素フーリエ変換,FFT
2. BG/Q システム
2.1 姫野ベンチ(実数型倍精度、実数型4倍精度,複素数型倍精度)
2.2 内積計算
2.3 QCD計算
2.4 分子動力学計算
2.5 ルジャンドル陪関数計算
2.6 1次元複素フーリエ変換,FFT平成24年度第1四半期までの資料作成において,性能評価に関しては,その手法と測定手順,検証方法に関する記述の必要性を感じましたので,今回から各種計算機基本性能調査に含める様にしました.また精度に関しても、必ずしも多倍長演算に限らないため,単精度,倍精度演算でも一般の精度問題に関する事柄を多倍長計算手法に含める様にしました.

今回,追加されるアプリ―ケーションの概略説明として分子動力学計算,ルジャンドル陪関数計算,一次元複素フーリエ変換,FFTに関する説明を最初に記述しました.

分子動力学計算

分子動力学計算は以下の２つの計算からなり、クーロン力計算は重力多体問題と同様の計算となりますが、異なる計算として、ワンデルワールス力計算があります。逆に二乗則と逆六乗則の差により、演算する範囲が異なり、演算量も単純に粒子数の何乗に比例するとは言えません。
演算精度は倍精度でSIMD命令は一部適用されます。
qj  qi
クーロン力 Fi rr
|r
iji  rj |3 ij
4 0 j i rij
qi : 電荷量,  0 : 真空の誘電率
ワンデルワールス力
分子間に働く分散力で、等方向性で原子間距離の６乗に反比例する力 a bF k 6r

 : 分極率ルジャンドル陪関数計算

ルジャンドル関数
1 dn 2Pn ( x)  n( x  1) nn
2 n! dx
P0 ( x)  1
P1 ( x)  x(r  1) Pr 1 ( x)  (2r  1) xPr ( x)  rPr 1 ( x)  0(r  1,2,..., n  1)

(1  x 2 ) Pn ' ( x)  n[ Pn 1 ( x)  xPn ( x)]Pn ( x)  0の近似解

xk  sin((n  1  2k) ) (k  1,2,..., n)
2n  1

ルジャンドル陪関数
m : 位数n : 次数m0mnmd m Pn ( x)
12 2 dPn ( x)  (1  x ) n (1  x )( x 2  1) nmnmdx2 n!
dxmm  n だとPn ( x)  0m

2Pm 1 ( x)  0mm
2Pm ( x)  (2m  1)!!(1  x )m2m
22n  1n  m 1mm
xPn 1 ( x) Pn  2 ( x)nmnm(n  m)! mm
Pn ( x)  (1) m
Pn ( x)(n  m)!

Pn ( x) m

正規化ルジャンドル陪関数
1 2m  1P m1 ( x)  0 P m ( x) (1  x 2 ) 22 (2m)!

mmm

1

12 m
P(x)
dx
[(2m1)!
!
](1xm ) dx m22

1

1

1I n   (1  x ) dx   sin 2 n 1d2 n12(2m  1)!!(2m)!! 2(2m)!
2m  12m  1x  cos 02n
2 n n!
2 2 n 1 n! 2 n 1 n!2 n n! 2 2 n 1 (n!) 2In I n 1  ... I0 
2n  1(2n  1)!!
(2n  1)!! (2n  1)! (2n  1)!
P n ( x) 2n  1 (n  m)! mmmPn ( x) P m ( x)  (1) m P m ( x)2 (n  m)!

P n ( x) (2n  1) (2n  1)
(2n  1) (n  m  1)(n  m  1)
mmx P n 1 ( x) P n  2 ( x)( n  m) ( n  m)
(2n  3) (n  m)(n  m)mm

計算手順xとして、ルジャンドル多項式の０点をとる。
P0 ( x)  1, P1 ( x)  3 x
000(2n  1)(2n  3)
nPn 1 ( x)0)
( xPn ( x) Pn 1 ( x) n 1(2n  1)(2n  1)0(1  n  nn  1)
m  0の場合, m  nならPn ( x)  0.このため, Pn  m ( x)をPn ( x)
mmmとする.
(2m  1)!!
(1  x 2 ) 2P0 ( x)  2m  1(2m)!!

mm

P1 ( x)  2m  3 xP0 ( x)mm

Pn 1 ( x) mn( n  2m)(2n  2m  3)(2n  2m  1)
mm
Pn 1 ( x))( xPn ( x) (2n  2m  1)(2n  2m  1)(n  1)(n  2m  1)

(1  m  mm,1  n  nn  1)
mdP ( x)で表す.
DPn ( x)  ndx
mmxP0 ( x)m
DP0 ( x)  1 x2mmm
DP1 ( x)  2m  3 ( P0 ( x)  xDP0 ( x))m(2n  2m  3)(2n  2m  1)
(n  1)(n  2m  1)

DPn 1 ( x) mn( n  2m)m
DPn 1 ( x))(2n  2m  1)(2n  2m  1)

( Pn ( x)  xDPn ( x) mm(1  m  mm,1  n  nn  1)
チェック方法11

 ( P ( x)) dx  2,  DP ( x) P ( x)dx  0mnn1mm2

1n

一次元複素フーリエ変換計算とＦＦＴ

一次元複素フーリエ変換
C ylk(l , k  0,1,..., L  1)e( x)  e  cos(2x)  i * sin( 2x)
2 ix

C l1lk y e(  )LLy L 1k 0kk1lk
 C e( )LLL 1l 0l

FFT
L  MNk  p  Mq

p  0,1,..., M  1 q  0,1,..., N  1l  Nm  nm  0,1,..., M  1 n  0,1,..., N  11pm
pn 1qn e(  e( )e( )[)y ]MMMNNN
演算量 :フーリエ変換 L  ( MN )C Cl

Nm  nM 1N 1p 0q 02

2

MN ( M  N  1) ≒ MN ( M  N )FFTMN ( M  N )MとN互いに素L  N * N * ..... * N
1

2p  Mqm

FFT演算量 ≒ L( N  N  ....  N )1

FFTの効果 ≒2m

L( N  N  ....  N )12m

例L  2 * 3 * 4 * 5 * 6 * 7 * 8 * 9  362880
362880 /( 2  3  4  5  6  7  8  9)  8247

１． SR16000 モデルM1SR16000/M1システムの複数ノードでの実行に関しての記述です。
１ノードの概略は以下の様になっています。
プロセッサ:power7
周波数:3.83GHz
CPUコア数 32(物理的),64(論理的)理論最大性能 980.48 GFLOPs
メモリ容量 256GB
メモリアーキテクチャー NUMA,(16論理コア単位でflat)
SIMD(Single Instruction Multiple Data)をサポートするVSX機構付き
L3キャッシュ On-Chip 32MB/8コア演算器/物理コア 乗加算器４つ

1.1 姫野ベンチ
姫野ベンチの演算精度を実数型倍精度,実数型４倍精度、複素数型倍精度で演算しました。実数型倍精度,オリジナルソースのみ、SIMD命令は適用されます。
SR16000 １ノード実測結果
姫野ベンチ １ノードテスト
精度
実数型倍精度
実数型４倍精度
複素数型倍精度

精度
実数型倍精度
実数型４倍精度
複素数型倍精度x軸サイズ y軸サイズ z軸サイズ 実行回数
129656520000
12965652000
12965652000
性能一覧表ソース
MFLOPｓorigin60677
tuning87443
origin110105tuning292481
origin108385tuning112532

演算量は性能モニター
実数型倍精度より

 実数型単精度

実数型 4 倍精度  19  実数型単精度
複素数型倍精度 3 . 5  実数型単精度

1.2 内積計算

case1
do i=1,nsum=sum+a(i)*b(i)end docase2
do i=1,nsum=sum+a(i)*b(i)end doa,b 複素変数a,b 実数変数

case3
do i=1,ntr=tr+ar(i)*br(i)-ai(i)*bi(i) ar,br,ai,bi 実数変数
ti=ti+ar(i)*bi(i)+ai(i)*br(i)end do

ループ長は2  1048576, 演算量はすべて8796GFLOP20になる様に設定して測定しています.

SR16000/M1 １ノード実行時間（秒）一覧表
並列化は自動並列ケース smt数 実行時間 実行効率(%)
1158
15.5
121108.22165
13.8221128311167.7321287

SMT off の場合のほうが性能が良くなっています.

1.3 QCD計算
主要な計算の一つに以下の部分があります.ここで,配列a,x,yは倍精度複素変数配列です.

do id=1,4
do ic=1,3
do iframe=0,nframe-1
if (mask_eo(iframe)) theny(iframe,ic,id) = 0.d0
end ifend doend do
制御変数iframeは制御変数
end doix,iy,iz,itを一次元化したもの
do id=1,4
do ic=1,3
do id1=1,4
do ic1=1,3
do iframe=0,nframe-1
if (mask_eo(iframe)) theny(iframe,ic,id) = y(iframe,ic,id)&+ a(iframe,ic,ic1,id,id1)*x(iframe,ic1,id1)
end ifend doend doend doend doend doソースチューニング後の実測結果

サイズ 12*8*8*8
所要メモリ 43.8MB
SR16000/M1 1ノード 自動並列 (980.48GFLOPs)

32smp,smt=1
complex*16
niter= 100000 sec= 2.68142652511596680
y(1,nx/2,ny/2,nz/2,nt/2)(-102592.000000000000,52992.0000000000000)
131979.898268774938 MFLOPS(実行効率 13.5%)
64smp,smt=2
complex*16
niter= 100000 sec= 2.56867218017578125
y(1,nx/2,ny/2,nz/2,nt/2)(-102592.000000000000,52992.0000000000000)
137773.283306156285 MFLOPS(実行効率 14.1%)

1.4 分子動力学計算結果
moleculardynamics

演算量と所要メモリ
N
VdW
Coulomb
メモリ(GFLOP)(GFLOP)(MB)
48
286.44243179811.8125641644
2436
2880
6148
9246
54.6875
96
17970
27675
94.5
112
44688
69588
150.625
12899731
155917224
演算量

VdW≒23.42*N**6,Coulomb≒35.31*N**6 FLOP
VdW≒2/3*Coulomb
所要メモリ 14*8*N**3 バイト
SR16000/M1 実行時間(単位:秒)
N=48MPI数
ノード数
VdW
Coulomb
全体
1284
1.81984.44435
6.26732
25642.52998
8.61865
11.15244
2568
1.718892.66658
4.388595128
3.35877
3.98576
7.34833

MPI数

4488

N=64
VdW
Coulomb
全体
12.54277
63.21624
75.76465
16.55753
97.01006
113.57417
8.7749335.4702244.25077
20.90441
63.69971
84.61077

4488

N=80
VdW
Coulomb
全体
44.93113
412.63567
457.57689
63.25216
362.52039
425.7843733.06468
259.85763
292.93251
91.30541
281.84471
373.16153

4488

N=96VdW
Coulomb
全体135.30229 1018.25815 1153.57737
170.37763 1035.44061 1205.83632
96.82403
592.82008
689.65997
217.66733
688.59726
906.2826

4488

N=112
VdW
Coulomb
全体
333.35061 2736.97492 3070.34942
411.22115 2556.15124 2967.40039
244.40453 1447.09706 1691.52595
369.37199 1905.33538 2274.73516

4488

N=128
VdW
Coulomb
全体
755.4252 5581.71674 6337.17718
924.26017 6382.94117 7307.24141
539.1269 3196.45186 3735.61507
750.14716 4215.49161 4965.67888

ノード数128256256512

MPI数

ノード数
128256256512

MPI数

ノード数
128256256512

MPI数

ノード数
128256256512

MPI数

ノード数
128256256512

1.5 ルジャンドル陪関数計算

倍精度演算で分点数を16384に増やし,誤差10 を得ました.そのためn  m  1024,12

分点数  16384, 倍精度演算で性能測定をしました.
演算量 1149GFLOP,並列化は分点に関して実施しました.漸化式で計算しているためsimdは適用されません。
SR16000/M1 1ノードでの結果は以下の様になっています。
Smt off 32smp
Smt on 64smp

79GFLOPs
98GFLOPs

実行効率 7.9%
実行効率 10%1.6 1次元複素フーリエ変換,FFT

SR16000 table方式とno-table 方式
演算量

204*N^2 FLOP
20*N^2 FLOP

no-table 方式
table方式

実行時間一覧表（秒）Nｓｍｔ
2^152^162^172^182^192^20

no-table 方式
table方式
32core64smp
32core
64smp
2.415
1.6
0.173
0.167
9.665
6.438
0.748
0.676
38.638
25.57
3.094
2.86
154.913 102.516
57.14532.608619.635 409.899
1913.5 1819.197
2477.797 1640.417 6209.564 6191.031

テーブルサイズにより、テーブル化による演算量削減の効果が大きく異なる.
N=2^20 FFTシングル実行ジョブ
フーリエ変換32core
フーリエ変換64smp
FFT シングルジョブ

2477.797
1640.417
4.495２ BG/Q システム
使用していますBG/Q システムの概略は以下の様になっています。

周波数 1.6GHz
1 ノード 16core 論理性能 204.8GFLOPs
L1 キャシュ
16/16KB (Core)
L2 32MB (node)
Main storage 16GB (Core)
Smt=1,2,4

実行クラス
32 node 6553.6 GFLOPs
128 node 26214.4 GFLOPs
256 node 52428.8 GFLOPs
512 node 1048576.6 GFLOPs
あり、今回は32 node を中心にした測定結果をしめします。

2.1 姫野ベンチ
姫野ベンチの演算精度を実数型倍精度,実数型４倍精度、複素数型倍精度で演算しました。実数型倍精度,複素数型倍精度オリジナルソースのみ、SIMD命令は適用されます。
BG/Q １ノード実測結果
姫野ベンチ １ノードテスト
精度
実数型倍精度
実数型４倍精度
複素数型倍精度

精度
実数型倍精度
実数型４倍精度
複素数型倍精度x軸サイズ y軸サイズ z軸サイズ 実行回数
12965
65
20000
12965
65
2000
12965
65
2000
性能一覧表
ソース
MFLOPｓorigin6368
tuning5056
origin19513
tuning21850
origin7662
tuning10763

演算量は性能モニター より
実数型倍精度  実数型単精度
実数型 4 倍精度  19  実数型単精度
複素数型倍精度 3 .5  実数型単精度

2.2 内積計算

case1
do i=1,nsum=sum+a(i)*b(i)end docase2
do i=1,nsum=sum+a(i)*b(i)end doa,b 複素変数a,b 実数変数

case3
do i=1,ntr=tr+ar(i)*br(i)-ai(i)*bi(i) ar,br,ai,bi 実数変数
ti=ti+ar(i)*bi(i)+ai(i)*br(i)end do

ループ長は220  1048576, 演算量はすべて8796GFLOPになる様に設定して測定

BG/Q 32ノード実行結果
BG/Q 32ノード実行時間(秒)並列化 ノード間はMPI、ノード内はスレッド並列
ケース

smt数
1
1
1222
333実行時間 実行効率(%)
1
12.7
10.1
2
8.4
16.4
4
8.9
15.1
1
32.5
4.13
2
33.4
4.02
4
39.1
3.43
1
41
3.3
2
26
5.2
4
23
5.8

ケース１のＳＩＭＤ適用の効果
simd
使用
未使用比率

smt=1

smt=2
12.7
53.2
4.2

smt=4
8.4
283.3

（注)simdはComplex Simd

Complex Simd 適用の効果が大きくでています。

8.9
17.6
2

2.3 QCD計算
主要な計算の一つに以下の部分があります.ここで,配列a,x,yは倍精度複素変数配列です.

do id=1,4
do ic=1,3
do iframe=0,nframe-1
if (mask_eo(iframe)) theny(iframe,ic,id) = 0.d0
end ifend doend do
制御変数iframeは制御変数
end doix,iy,iz,itを一次元化したもの
do id=1,4
do ic=1,3
do id1=1,4
do ic1=1,3
do iframe=0,nframe-1
if (mask_eo(iframe)) theny(iframe,ic,id) = y(iframe,ic,id)&+ a(iframe,ic,ic1,id,id1)*x(iframe,ic1,id1)
end ifend doend do
end doend doend doソースチューニング後の実測結果

サイズ 12*8*8*8
所要メモリ 43.8MB
BG/Q １ノード(204.8GFLOPs)

16smp (smt=1)
complex*16
niter= 100000 sec= 19.6887544525088742
y(1,nx/2,ny/2,nz/2,nt/2)(-102592.000000000000,52992.0000000000000)
17974.4432718497519 MFLOPS(実行効率 8.8%)32smp(smt=2)
complex*16
niter= 100000 sec= 11.5486670456593856
y(1,nx/2,ny/2,nz/2,nt/2)(-102592.000000000000,52992.0000000000000)
30643.7443040677717 MFLOPS(実行効率 15.0%)
64smp(smt=4)
complex*16
niter= 100000 sec= 8.29826071311254054
y(1,nx/2,ny/2,nz/2,nt/2)(-102592.000000000000,52992.0000000000000)
42646.8162708833552 MFLOPS(実行効率 20.8%)

2.4 分子動力学計算
molecular dynamics
演算量と所要メモリ
メモリ
Coulomb
VdW
N(MB)(GFLOP) (GFLOP)
11.8125431798286.442
48
28
2436
1644
64
54.6875
9246
6148
80
94.5
27675
17970
96
150.625
69588
44688
112
224
15591799731
128
VdW≒23.42*N**6,Coulomb≒35.31*N**6 FLOP
VdW≒2/3*Coulomb
所要メモリ 14*8*N**3 バイト

演算量

BG/Q 実行時間(単位:秒)

MPI数

ノード数

5121024
2048

MPI数

ノード数

51210242048

MPI数

ノード数

5121024
2048

MPI数

ノード数

5121024
2048

MPI数

ノード数

5121024

MPI数5121024

ノード数

N=48
全体
Coulomb
VdW
16.98838
8.819168.16086
32
21.83329
9.9951111.8292232
42.32042
17.70815
24.6009232
N=64
全体
Coulomb
VdW
67.34834
37.76663
29.56434
32
64.65611
32.1485
32.48871
32
102.69909
45.01047
57.66432
N=80
全体
Coulomb
VdW
221.04942
128.87558
92.13976
32172.96071
91.95302
80.97082
32228.50708
106.98893
121.4708432
N=96全体Coulomb
VdW
639.58082
392.02168
247.50348
32460.38124
274.96719
185.35274
32572.51359
340.60404
231.82941
32
N=112全体
Coulomb
VdW
591.7365 1262.05753 1853.88598
32394.3729 1181.64034 1576.11295
32
N=128全体
Coulomb
VdW
32 1317.87477 3370.73599 4688.74093
4170.8758
805.80939 3364.92311
32

2.5 ルジャンドル陪関数計算

倍精度演算で分点数を16384に増やし,誤差10 を得ました.そのためn  m  1024,12

分点数  16384, 倍精度演算で性能測定をしました.
演算量 1149GFLOP,並列化は分点に関して実施しました.漸化式で計算しているためsimdは適用されません。またノード内スレッド並列が出来ませんのでフラットＭＰＩとなります。
BG/Q 32 1ノードでの結果は以下の様になっています。
Smt=1 512mpi 162GFLOPs
Smt=2 1024mpi 304GFLOPs
Smt =4 2048mpi 504GFLOPs

実行効率 2.5%
実行効率 4.6%
実行効率 7.7%

2.6 1次元複素フーリエ変換,FFT

BG/Q 32ノード 2048MPI実行
BG/Q table 方式とno-table 方式
演算量

204*N^2 FLOP
20*N^2 FLOP

no-table 方式
table方式

実行時間一覧表（秒）N2^152^162^172^182^192^20

no-table table
0.558
0.234
2.11
1.316
8.197
5.92
32.32
24.995128.432102.578512.207415.428

テーブル化による演算量削減の効果はさほど大きくない。
N=2^20 FFTシングル実行ジョブ
フーリエ変換2048MPIFFTシングルジョブ(-O3 -qstrict)
FFTシングルジョブ（－O5)

1472.585

193.14230.873