各種計算機基本性能調査

平成２４年度第3四半期
目次
1.はじめに2.分子動力学計算でのチューニング例
3. SR16000/M1 システム
3.1 分子動力学計算
3.2 ４次元積分
3.3 5次元積分
4.BG/Q システム
4.1 分子動力学計算
4.2 5次元積分
5.xm1システム
5.1 分子動力学計算
5.2 ４次元積分
5.3 5次元積分
5.4 QCD1. はじめに使用しました計算機の論理最大性能は以下の様なものです.
SR16000/M1 １ノード 980.48GFLOPs
BG/Q
1ノード 204.8GFLOPs
xm1
1ノード 844.8GFLOPs

xm1では今回論理コア数が128に拡大されたため,その効果を記述しています.
数値積分で使用しました問題の定義式をまとめて記述しました。
また並列化ソースを自動的に作成すろツールも使用し始めました。

(1)三次元積分
Infra box
1 1 x 1 x  y1dzdydx
20 DI   0 0

D  sxy  tz (1  x  y  z )  ( x  y)2  (1  x  y  z )(1  x  y)me z (1  x  y)m f

22(2) 四次元積分s221
1 1 x 1 x  y 1 x  y  z

S221( s; m1 , m2 , m3 , m4 , m5 )   

0 00022222

1dudzdydx
DCC  ( x  y  z  u )(1  x  y  z  u )  ( x  y )( z  u )E  (1  x  y  z  u )( x  z )( y  u )  ( x  y ) zu  ( z  u ) xy
M 2  xm1  ym2  zm3  um4  (1  x  y  z  u )m5
2D   sE  M 2C

2222

(3) 五次元積分
1 1 x1 1 x1  x2 1 x1  x2  x3 1 x1  x2  x3  x4

I  





0 0

000

1
dx5 dx4 dx3dx2 dx1
2
Dx6  1  x1  x2  x3  x4  x5

laporta (D)D =-x1**2*x2-x1**2*x3-x1**2*x4-x1**2*x6-x1*x2**2-x1*x2*x3&-2.d0*x1*x2*x4&-x1*x2*x5-x1*x2*x6-x1*x3**2-2.d0*x1*x3*x4-x1*x3*x5x1*x3*x6&-x1*x4**2&-x1*x4*x5-2.d0*x1*x4*x6-x1*x5*x6-x1*x6**2- x2**2*x4x2**2*x5&-x2*x3*x4&-x2*x3*x5-x2*x4**2-2.d0*x2*x4*x5-x2*x4*x6-x2*x5**2x2*x5*x6&-x3**2 *x4&-x3**2*x5-x3*x4**2-2.d0*x3*x4*x5-x3*x4*x6-x3*x5**2x3*x5*x6&-x4**2*x5&-x4**2*x6-x4*x5**2-3.d0*x4*x5*x6-x4*x6**2-x5**2*x6x5*x6**2

laporta (F)D=-x1*x1*x2-x1*x1*x4-x1*x1*x5-x1*x1*x6-x1*x2*x2-x1*x2*x3.-x1*x2*x4.-2.0d0*x1*x2*x5-2.0d0*x1*x2*x6-x1*x3*x4-x1*x3*x5-x1*x3*x6.-x1*x4*x4-3.0d0*x1*x4*x5.-2.0d0*x1*x4*x6-x1*x5*x5-x1*x5*x6- x1*x6*x6-x2*x2*x3.-x2*x2*x5-x2*x2*x6.-x2*x3*x3-x2*x3*x4-x2*x3*x5-2.0d0*x2*x3*x6-x2*x4*x5.-x2*x4*x6-x2*x5*x5-x2*x5*x6-x2*x6*x6-x3*x3*x4-x3*x3*x5.-x3*x3*x6-x3*x4*x4-2.0d0*x3*x4*x5-2.0d0*x3*x4*x6-x3*x5*x5.-x3*x5*x6-x3*x6*x6-x4*x4*x5-x4*x4*x6-x4*x5*x5-x4*x5*x6. -x4*x6*x6

2.分子動力学計算でのチューニング例
分子動力学計算及び重力多体問題でよく行われている演算量削減のチューニングでは、シングル実行では効果がありますが,並列実行時には オーバーヘッドによりあまり性能がでない事が往々 にしておこります。
ここではｌｏｇｌｉｓｔでの解析とそれを使用してｏｐｅｎｍｐソースの作成例を合わせて記載しました。
ソースに関しては,分子動力学計算のチューニングしたものは,重力多体問題のオリジナルソースとなっています。
発端は,N=１２８でのSR16000/M1 8ノード256MPI ３７３５秒,BG/Q ３２ノード 1024MPI で４１７０秒だったのが,SR16000/M1 １ノード64smpで３６８０秒となったことから調査を開始しました.

分子動力学計算のソース例
fx=0.0d0
fy=0.0d0
do 100 i=1,nsumx=0.0d0
sumy=0.0d0
do 200 j=1,i-1
r=sqrt((x(i)-x(j))**2*(y(i)-y(j))**2+eps*eps)
sumx=sumx-dt*g*(x(i)-x(j))/r**3
sumy=sumy-dt*g*(y(i)-y(j))/r**3
200 continue
do 300 j=i+1,nr=sqrt((x(i)-x(j))**2*(y(i)-y(j))**2+eps*eps)
sumx=sumx-dt*g*(x(i)-x(j))/r**3
sumy=sumy-dt*g*(y(i)-y(j))/r**3
300 continue
fx(i)=sumx
fy(i)=sumy
100 continue演算量を削減するためよく以下のチューニングが行われます。

fx=0.0d0
fy=0.0d0
do 400 i=1,n-1
sumx=0.0d0
sumy=0.0d0
do 500 j=i+1,nr=sqrt((x(i)-x(j))**2*(y(i)-y(j))**2+eps*eps)
wx=-dt*g*(x(i)-x(j))/r**3
wy=-dt*g*(y(i)-y(j))/r**3
fx(j)=fx(j)-wx
fy(j)=fy(j)-wy
sumx=sumx+wx
sumy=sumy+wy
500 continue
fx(i)=fx(i)+sumx
fy(i)=fy(i)+sumy
400 continue

SR16000/M1 1cpu N=2^16=65536
origin 32.971 sec
tuning 17.859 sec

スレッド並列時には性能が逆転する.

SR16000/M1 1node 64smp
origin13.534 sec
tuning15.475 sec

N=2^18=262144

MPI化した場合は更にその差は大きくなる。!

最適化ログリスト(origin)** Parallel processing starting at loop entry** Parallel function: _parallel_func_2_MAIN** Parallel loop (cyclic distribution)** R: TLOCAL variable** SUMY: TLOCAL variable** SUMX: TLOCAL variable** J: TLOCAL variable** Parallel processing finishing at loop exit
do 100 i=1,nsumx=0.0d0
sumy=0.0d0

** [DO 200]** SWPL applied.
** 2 streams (X[], Y[]) pre-fetch applied.
**** Innermost loop unrolled (4 times).
** SWPL applied.
** 1 streams (CompGen #5) pre-fetch applied.
**** Loop distributed for vector library: 5 pieces; 2 candidates forlibrary calls.
** Simdization applied.
** Innermost accumulator variables expanded (2 times).
** SWPL applied.
** 3 streams (CompGen #5, X[], Y[]) pre-fetch applied.
**** Replace with call to PVP library (vsqrt).
**** Replace with call to PVP library (vrec).

Ｓｉｍｄの適用,SWPL,高速ライブラリが使用されている.

** [DO 300]** SWPL applied.
** 2 streams (X[], Y[]) pre-fetch applied.
**** Innermost loop unrolled (4 times).
** SWPL applied.
** 1 streams (CompGen #7) pre-fetch applied.
**** Loop distributed for vector library: 5 pieces; 2candidates for library calls.
** Simdization applied.
** Innermost accumulator variables expanded (2 times).
** SWPL applied.
** 3 streams (CompGen #7, X[], Y[]) pre-fetch applied.
**** Replace with call to PVP library (vsqrt).
**** Replace with call to PVP library (vrec).
**

Ｓｉｍｄの適用,SWPL,高速ライブラリが使用されている.

ログリスト参照からopenmpソース作成例
C$OMP PARALLEL DO
C$OMP& SCHEDULE(STATIC,1)
C$OMP& PRIVATE(I)C$OMP& PRIVATE(SUMX)C$OMP& PRIVATE(SUMY)
C$OMP& PRIVATE(J)C$OMP& PRIVATE(R)do 100 i=1,nsumx=0.0d0
sumy=0.0d0
do 200 j=1,i-1
r=sqrt((x(i)-x(j))**2*(y(i)-y(j))**2+eps*eps)
sumx=sumx-dt*g*(x(i)-x(j))/r**3
sumy=sumy-dt*g*(y(i)-y(j))/r**3
200 continue
do 300 j=i+1,nr=sqrt((x(i)-x(j))**2*(y(i)-y(j))**2+eps*eps)
sumx=sumx-dt*g*(x(i)-x(j))/r**3
sumy=sumy-dt*g*(y(i)-y(j))/r**3
300 continue
fx(i)=sumx
fy(i)=sumy
100 continue
C$OMP END PARALLEL DO最適化ログリスト(tuning)

XX Serial loop** --- Loop distributed for parallelization --** FY: unknown loop dependency** FX: unknown loop dependency****** [DO 400]** Simdization applied.
** Innermost loop unrolled (2 times).
** SWPL applied.
** 4 streams (CompGen #5, CompGen #6, FX[], FY[])
pre-fetch applied.
**

DO 400 では並列化されていない.

** Parallel loop** CompGen #14: reduction array (SUM)** CompGen #13: reduction array (SUM)** WY: TLOCAL variable** WX: TLOCAL variable** R: TLOCAL variable** --- Add barrier at loop entry --** --- Add barrier at loop exit --** [DO 500]** SWPL applied.
** 2 streams (X[], Y[]) pre-fetch applied.
** Innermost loop unrolled (4 times).
** SWPL applied.
** 1 streams (CompGen #10) pre-fetch applied.
**** Loop distributed for vector library: 5 pieces; 2 candidates
for library calls.
** Simdization applied.
** Innermost accumulator variables expanded (2 times).
** SWPL applied.
** 5 streams (CompGen #10, FX[], FY[], X[], Y[]) pre-fetch applied.
**** Replace with call to PVP library (vsqrt).
**** Replace with call to PVP library (vrec).

最内側ＤＯループの並列化と最適化を実施.
オーバーヘッドは大となる.

C$OMP PARALLEL
do 400 i=1,n-1
C$OMP MASTER ログリスト参照からopenmpソース作成例
sumx=0.0d0
sumy=0.0d0
C$OMP END MASTERC$OMP BARRIERC$OMP DO
C$OMP& SCHEDULE(STATIC)C$OMP& PRIVATE(J)C$OMP& PRIVATE(R)C$OMP& PRIVATE(WX)
C$OMP& PRIVATE(WY)
C$OMP& REDUCTION(+:SUMX)C$OMP& REDUCTION(+:SUMY)
do 500 j=i+1,nr=sqrt((x(i)-x(j))**2*(y(i)-y(j))**2+eps*eps)
wx=-dt*g*(x(i)-x(j))/r**3
wy=-dt*g*(y(i)-y(j))/r**3
fx(j)=fx(j)-wx
fy(j)=fy(j)-wy
sumx=sumx+wx
sumy=sumy+wy
C$OMP END DO NOWAIT
C$OMP BARRIERC$OMP MASTER
fx(i)=fx(i)+sumx
fy(i)=fy(i)+sumy
C$OMP END MASTER
400 continue
C$OMP END PARALLEL3. SR16000/M1 システム
3.1 分子動力学計算
N=128 所要メモリ 224MB
従来版
ノード数

MPI数

VdW

Coulomb

全体

1284755.4252

5581.71674

6337.17718

2564924.26017

6382.94117

7307.24141

256

8539.1269

3196.45186

3735.61507

512

8750.14716

4215.49161

4965.67888

ノード数

smp数

VdW

Coulomb

全体

3211769.65239

4245.32686

6014.98169

6411180.91332

2499.41767

3680.33458

演算量は２倍ハイブリッドの効果は小修正版
MPI数

ノード数

128256256512

VdW
Coulomb
全体
4 4487.29192 5159.58867 9646.93067
4 1767.90486
3057.6814 4825.68794
8 2244.68742 2588.84542 4833.58705
8885.04123 1528.38884 2413.52728

ハイブリッド版
SMP数
ノード数
3264
3264

VdW
Coulomb
全体
4 3675.13414 4544.54538 8219.68586
4 2054.28677 3273.93475 5328.23547
8 1838.06506
2273.0442 4111.11608
8 1027.48181 1637.56081 2665.05695

3.2 ４次元積分

S 221 (1;100,100,0,0,100)
N  1152

演算量

47505

GFLOP

１ ノード 実行時間（秒)
smp数

smt
32 off
64 on

実行時間 性能
実行効率(秒)(GFLOPs) (%)
147.387322
32.8
178.875266
27.1

Simdが適用されるため,smt=offの場合の方が性能が良い.また実行効率も30%を超えている.

3.3五次元積分

laporta (f)サイズ N=128 所要テーブルサイズ
演算量3642GFLOP

2KB

１ ノード 実行時間（秒)
smp数

smt
32 off
64 on

実行時間 性能
実行効率(秒)(GFLOPs) (%)
11.674
312
31.8
7.909
460
46.9テーブルサイズが小さいため,実行効率は良い.
Simdが適用されないため,smt on の場合のほうが性能が良い.

44.1

BG/Q システム
分子動力学計算BG/Qシステムにおいては,所要メモリ量に性能が大きく左右されます.!
(1)フラットＭＰＩ実行の場合
MPIオーバーヘッドを減らす場合,演算量だけでなく所要メモリ量も倍になります.。(他システムとのmpi_allgatherの仕様の差のため.)
このため、所要メモリサイズが大きい場合,修正ソースでは実行可能なＭＰＩ数が減ります.
実行可能なサイズでは,もとは,smt=2が最速ですが,修正ソースではsmt=4が最速となります.
(MPIオーバーヘッドが削減されると,simdが適用されない効果がみえてくるため.)(2)ハイブリット実行の場合
ＭＰＩオーバーヘッド削減のソースでハイブリッド実行をすると,メモリの制限もなくなり,効果が大きくなります.所要メモリ量が小さい場合,10倍以上の性能向上が得られています。

N=48
VdW

ノード数

MPI数

51210242048

323232(11.8125MB)
Coulomb
全体
8.16086
8.81916
11.82922
9.9951124.60092
17.70815

16.98838
21.83329
42.32042

修正版
ノード数

MPI数
5121024
2048

VdW

全体

Coulomb

3232325.495132.999411.968618.59571
4.56508
2.87183

14.11402
7.61897
5.11686

ハイブリッド版
ノード数

smp数
1632
64

VdW

全体

Coulomb

323232

3.63762
1.877210.97889

5.711142.94602
1.715979.36463
4.838912.71098

所要メモリ小だとハイブリッドの効果大
N=64
VdW

ノード数

MPI数
51210242048

323232(28.0MB)
Coulomb
29.56434
32.48871
57.664全体37.76663
32.148545.01047

67.34834
64.65611
102.69909

修正版
ノード数

MPI数
5121024
2048

VdW
32
3232

全体

Coulomb
30.5287
16.22005
9.9044848.11573
25.3012515.39024

78.70039
41.86008
26.00268

ハイブリッド版
ノード数

smp数

1632
64

VdW

323232

全体

Coulomb

20.46678
10.52987
5.43206

31.77036
16.73987
9.6507152.26934
27.30197
15.11501

N=80
VdW

ノード数

MPI数
5121024
2048

32
32
32

(54.6875MB)
Coulomb
全体
92.13976
128.87558
80.97082
91.95302
121.47084
106.98893

221.04942
172.96071228.50708

Coulomb
全体
115.9476
183.24885
61.06849
95.75686
36.28185
57.77221299.47552
157.45681
95.30769

Coulomb
全体
122.27164
63.00466
36.65174

200.00683
103.0142
57.53005

修正版
ノード数

MPI数
512
1024
2048

VdW
323232

ハイブリッド版
ノード数

smp数
163264

VdW
32
32
32

77.67598
39.95052
20.81901

MPIオーバーヘッド削減が所要メモリ容量の微妙に影響をあたえはじめています。
N=96
VdW

ノード数

MPI数

512
1024
2048

323232(94.5MB)
Coulomb
全体
247.50348
392.02168
185.35274
274.96719
231.82941
340.60404

639.58082
460.38124
572.51359

修正版

ノード数

MPI数
512
1024

VdW
3232

Coulomb
235.6506
120.71485

全体359.7902
186.07948

595.97801
307.88298

ハイブリッド版

ノード数

smp数
163264

VdW
323232232.7985
119.54831
61.61527

Coulomb
全体
361.71276
186.49663
109.81348

594.61322
306.14688
171.53069

N=112
VdW

ノード数

MPI数
512
1024

3232(150.0625MB)
Coulomb
全体
591.73651262.05753
394.3729
1181.64034

1853.88598
1576.11295

Coulomb
全体
856.15347
1376.07514

2233.1181

修正版
ノード数

MPI数
512

VdW
32

ハイブリッド版
ノード数

smp数
163264

VdW

全体

Coulomb3232
32584.54206
299.31385
156.61686

920.53324
473.062223
271.30716

1505.23899
772.53978
428.08792

ハイブリッド方式以外では実行しない方が良い事がわかります。

N=128
VdW

ノード数

MPI数
512
1024

32
32(224MB)
Coulomb
1317.87477
805.80939

全体
3370.73599
3364.92311

4688.74093
4170.8758

修正版
ノード数

MPI数
512

VdW
32

全体

Coulomb
1906.68062

3070.87981

4978.95545

ハイブリッド版
ノード数

smp数
1632
64

VdW
32
32
32

全体

Coulomb
1307.681
668.91654
346.72815

2032.29291
1050.9015
604.46585

3340.22335
1720.0675
951.443384.2

五次元積分

laporta (f)サイズ N=128 所要テーブルサイズ
演算量3642GFLOP2KB

コンパイルオプション

case1 -O5 -qhot=level=2
case2 -O3 -qstrict -qhot=level=1
32ノード実行時間(秒)caseflat12

hybrid
1.289
1.324
4.855
4.106

コンパイルオプションで３－４倍の性能差がある.
最速はフラットＭＰＩ ２０４８ＭＰＩ で2825GFLOPs,実行効率４３．１％

5xm1 システム

従来の最大論理コア数６４から１２８になりました
ので今回、ｓｍｔの効果を中心にまとめました。

5.1 分子動力学計算

論理コアが１２８になりましたのでＢＧ／Ｑとの比較を考慮して,96SMPが容易に実行できるように
サイズはN=96,所要メモリ９４．５ＭＢで実行しています。
従来のSMP用ソースをmdcore,ＭＰＩオーバーヘッド削減のSmp版をmdcore2と記しています.

mdcore
smp数

ノード数

VdW

Coulomb

全体

321370.355

1031.531

1402.02564

1246.078

611.013857.267961223.676

446.46670.328128

1173.189

340.836514.222mdcore2
smp数

ノード数

VdW

Coulomb

全体

321353.256930.879

1254.27664

1306.571

605.227911.97296

1229.255

442.445671.891281177.715

339.45517.357

Smpだと演算量が倍増しているのに実行時間は大差はありません.また128論理コアはともに効果大.
論理コア128(new),64(old)の比較
mdcoresmp数
32 new
32 old64 new
64 old128 new
mdcore2smp数
32 new
32 old64 new
64 old128 new

ノード数

ノード数

VdW
111
11Coulomb
全体370.355
1031.531
370.2391051.356
246.078
611.013250.312554.729173.189
340.8361402.025
1421.733
857.267805.976514.222

VdW
111
11Coulomb
353.256
352.106
306.571297.089
177.715全体930.879
931.449605.227556.781339.451254.276
1283.693
911.972854.376
517.357

5.2 四次元積分
S 221 (1;100,100,0,0,100)
二次元積分

N  576

GPU等で性能を向上させるために4重DOループを2重DOループ化したソース

四次元積分

従来の4重DOループのソース

６４ＭＰＩ で実行した場合の実行時間
２次元積分 25秒 ４次元積分 15秒＝＞ＧＰＵ等とはチューニング方法が異なる事を示しています。
N=1152 演算量 47505GFLOPでの実行
実行ソースは４次元積分用。
32SMP
247秒
64SMP
278秒
96SMP
274秒
128SMP 206秒

ＳＩＭＤが適用され、テーブルサイズ18KB.
このため複数の要因がからんだ結果となっています。
最速の実行効率は２７．３％とそこそこの値です。

5.3 五次元積分

サイズ N=128,テーブルサイズ 256KB
演算量 laporta (d) 2668GFLOP
laporta (f) 3642GFLOP

実行時間一覧表(秒)

プログラム

32smp

64smp

128smplaporta(d)30.00531.15119.369laporta(f)40.911

38.31

24.677

Smt=4の効果はともにありますが,実行効率は１７％前後とさほど高くありません.５重ＤＯループを２重ＤＯループ化しているためテーブルサイズが大きくなり、メモリ性能が悪いxm1でその影響がでています。
ＳＲ１６０００／Ｍ１ と比較すると論理最大性能は１６％低いだけですが実行性能は２．５－３倍程度低下しています。

5.4

QCD計算

サイズ

128*8*8*16

所要メモリ

７９．４ＭＢ

実行性能（ＧＦＬＯＰｓ）一覧表
ソースタイプ 32smp 64smp 128smp
実数型
126114153
複素数型
10296
12864smp は以前はsmt off で今回smt on になったことによりオーバーヘッドが増えた事による現象をしめしています.
実行効率は128SMPで１８％となり,このサイズではよく出ているといえます。