42
「京」におけるFrontFlow/MP性能分析 ~中間報告~ 2018・12・17 RIST 浅見 1

「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

「京」におけるFrontFlow/MPの 性能分析

~中間報告~

2018・12・17

RIST 浅見

1

Page 2: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

目次

• fipp/fappによる性能分析

• 高速化検討

• 中間報告まとめ

• その他の高速化案

2

Page 3: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

高度化支援依頼内容

• 高速化のネッキング箇所について書き換えをおこないました。その効果の確認とさらなる改善策を検討するための分析をお願いします。

3

Page 4: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

性能評価諸条件

• データ– 348x192x318 (約2000万格子点)

– 174ノード(1392プロセス)

• 「京」言語環境– Env_base: K-1.2.0-24

• コンパイルオプション– -Kfast,noeval -fs –Cpp (Makefileに記載されていたもの)

– -Koptmsg=2 -Nlst=t (–Koptions)(追加)

• リソースグループ:micro

• ステップ数:10

4

Page 5: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

fipp/fappによる性能評価(1)

• メイン部分:イタレーション部分を区間解析

5

main_FFLOW.f

2996 msmpl=0 2997 ! RIST 2998 call fipp_start 2999 call fapp_start("ITERATION_LOOP",0, 0) 3000 ! RIST 3001 do 1100 ismpl=1,nsmpl !! iteration loop << 3002 ! 3003 ismpl00=ismpl 3004 !! ・・・ ・・・ 5678 1100 continue 5679 ! RIST 5680 call fapp_stop("ITERATION_LOOP",0, 0) 5681 call fipp_stop 5682 ! RIST 5683 1200 continue

Page 6: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

fipp/fappによる性能評価(2)

• ソルバー(utl_iccg_direct, utl_bcgstb)部分:タイマー部分(ソルバー全体と反復部分)を区間解析

6

utl_iccg_direct_hpc.f 99 #ifdef TIMER 100 call fapp_start("utl_iccg_direct_hpc", 0, 0) 101 #endif 102 103 !- ORTHOGONAL SETTING START -------------------------------! 104 if( .NOT.allocated(Iaw) ) then

889 #ifdef TIMER 890 wtime(1,2) = MPI_WTIME() 891 call fapp_start("utl_iccg_direct_hpc_iteration", 0, 0) 892 #endif 893 ! 894 !-< 4. iteration >- 895 !||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Page 7: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

fipp結果リスト(useORTHO = .TRUE.)

7

useORTHO = .TRUE. Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%)

------------------------------------------------------------------------ 168.8101 441676.6354 1.9831 2119451.9595 19.0324 Application

------------------------------------------------------------------------ 168.7552 304.6283 1.9039 1497.4140 18.7177 Process 0

Mem throughput Mem throughput Elapsed(s) _chip(GB/S) /PEAK(%) SIMD(%)

--------------------------------------------------------- 168.8101 27420.0526 30.7786 6.2412 Application

--------------------------------------------------------- 168.7552 18.2671 28.5424 5.4917 Process 0

Cost % MPI % Start End ----------------------------------------------------------------------

23415904 100.0000 11250001 48.0443 -- -- Application ----------------------------------------------------------------------

6858999 29.2921 351732 5.1280 2 1615 utl_iccg_direct_hpc_ 5699625 24.3408 5697050 99.9548 667 683 hpcrsum_ 2719795 11.6152 1868234 68.6903 282 385 solver_send_recv_ortho_ 1589745 6.7892 1588998 99.9530 516 532 hpcrmax_ 1123772 4.7992 38 0.0034 23 746 utl_bcgstb_ 889744 3.7997 662996 74.5154 179 278 solver_send_recv_ 854040 3.6473 853295 99.9128 804 827 hpcland_ 709312 3.0292 6 0.0008 670 883 cal_reslsm_2nd_ 256402 1.0950 41 0.0160 653 787 grad_cell_mp_ 185558 0.7924 8 0.0043 1168 1939 hys_diff_mp_ 185051 0.7903 2 0.0011 4650 5292 utl_bcgstb_mp_

Page 8: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

fipp call graphリスト(useORTHO = .TRUE.)

8

useORTHO = .true. call graph(rank0)

| 1% <4> solve_vel_mod_ [90 / 1038] | 0% <5> solver_send_recv_ [24] | 3% <5> utl_bcgstb_ [499 / 917] | 0% <6> hpcrmin_ [80] | 1% <6> hpcrsum_ [165] | 0% <6> hpcrmax_ [80] | 1% <6> solver_send_recv_ [93]

| 0% <3> prs_admin_mp_ [42 / 12336] | 0% <4> solve_poisson_mp_ [35 / 12279]

#####| 29% <5> utl_iccg_direct_hpc_ [4798 / 12235] #| 6% <6> hpcrmax_ [942]

#####| 27% <6> hpcrsum_ [4526] #| 8% <6> solver_send_recv_ortho_ [1348] | 4% <6> hpcland_ [618] | 0% <6> __jwe_isfm [0 / 1]

| 0% <4> solve_alpha_mod_ [70 / 377] | 0% <5> solver_send_recv_ [23] | 1% <5> utl_bcgstb_ [141 / 279] | 0% <6> hpcrmin_ [21] | 0% <6> hpcrmax_ [28] | 0% <6> hpcrsum_ [59] | 0% <6> solver_send_recv_ [30]

| 0% <3> reinitialize_fai_ [26 / 794] | 1% <4> hpcrsum_ [114] | 3% <4> cal_reslsm_2nd_ [507 / 593] | 0% <5> solver_send_recv_ [81]

utl_iccg_direct_hpc 74% utl_bcgstb 4% cal_reslsm_2nd 3%

Page 9: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

fapp結果リスト(useORTHO = .TRUE.)

9

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 214.4957 182.2590 2.7771 1.0000 all 0 MAX 215.5326 192.7900 3.8700 1 MIN 213.8366 177.2300 1.9300 1

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 169.9417 167.1835 1.5783 10.0000 ITERATION_LOOP 0 MAX 170.0274 167.8600 2.1800 10 MIN 169.8152 166.5000 1.0500 10

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 121.5988 120.0417 1.5032 50.0000 utl_iccg_direct_hpc 0 MAX 121.6615 120.5400 2.0800 50 MIN 121.5520 119.5000 1.0000 50

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 14.4722 14.3662 0.0229 500.0000 utl_bcgstb 0 MAX 14.6317 14.6600 0.0900 500 MIN 14.3370 14.1000 0.0000 500

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 8.8653 8.8071 0.0112 500.0000 utl_bcgstb_iteration 0 MAX 8.8670 8.9900 0.0900 500 MIN 8.8636 8.6300 0.0000 500

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 120.9477 119.4853 1.5009 50.0000 utl_iccg_direct_hpc_iteration 0 MAX 120.9604 119.9900 2.0800 50 MIN 120.9342 118.8900 1.0000 50

utl_iccg_direct_hpcのコスト 約72%(iteration部分も約72%)

utl_bgcstbのコスト 約8.5% (iteration部分5.2%)

Page 10: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

fapp結果リスト(useORTHO = .FALSE.)

10

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 246.0099 217.3871 3.2510 1.0000 all 0 MAX 246.3917 225.0500 4.7400 1 MIN 245.1232 212.3200 1.9000 1

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 204.8932 202.3595 1.5426 10.0000 ITERATION_LOOP 0 MAX 204.9932 203.1100 2.1900 10 MIN 204.7439 201.5400 1.1100 10

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 156.5743 155.1637 1.4700 50.0000 utl_iccg_hpc 0 MAX 156.6203 155.5700 2.0700 50 MIN 156.5150 154.5900 1.0600 50

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 14.4245 14.3409 0.0233 500.0000 utl_bcgstb 0 MAX 14.5622 14.7000 0.0900 500 MIN 14.3313 14.0100 0.0000 500

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 8.8362 8.7943 0.0117 500.0000 utl_bcgstb_iteration 0 MAX 8.8378 9.1300 0.0700 500 MIN 8.8344 8.5700 0.0000 500

Kind Elapsed(s) User(s) System(s) Call ----------------------------------------------------------

AVG 156.1718 154.7720 1.4684 50.0000 utl_iccg_hpc_iteration 0 MAX 156.1880 155.2000 2.0700 50 MIN 156.1521 154.1500 1.0600 50

Page 11: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccgソルバーの比較

11

useORTHO= .true.

useORTHO= .false.

倍率 (ELAPSE比)

ELAPSE (秒)

MFLOPS ELAPSE (秒)

MFLOPS

ITETRATION_LOOP 169.94 315.18 204.89 270.85 1.21

utl_iccg 121.60 256.90 156.57 211.86 1.28

utl_iccg_iteration 120.95 257.26 156.17 211.76 1.29

utl_bcgstb 14.47 183.77 14.42 184.38 1.00

utl_bcgstb_iteration 8.87 183.99 8.84 184.59 1.00

Page 12: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_directソースコード

12

【utl_iccg_direct_hpc】 ループ変数ICVLによる連続アクセス 948 3 2s DO ICVL=ICVS,NKCELL 949 3 ! q(ICVL) = q(ICVL) + AA(ICVL,1)*p(ICVL+i1) + AA(ICVL,2)*p(ICVL+i2) 950 3 ! & + AA(ICVL,3)*p(ICVL+i3) + AA(ICVL,5)*p(ICVL+i5) 951 3 ! & + AA(ICVL,6)*p(ICVL+i6) + AA(ICVL,7)*p(ICVL+i7) 952 3 2m q(ICVL) = q(ICVL) + AA(ICVL,5)*p(ICVL+i5) + AA(ICVL,6)*p(ICVL+i6) +

AA(ICVL,7)*p(ICVL+i7) 953 3 & + AA(ICVL,1)*p(ICVL+i1) + AA(ICVL,2)*p(ICVL+i2) 954 3 2m q(ICVL+i7) = q(ICVL+i7) + AA(ICVL,7)*p(ICVL) 955 3 2m q(ICVL+i6) = q(ICVL+i6) + AA(ICVL,6)*p(ICVL) 956 3 2m q(ICVL+i5) = q(ICVL+i5) + AA(ICVL,5)*p(ICVL) 957 3 2m q(ICVL+i1) = q(ICVL+i1) + AA(ICVL,1)*p(ICVL) 958 3 2m q(ICVL+i2) = q(ICVL+i2) + AA(ICVL,2)*p(ICVL) 959 3 2v END DO 960 2 961 2 i1 = sm_Iaw(1,1) 962 2 i5 = sm_Iaw(5,1) 963 2 i6 = sm_Iaw(6,1) 964 2 i7 = sm_Iaw(7,1) 965 3 2s DO ICVL=NKCELL+1,(NJCELL-1)*NKCELL 966 3 ! q(ICVL) = q(ICVL) + AA(ICVL,1)*p(ICVL+i1) + AA(ICVL,2)*p(ICVL+i2) 967 3 ! & + AA(ICVL,3)*p(ICVL+i3) + AA(ICVL,5)*p(ICVL+i5) 968 3 ! & + AA(ICVL,6)*p(ICVL+i6) + AA(ICVL,7)*p(ICVL+i7) 969 3 2m q(ICVL) = q(ICVL) + AA(ICVL,5)*p(ICVL+i5) + AA(ICVL,6)*p(ICVL+i6) +

AA(ICVL,7)*p(ICVL+i7) 970 3 & + AA(ICVL,1)*p(ICVL+i1)

971 3 2m q(ICVL+i7) = q(ICVL+i7) + AA(ICVL,7)*p(ICVL) 972 3 2m q(ICVL+i6) = q(ICVL+i6) + AA(ICVL,6)*p(ICVL)

973 3 2m q(ICVL+i5) = q(ICVL+i5) + AA(ICVL,5)*p(ICVL) 974 3 2m q(ICVL+i1) = q(ICVL+i1) + AA(ICVL,1)*p(ICVL) 975 3 2v END DO

-Nlst=tオプションで翻訳時リストを出力(*.lst) 2 ・・・ 2段アンローリング s ・・・ SIMD化されない v ・・・ SIMD化された m ・・・ 部分的にSIMD化された

完全にはSIMD化できていない

Page 13: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_hpcソースコード

13

【utl_iccg_hpc】 .false.で実行するソルバー ⇒ リストベクトルによるアクセス

2929 3 do 401 ICVL=ICVS,ICVE 2930 4 6s do 401 j=1,IL(ICVL) 2931 4 6v k=ip(ICVL,j) 2932 4 6m q(ICVL)=q(ICVL)+a(ICVL,j)*p(k) 2933 4 6m q(k)=q(k)+a(ICVL,j)*p(ICVL) 2934 3 6v 401 continue

utl_iccg_direct_hpc はdo 401 ICVL=ICVS,ICVEのループを分割して do 401 j=1,IL(ICVL)のループを展開しているように見える

DO ICVL=ICVS,NKCELL DO ICVL=NKCELL+1,(NJCELL-1)*NKCELL DO ICVL=(NJCELL-1)*NKCELL+1,NJCELL*NKCELL DO ICVL=NJCELL*NKCELL*i+1,NJCELL*NKCELL*i+NKCELL DO ICVL=NJCELL*NKCELL*i+NKCELL+1,NKCELL*NJCELL*i+(NJCELL-1)*NKCELL DO ICVL=NJCELL*NKCELL*i+NKCELL*(NJCELL-1)+1,NJCELL*NKCELL*(i+1) DO ICVL=NumCELL-NJCELL*NKCELL+1,NumCELL-NKCELL*(NJCELL-1) DO ICVL=NumCELL-NKCELL+1,NumCELL

Page 14: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

高速化検討

• コンパイルオプション

– 演算順序を変更する最適化を行わないオプション(-Knoeval)により、SIMD化されていなかった部分あり

• 翻訳指示行(!ocl novrec)によるSIMD化

– SIMD化を試みる

14

Page 15: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

コンパイルオプション、指示行によるSIMD化

以下の4ケースを比較

(1)-Kfast,noeval (ASIS)

(2)-Kfast (演算順序の変更を伴う)

(3)-Kfast, noeval, ocl+!ocl novrec指示行

(4)-Kfast, ocl+!ocl novrec指示行

15

Page 16: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct(ランク0)

• (1)、(3)、(4)の比較よりnovrec指示行によるSIMD化効果はほとんど無い(遅くなるケースもあり)

• 演算順序の変更を伴う(2)、(4)では、hpc_py_0のループの性能が改善

16

Page 17: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_LDLr

17

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 10.7465 680.8734 4.2555 1390.3461 17.3793 utl_iccg_direct_hpc_LDLr 0 MAX 11.8842 705.4259 4.4089 1440.4073 18.0051 MIN 10.3682 615.4382 3.8465 1256.7314 15.7091

(2)-Kfast (演算順序の変更を伴う) AVG 13.8476 528.5929 3.3037 1071.2152 13.3902 utl_iccg_direct_hpc_LDLr 0 MAX 14.6403 543.5084 3.3969 1101.4041 13.7676 MIN 13.4653 499.8876 3.1243 1013.0237 12.6628

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 10.7470 680.8312 4.2552 1392.8586 17.4107 utl_iccg_direct_hpc_LDLr 0 MAX 12.0059 706.3448 4.4147 1445.0123 18.0627 MIN 10.3547 609.2023 3.8075 1246.2919 15.5786

(4)-Kfast, ocl+!ocl novrec指示行 AVG 9.0395 810.6995 5.0669 1440.5274 18.0066 utl_iccg_direct_hpc_LDLr 0 MAX 10.2520 911.7551 5.6985 1620.0928 20.2512 MIN 8.0249 713.6820 4.4605 1268.1298 15.8516

最速

-Keval、!ocl novrecによるSIMD化の効果あり。 novrecの効果はほとんどなし。

Page 18: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_LDLr区間

18

1382 1 #ifdef TIMER 1383 1 wtime(1,12) = MPI_WTIME() 1384 1 call fapp_start("utl_iccg_direct_hpc_LDLr", 0, 0) 1385 1 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION]

<<< SIMD <<< Loop-information End >>>

1386 1 v c3(:) = 0.d0 <<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 24 <<< c3: 24 <<< Loop-information End >>>

1387 2 DO IIMAT=1,NMAT 1388 2 ICVS = MAT_CVEXT(IIMAT-1)+1 1389 2 ICVE = MAT_INDEX(IIMAT ) 1390 2 if( .NOT.mat_cal(IIMAT) ) cycle 1391 2 !---------------- 1392 2 i5 = sm_Iaw(5,8) 1393 2 i6 = sm_Iaw(6,8) 1394 2 i7 = sm_Iaw(7,8) 1395 3 4s DO ICVL=NumCELL,NumCELL-NKCELL+1,-1 1396 3 4s q(ICVL) = q(ICVL) - d(ICVL)*(AA(ICVL,7)*q(ICVL+i7) 1397 3 & + AA(ICVL,6)*q(ICVL+i6) 1398 3 & + AA(ICVL,5)*q(ICVL+i5)) 1399 3 4m c3(IIMAT) = c3(IIMAT) + r(ICVL)*q(ICVL) 1400 3 4v END DO

(1)-Kfast,noeval (ASIS)

(4)-Kfast, ocl+!ocl novrec指示行

本ループは、evalオプションの 指定の場合に、SIMD化された

1401 1 #ifdef TIMER 1402 1 wtime(1,12) = MPI_WTIME() 1403 1 call fapp_start("utl_iccg_direct_hpc_LDLr", 0,

0) 1404 1 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< Loop-information End >>>

1405 1 v c3(:) = 0.d0 <<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 36

<<< c3: 36 <<< Loop-information End >>> 1406 2 DO IIMAT=1,NMAT

1407 2 ICVS = MAT_CVEXT(IIMAT-1)+1 1408 2 ICVE = MAT_INDEX(IIMAT ) 1409 2 if( .NOT.mat_cal(IIMAT) ) cycle 1410 2 !----------------

1411 2 i5 = sm_Iaw(5,8) 1412 2 i6 = sm_Iaw(6,8) 1413 2 i7 = sm_Iaw(7,8) 1414 2 !ocl novrec <<< Loop-information Start >>>

<<< [OPTIMIZATION] <<< SIMD <<< Loop-information End >>>

1415 3 2v DO ICVL=NumCELL,NumCELL-NKCELL+1,-1 1416 3 2v q(ICVL) = q(ICVL) -

d(ICVL)*(AA(ICVL,7)*q(ICVL+i7) 1417 3 & + AA(ICVL,6)*q(ICVL+i6) 1418 3 & + AA(ICVL,5)*q(ICVL+i5)) 1419 3 2v c3(IIMAT) = c3(IIMAT) + r(ICVL)*q(ICVL) 1420 3 2v END DO

Page 19: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_Lir

19

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 14.0772 433.7795 2.7111 1174.0014 14.6750 utl_iccg_direct_hpc_Lir 0 MAX 15.6555 444.5695 2.7786 1203.1813 15.0398 MIN 13.7337 389.9978 2.4375 1055.5244 13.1941

(2)-Kfast (演算順序の変更を伴う) AVG 14.0928 433.3158 2.7082 1170.2581 14.6282 utl_iccg_direct_hpc_Lir 0 MAX 15.8894 443.5370 2.7721 1197.8393 14.9730 MIN 13.7657 384.2554 2.4016 1037.8491 12.9731

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 12.9777 470.8446 2.9428 805.0902 10.0636 utl_iccg_direct_hpc_Lir 0 MAX 15.6888 511.7510 3.1984 875.2168 10.9402 MIN 11.9308 389.1699 2.4323 665.8220 8.3228

(4)-Kfast, ocl+!ocl novrec指示行 AVG 12.9530 471.7178 2.9482 716.9900 8.9624 utl_iccg_direct_hpc_Lir 0 MAX 15.1258 525.0271 3.2814 797.9885 9.9749 MIN 11.6291 403.6535 2.5228 613.5644 7.6696

最速

!ocl novrecによるSIMD化の効果あり

Page 20: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_Lir区間

20

1263 1 #ifdef TIMER 1264 1 wtime(1,10) = MPI_WTIME() 1265 1 call fapp_start("utl_iccg_direct_hpc_Lir", 0, 0) 1266 1 #endif 1267 2 DO IIMAT=1,NMAT 1268 2 IMAT = MAT_NO(IIMAT) 1269 2 ICVS = MAT_CVEXT(IIMAT-1)+1 1270 2 ICVE = MAT_INDEX(IIMAT ) 1271 2 if( .NOT.mat_cal(IIMAT) ) cycle 1272 2 1273 2 !---------- 1274 2 i5 = sm_Iaw(5,5) 1275 2 i6 = sm_Iaw(6,5) 1276 2 i7 = sm_Iaw(7,5) 1277 3 4s DO ICVL=ICVS,NKCELL 1278 3 4s q(ICVL) = d(ICVL) * (r(ICVL)-AA(ICVL,0)) 1279 3 4s AA(ICVL+i7,0) = AA(ICVL+i7,0) + AA(ICVL+i7,1)*q(ICVL) 1280 3 4s AA(ICVL+i6,0) = AA(ICVL+i6,0) + AA(ICVL+i6,2)*q(ICVL) 1281 3 4s AA(ICVL+i5,0) = AA(ICVL+i5,0) + AA(ICVL+i5,3)*q(ICVL) 1282 3 4s END DO

(1)-Kfast,noeval (ASIS)

(4)-Kfast, ocl+!ocl novrec指示行 1273 1 #ifdef TIMER

1274 1 wtime(1,10) = MPI_WTIME() 1275 1 call fapp_start("utl_iccg_direct_hpc_Lir", 0, 0) 1276 1 #endif 1277 2 DO IIMAT=1,NMAT 1278 2 IMAT = MAT_NO(IIMAT) 1279 2 ICVS = MAT_CVEXT(IIMAT-1)+1 1280 2 ICVE = MAT_INDEX(IIMAT ) 1281 2 if( .NOT.mat_cal(IIMAT) ) cycle

1282 2 1283 2 !---------- 1284 2 i5 = sm_Iaw(5,5) 1285 2 i6 = sm_Iaw(6,5) 1286 2 i7 = sm_Iaw(7,5) 1287 2 !ocl novrec

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< Loop-information End >>>

1288 3 4v DO ICVL=ICVS,NKCELL 1289 3 4v q(ICVL) = d(ICVL) * (r(ICVL)-AA(ICVL,0)) 1290 3 4v AA(ICVL+i7,0) = AA(ICVL+i7,0) + AA(ICVL+i7,1)*q(ICVL) 1291 3 4v AA(ICVL+i6,0) = AA(ICVL+i6,0) + AA(ICVL+i6,2)*q(ICVL) 1292 3 4v AA(ICVL+i5,0) = AA(ICVL+i5,0) + AA(ICVL+i5,3)*q(ICVL) 1293 3 4v END DO

本ループは、novrec指示行指定時にSIMD化された。

Page 21: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_TOL

21

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 16.1999 0.0599 0.0004 982.0202 12.2753 utl_iccg_direct_hpc_TOL 0 MAX 16.7283 0.0847 0.0005 1248.2695 15.6034 MIN 15.5144 0.0110 0.0001 760.8996 9.5112

(2)-Kfast (演算順序の変更を伴う) AVG 16.2114 0.0599 0.0004 974.4325 12.1804 utl_iccg_direct_hpc_TOL 0 MAX 16.5394 0.0866 0.0005 1262.5985 15.7825 MIN 15.2123 0.0111 0.0001 765.6797 9.5710

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 16.4549 0.0590 0.0004 981.1114 12.2639 utl_iccg_direct_hpc_TOL 0 MAX 16.7862 0.0836 0.0005 1260.5119 15.7564 MIN 15.7721 0.0108 0.0001 763.1514 9.5394

(4)-Kfast, ocl+!ocl novrec指示行 AVG 16.0018 0.0607 0.0004 974.8204 12.1853 utl_iccg_direct_hpc_TOL 0 MAX 16.4128 0.0867 0.0005 1229.7468 15.3718 MIN 15.2262 0.0111 0.0001 753.2868 9.4161

変化なし

Page 22: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_TOL区間

22

1238 1 #ifdef TIMER 1239 1 wtime(1,9) = MPI_WTIME() 1240 1 call fapp_start("utl_iccg_direct_hpc_TOL", 0, 0) 1241 1 #endif 1242 2 if( NPE>1 ) then 1243 3 6 DO KMAT=1,KMAT_S 1244 3 6 IIMAT = MAT_S(KMAT) 1245 3 6 call hpcrmax(RMAXS(IIMAT)) 1246 3 6 RMAXS(0) = 0.d0 1247 3 6 END DO 1248 2 end if 1249 1 ! 1250 1 ICHECK = .TRUE.

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 24 <<< rmaxs: 12, rmaxs0: 12 <<< Loop-information End >>>

1251 2 6s DO IIMAT=1,NMAT 1252 2 6s IMAT = MAT_NO(IIMAT) 1253 2 6s if( IMAT<0 ) cycle 1254 2 6s ICHECK = ICHECK.AND.(RMAXS(IIMAT)<=min(aeps,reps*rmaxs0(IIMAT))) 1255 2 6s END DO 1256 1 if(NPE > 1) call hpcland(ICHECK,3) 1257 1 #ifdef TIMER 1258 1 call fapp_stop("utl_iccg_direct_hpc_TOL", 0, 0)

Page 23: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_alpxr

23

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 6.4219 713.9773 4.4624 1736.9075 21.7113 utl_iccg_direct_hpc_alpxr 0 MAX 7.1941 773.0257 4.8314 1880.4650 23.5058 MIN 5.9259 636.7479 3.9797 1551.1015 19.3888

(2)-Kfast (演算順序の変更を伴う) AVG 6.4060 715.7026 4.4731 1616.8784 20.2110 utl_iccg_direct_hpc_alpxr 0 MAX 7.3602 758.1545 4.7385 1712.7213 21.4090 MIN 6.0421 622.3836 3.8899 1406.0146 17.5752

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 6.3613 720.6610 4.5041 1753.1157 21.9139 utl_iccg_direct_hpc_alpxr 0 MAX 7.0957 767.4850 4.7968 1866.9393 23.3367 MIN 5.9687 645.5805 4.0349 1570.4355 19.6304

(4)-Kfast, ocl+!ocl novrec指示行 AVG 6.3693 719.8410 4.4990 1626.2003 20.3275 utl_iccg_direct_hpc_alpxr 0 MAX 7.1831 762.4814 4.7655 1722.4993 21.5312 MIN 6.0078 637.7270 3.9858 1440.6861 18.0086

変化なし

Page 24: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_alpxr区間

24

1210 1 call fapp_start("utl_iccg_direct_hpc_alpxr", 0, 0) 1211 1 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 12 <<< c2: 12 <<< Loop-information End >>>

1212 2 6s DO IIMAT=1,NMAT 1213 2 6m IMAT = MAT_NO(IIMAT) 1214 2 6s if( IMAT<0 ) c2(IIMAT) = 1.d0 1215 2 6v alpha(IIMAT) = c1(IIMAT)/(c2(IIMAT)) 1216 2 6v END DO 1217 1

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< Loop-information End >>>

1218 1 v rmaxs(:) = 0.d0 <<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 4 <<< alpha: 4 <<< Loop-information End >>>

1219 2 DO IIMAT=1,NMAT 1220 2 IMAT = MAT_NO(IIMAT) 1221 2 ICVS = MAT_CVEXT(IIMAT-1)+1 1222 2 ICVE = MAT_INDEX(IIMAT ) 1223 2 if( .not.mat_cal(IIMAT) ) cycle

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< SOFTWARE PIPELINING <<< Loop-information End >>>

1224 3 6v DO ICVL=ICVS,ICVE 1225 3 6v x(ICVL) = x(ICVL) + alpha(IIMAT)*p(ICVL) 1226 3 6v r(ICVL) = r(ICVL) - alpha(IIMAT)*q(ICVL) 1227 3 6v rmaxs(IIMAT) = max(rmaxs(IIMAT),abs(r(ICVL))) 1228 3 ! a(ICVL,0) = 0.d0 1229 3 6v END DO 1230 2 END DO

Page 25: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_betap

25

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 1.7230 887.5087 5.5469 1399.6110 17.4951 utl_iccg_direct_hpc_betap 0 MAX 1.9915 994.9967 6.2187 1568.7863 19.6098 MIN 1.5348 766.7974 4.7925 1209.0831 15.1135

(2)-Kfast (演算順序の変更を伴う) AVG 1.7293 884.3523 5.5272 1182.9270 14.7866 utl_iccg_direct_hpc_betap 0 MAX 2.0313 1006.2062 6.2888 1345.6606 16.8208 MIN 1.5177 751.7820 4.6986 1005.4172 12.5677

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 1.7368 880.4544 5.5028 1388.5037 17.3563 utl_iccg_direct_hpc_betap 0 MAX 1.9683 969.2968 6.0581 1528.3365 19.1042 MIN 1.5755 775.8649 4.8492 1223.9231 15.2990

(4)-Kfast, ocl+!ocl novrec指示行 AVG 1.7260 886.0089 5.5376 1184.9968 14.8125 utl_iccg_direct_hpc_betap 0 MAX 1.9991 993.4962 6.2094 1328.5781 16.6072 MIN 1.5371 763.9087 4.7744 1021.5415 12.7693

変化なし

Page 26: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_betap区間

26

1537 1 call fapp_start("utl_iccg_direct_hpc_betap", 0, 0) 1538 1 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 8 <<< c1: 8 <<< Loop-information End >>>

1539 2 4s DO IIMAT=1,NMAT 1540 2 4m IMAT = MAT_NO(IIMAT) 1541 2 4s if( IMAT<0 ) c1(IIMAT) = 1.d0 1542 2 4v beta(IIMAT) = c3(IIMAT)/(c1(IIMAT)) 1543 2 4v c1(IIMAT) = c3(IIMAT) 1544 2 4v END DO 1545 1 c11 = c33 1546 1 !

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 4 <<< beta: 4 <<< Loop-information End >>>

1547 2 DO IIMAT=1,NMAT 1548 2 ICVS = MAT_CVEXT(IIMAT-1)+1 1549 2 ICVE = MAT_INDEX(IIMAT ) 1550 2 if(.not.mat_cal(IIMAT)) cycle

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< SOFTWARE PIPELINING <<< Loop-information End >>>

1551 3 8v DO ICVL=ICVS,ICVE !I=1,NCV 1552 3 8v p(ICVL) = q(ICVL) + beta(IIMAT)*p(ICVL) 1553 3 8v END DO 1554 2 END DO

Page 27: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_py

27

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 2.7303 559.0683 3.4942 1147.3599 14.3420 utl_iccg_direct_hpc_py 0 MAX 2.8149 563.9539 3.5247 1157.2381 14.4655 MIN 2.7066 542.2611 3.3891 1118.1026 13.9763

(2)-Kfast (演算順序の変更を伴う) AVG 0.9429 1624.2505 10.1516 1760.0011 22.0000 utl_iccg_direct_hpc_py 0 MAX 1.3698 1743.3819 10.8961 1888.6996 23.6087 MIN 0.8763 1115.2722 6.9705 1208.2337 15.1029

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 2.6330 579.7327 3.6233 1189.7033 14.8713 utl_iccg_direct_hpc_py 0 MAX 2.6846 584.5203 3.6533 1199.4114 14.9926 MIN 2.6114 568.5848 3.5537 1168.9930 14.6124

(4)-Kfast, ocl+!ocl novrec指示行 AVG 0.9377 1631.1225 10.1945 1767.3196 22.0915 utl_iccg_direct_hpc_py 0 MAX 1.1265 1746.9404 10.9184 1892.6187 23.6577 MIN 0.8745 1356.1990 8.4762 1469.4197 18.3677

最速

最速

-Kevalでの効果あり。novrecは効果なし。

Page 28: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_py区間

28

1138 2 #ifdef TIMER 1139 2 wtime(1,6) = MPI_WTIME() 1140 2 call fapp_start("utl_iccg_direct_hpc_py", 0, 0) 1141 2 #endif 1142 3 8s DO ICVL=ICVS,ICVE 1143 3 8m c2(IIMAT) = c2(IIMAT) + p(ICVL)*q(ICVL) 1144 3 8v END DO

(1)-Kfast,noeval (ASIS)

(2)-Kfast (演算順序の変更を伴う)

1138 2 #ifdef TIMER 1139 2 wtime(1,6) = MPI_WTIME() 1140 2 call fapp_start("utl_iccg_direct_hpc_py", 0, 0) 1141 2 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< SOFTWARE PIPELINING <<< Loop-information End >>>

1142 3 8v DO ICVL=ICVS,ICVE 1143 3 8v c2(IIMAT) = c2(IIMAT) + p(ICVL)*q(ICVL) 1144 3 8v END DO

本ループは、evalオプションの指定の場合に、SIMD化された。

Page 29: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_yDiag

29

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 2.7389 0.0000 0.0000 1848.8375 23.1105 utl_iccg_direct_hpc_yDiag 0 MAX 3.7694 0.0000 0.0000 2260.5884 28.2574 MIN 1.5575 0.0000 0.0000 1359.1685 16.9896

(2)-Kfast (演算順序の変更を伴う) AVG 2.7387 0.0000 0.0000 1827.2501 22.8406 utl_iccg_direct_hpc_yDiag 0 MAX 4.1772 0.0000 0.0000 2268.1385 28.3517 MIN 1.5496 0.0000 0.0000 1211.2527 15.1407

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 2.7136 0.0000 0.0000 1864.4580 23.3057 utl_iccg_direct_hpc_yDiag 0 MAX 3.5528 0.0000 0.0000 2275.2302 28.4404 MIN 1.5506 0.0000 0.0000 1442.1408 18.0268

(4)-Kfast, ocl+!ocl novrec指示行 AVG 2.7175 0.0000 0.0000 1840.1353 23.0017 utl_iccg_direct_hpc_yDiag 0 MAX 4.0855 0.0000 0.0000 2246.2717 28.0784 MIN 1.5379 0.0000 0.0000 1238.5119 15.4814

-Kevalオプションで若干性能低下(MAXの値)

Page 30: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_yDiag区間

30

912 1 #ifdef TIMER 913 1 wtime(1,4) = MPI_WTIME() 914 1 call fapp_start("utl_iccg_direct_hpc_yDiag", 0, 0) 915 1 #endif 916 2 DO IIMAT=1,NMAT 917 2 IMAT = MAT_NO(IIMAT) 918 2 ICVS = MAT_CVEXT(IIMAT-1)+1 919 2 ICVE = MAT_CVEXT(IIMAT ) 920 2 ! ICVE = MAT_INDEX(IIMAT ) 921 2 if( .NOT.mat_cal(IIMAT) ) cycle 922 2 ! DO ICVL=ICVS,NumCELL+next_cv

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< SOFTWARE PIPELINING <<< Loop-information End >>>

923 3 8v DO ICVL=ICVS,ICVE 924 3 8v q(ICVL) = p(ICVL) 925 3 8v END DO

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SOFTWARE PIPELINING <<< Loop-information End >>>

926 3 8s DO i=1,IMPORT_index(Neibpetot) 927 3 8v icvl=import_item(i) 928 3 8v q(ICVL) = p(ICVL) 929 3 8m END DO 930 2 END DO

(1)-Kfast,noeval (ASIS)

<<< Loop-information Start >>> <<< [OPTIMIZATION]

<<< SIMD <<< SOFTWARE PIPELINING <<< Loop-information End >>> 923 3 8v DO ICVL=ICVS,ICVE 924 3 8v q(ICVL) = p(ICVL) 925 3 8v END DO <<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SOFTWARE PIPELINING <<< Loop-information End >>> 926 3 4s DO i=1,IMPORT_index(Neibpetot) 927 3 4s icvl=import_item(i) 928 3 4s q(ICVL) = p(ICVL) 929 3 4s END DO

(2)-Kfast (演算順序の変更を伴う)

Page 31: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_ynonD

31

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 10.7383 935.8828 5.8493 1996.3891 24.9549 utl_iccg_direct_hpc_ynonD 0 MAX 11.2821 955.9909 5.9749 2039.2476 25.4906 MIN 10.5114 890.6850 5.5668 1899.9583 23.7495

(2)-Kfast (演算順序の変更を伴う) AVG 10.7269 936.8698 5.8554 2001.9826 25.0248 utl_iccg_direct_hpc_ynonD 0 MAX 11.1563 957.1412 5.9821 2045.2626 25.5658 MIN 10.4988 900.7257 5.6295 1924.7303 24.0591

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 13.0867 767.9639 4.7998 1128.4243 14.1053 utl_iccg_direct_hpc_ynonD 0 MAX 13.7644 784.3168 4.9020 1152.6699 14.4084 MIN 12.8122 730.0553 4.5628 1072.7295 13.4091

(4)-Kfast, ocl+!ocl novrec指示行 AVG 13.1512 764.1744 4.7761 928.6254 11.6078 utl_iccg_direct_hpc_ynonD 0 MAX 13.7368 777.3379 4.8584 944.6165 11.8077 MIN 12.9272 731.5230 4.5720 888.9536 11.1119

最速

novrecによるSIMD化での性能低下

Page 32: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_iccg_direct_hpc_ynonD区間

32

945 2 #ifdef TIMER 946 2 wtime(1,5) = MPI_WTIME() 947 2 call fapp_start("utl_iccg_direct_hpc_ynonD", 0, 0) 948 2 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< PREFETCH : 2 <<< q: 2 <<< Loop-information End >>>

954 3 2s DO ICVL=ICVS,NKCELL 955 3 ! q(ICVL) = q(ICVL) + AA(ICVL,1)*p(ICVL+i1) +

AA(ICVL,2)*p(ICVL+i2) 956 3 ! & + AA(ICVL,3)*p(ICVL+i3) +

AA(ICVL,5)*p(ICVL+i5) 957 3 ! & + AA(ICVL,6)*p(ICVL+i6) +

AA(ICVL,7)*p(ICVL+i7) 958 3 2m q(ICVL) = q(ICVL) + AA(ICVL,5)*p(ICVL+i5) +

AA(ICVL,6)*p(ICVL+i6) + AA(ICVL,7)*p(ICVL+i7) 959 3 & + AA(ICVL,1)*p(ICVL+i1) +

AA(ICVL,2)*p(ICVL+i2) 960 3 2m q(ICVL+i7) = q(ICVL+i7) + AA(ICVL,7)*p(ICVL) 961 3 2m q(ICVL+i6) = q(ICVL+i6) + AA(ICVL,6)*p(ICVL) 962 3 2m q(ICVL+i5) = q(ICVL+i5) + AA(ICVL,5)*p(ICVL) 963 3 2m q(ICVL+i1) = q(ICVL+i1) + AA(ICVL,1)*p(ICVL) 964 3 2m q(ICVL+i2) = q(ICVL+i2) + AA(ICVL,2)*p(ICVL) 965 3 2v END DO

(1)-Kfast,noeval (ASIS)

(3)-Kfast, noeval, ocl+!ocl novrec指示行 946 2 #ifdef TIMER

947 2 wtime(1,5) = MPI_WTIME() 948 2 call fapp_start("utl_iccg_direct_hpc_ynonD", 0, 0) 949 2 #endif

955 2 !ocl novrec <<< Loop-information Start >>>

<<< [OPTIMIZATION] <<< SIMD

<<< PREFETCH : 2 <<< q: 2

<<< Loop-information End >>> 956 3 2v DO ICVL=ICVS,NKCELL

957 3 ! q(ICVL) = q(ICVL) + AA(ICVL,1)*p(ICVL+i1) + AA(ICVL,2)*p(ICVL+i2) 958 3 ! & + AA(ICVL,3)*p(ICVL+i3) + AA(ICVL,5)*p(ICVL+i5) 959 3 ! & + AA(ICVL,6)*p(ICVL+i6) + AA(ICVL,7)*p(ICVL+i7)

960 3 2v q(ICVL) = q(ICVL) + AA(ICVL,5)*p(ICVL+i5) + AA(ICVL,6)*p(ICVL+i6) + AA(ICVL,7)*p(ICVL+i7)

961 3 & + AA(ICVL,1)*p(ICVL+i1) + AA(ICVL,2)*p(ICVL+i2)

962 3 2v q(ICVL+i7) = q(ICVL+i7) + AA(ICVL,7)*p(ICVL) 963 3 2v q(ICVL+i6) = q(ICVL+i6) + AA(ICVL,6)*p(ICVL) 964 3 2v q(ICVL+i5) = q(ICVL+i5) + AA(ICVL,5)*p(ICVL) 965 3 2v q(ICVL+i1) = q(ICVL+i1) + AA(ICVL,1)*p(ICVL) 966 3 2v q(ICVL+i2) = q(ICVL+i2) + AA(ICVL,2)*p(ICVL) 967 3 2v END DO

本ループは、novrec指示行指定時にSIMD化された。 ただし、SIMD化により性能低下。

Page 33: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

bcgstb(ランク0)

• (2)、(4)のケースで遅くなるケースあり。(SIMD化で遅くなっている)

• Precon、Preliminary区間は、前処理、初期処理区間。意外とコストが大きい。(反復数が少ないためと考えられる)

33

lower is better

higher is better

Page 34: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_bcgstb_01

34

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 0.5844 273.2885 1.7081 2258.9685 28.2371 utl_bcgstb_01 0 MAX 0.6089 277.9992 1.7375 2297.8882 28.7236 MIN 0.5745 262.3163 1.6395 2168.2044 27.1026

(2)-Kfast (演算順序の変更を伴う) AVG 0.6776 266.8474 1.6678 2499.1076 31.2388 utl_bcgstb_01 0 MAX 0.6925 269.7970 1.6862 2526.6936 31.5837 MIN 0.6701 261.0814 1.6318 2445.0459 30.5631

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 0.5738 273.0359 1.7065 2256.8616 28.2108 utl_bcgstb_01 0 MAX 0.5952 277.4906 1.7343 2293.6282 28.6704 MIN 0.5646 263.2010 1.6450 2175.5624 27.1945

(4)-Kfast, ocl+!ocl novrec指示行 AVG 0.6768 266.7571 1.6672 2498.2502 31.2281 utl_bcgstb_01 0 MAX 0.6918 269.6800 1.6855 2525.6008 31.5700 MIN 0.6695 260.9599 1.6310 2443.9610 30.5495

最速

-KevalオプションによるSIMD化で性能低下 novrec指示行も効果なし

Page 35: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_bcgstb_01区間

35

544 1 #ifdef TIMER 545 1 call fapp_start("utl_bcgstb_01", 0, 0) 546 1 #endif 547 2 do IIMAT=1,NMAT 548 2 IMAT=MAT_NO(IIMAT) 549 2 ICVS=MAT_CVEXT(IIMAT-1)+1 550 2 ICVE=MAT_INDEX(IIMAT) 551 2 if(.not.mat_cal(IIMAT)) cycle 552 3 do 400 ICVL=ICVS,ICVE !i=1,NCVIN 553 3 dum1=0.d0 554 3 ! --- low

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SOFTWARE PIPELINING <<< Loop-information End >>>

555 4 8s do 401 j=1,IQ(ICVL,1) 556 4 8m dum1=dum1+a(ICVL,j)*p1(ip(ICVL,j)) 557 4 8v 401 enddo 558 3 p1(ICVL)=d(ICVL)*(p0(ICVL)-dum1) 559 3 400 enddo 560 2 enddo 561 1 #ifdef TIMER 562 1 call fapp_stop("utl_bcgstb_01", 0, 0) 563 1 #endif

(1)-Kfast,noeval (ASIS)

(2)-Kfast (演算順序の変更を伴う) 544 1 #ifdef TIMER

545 1 call fapp_start("utl_bcgstb_01", 0, 0) 546 1 #endif 547 2 do IIMAT=1,NMAT 548 2 IMAT=MAT_NO(IIMAT) 549 2 ICVS=MAT_CVEXT(IIMAT-1)+1 550 2 ICVE=MAT_INDEX(IIMAT) 551 2 if(.not.mat_cal(IIMAT)) cycle

552 3 do 400 ICVL=ICVS,ICVE !i=1,NCVIN 553 3 dum1=0.d0

554 3 ! --- low <<< Loop-information Start >>>

<<< [OPTIMIZATION] <<< SIMD <<< SOFTWARE PIPELINING

<<< Loop-information End >>> 555 4 4v do 401 j=1,IQ(ICVL,1) 556 4 4v dum1=dum1+a(ICVL,j)*p1(ip(ICVL,j)) 557 4 4v 401 enddo 558 3 p1(ICVL)=d(ICVL)*(p0(ICVL)-dum1) 559 3 400 enddo 560 2 enddo 561 1 #ifdef TIMER 562 1 call fapp_stop("utl_bcgstb_01", 0, 0) 563 1 #endif

本ループは、evalオプションの 指定の場合に、SIMD化された。 ただし、SIMD化により性能低下。

Page 36: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_bcgstb_03

36

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 1.0207 294.7122 1.8420 2053.9134 25.6739 utl_bcgstb_03 0 MAX 1.0658 307.1995 1.9200 2159.4129 26.9927 MIN 0.9405 282.8430 1.7678 1970.1966 24.6275

(2)-Kfast (演算順序の変更を伴う) AVG 1.1304 304.6531 1.9041 2087.5428 26.0943 utl_bcgstb_03 0 MAX 1.3895 317.5058 1.9844 2175.7097 27.1964 MIN 1.0639 246.3553 1.5397 1697.7041 21.2213

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 0.9946 296.6571 1.8541 2067.4143 25.8427 utl_bcgstb_03 0 MAX 1.0409 307.7166 1.9232 2162.9963 27.0375 MIN 0.9209 284.0794 1.7755 1978.7771 24.7347

(4)-Kfast, ocl+!ocl novrec指示行 AVG 1.1083 309.8732 1.9367 2123.2267 26.5403 utl_bcgstb_03 0 MAX 1.1539 318.1758 1.9886 2178.2468 27.2281 MIN 1.0699 292.0441 1.8253 2030.4301 25.3804

最速

-KevalオプションによるSIMD化で性能低下 novrec指示行も効果なし

Page 37: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_bcgstb_03区間

37

608 1 #ifdef TIMER 609 1 call fapp_start("utl_bcgstb_03", 0, 0) 610 1 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< Loop-information End >>>

611 1 v v(:)=0.d0 612 2 do IIMAT=1,NMAT 613 2 IMAT=MAT_NO(IIMAT) 614 2 ICVS=MAT_CVEXT(IIMAT-1)+1 615 2 ICVE=MAT_INDEX(IIMAT) 616 2 if(.not.mat_cal(IIMAT)) cycle 617 3 do 410 ICVL=ICVS,ICVE !i=1,NCVIN 618 3 dum1=p1(ICVL) 619 3 ! --- low + upper

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SOFTWARE PIPELINING <<< Loop-information End >>>

620 4 8s do 411 j=1,IQ(ICVL,2) 621 4 8m dum1=dum1+a(ICVL,j)*p1(ip(ICVL,j)) 622 4 8v 411 enddo 623 3 q1(ICVL)=dum1 624 3 v(IIMAT)=v(IIMAT)+r0(ICVL)*dum1 625 3 410 enddo 626 2 enddo

(1)-Kfast,noeval (ASIS)

(2)-Kfast (演算順序の変更を伴う) 608 1 #ifdef TIMER

609 1 call fapp_start("utl_bcgstb_03", 0, 0) 610 1 #endif

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SIMD <<< Loop-information End >>>

611 1 v v(:)=0.d0 612 2 do IIMAT=1,NMAT 613 2 IMAT=MAT_NO(IIMAT) 614 2 ICVS=MAT_CVEXT(IIMAT-1)+1 615 2 ICVE=MAT_INDEX(IIMAT) 616 2 if(.not.mat_cal(IIMAT)) cycle

617 3 do 410 ICVL=ICVS,ICVE !i=1,NCVIN 618 3 dum1=p1(ICVL)

619 3 ! --- low + upper <<< Loop-information Start >>>

<<< [OPTIMIZATION] <<< SIMD <<< SOFTWARE PIPELINING <<< Loop-information End >>>

620 4 4v do 411 j=1,IQ(ICVL,2) 621 4 4v dum1=dum1+a(ICVL,j)*p1(ip(ICVL,j)) 622 4 4v 411 enddo 623 3 q1(ICVL)=dum1 624 3 v(IIMAT)=v(IIMAT)+r0(ICVL)*dum1 625 3 410 enddo 626 2 enddo

本ループは、evalオプションの 指定の場合に、SIMD化された。 ただし、SIMD化により性能低下。

Page 38: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_bcgstb_08

38

Kind Elapsed(s) MFLOPS MFLOPS/PEAK(%) MIPS MIPS/PEAK(%) --------------------------------------------------------------------------------- (1)-Kfast,noeval (ASIS)

AVG 1.0275 334.7299 2.0921 2124.1311 26.5516 utl_bcgstb_08 0 MAX 1.2434 347.2673 2.1704 2214.1862 27.6773 MIN 0.9560 277.1117 1.7319 1758.0820 21.9760

(2)-Kfast (演算順序の変更を伴う) AVG 1.2353 330.8377 2.0677 2222.2633 27.7783 utl_bcgstb_08 0 MAX 1.6730 341.6418 2.1353 2293.2368 28.6655 MIN 1.1927 241.3926 1.5087 1737.7767 21.7222

(3)-Kfast, noeval, ocl+!ocl novrec指示行 AVG 1.0140 332.7146 2.0795 2111.3908 26.3924 utl_bcgstb_08 0 MAX 1.1686 345.6695 2.1604 2199.1712 27.4896 MIN 0.9476 289.2312 1.8077 1834.9665 22.9371

(4)-Kfast, ocl+!ocl novrec指示行 AVG 1.2266 332.6242 2.0789 2234.2246 27.9278 utl_bcgstb_08 0 MAX 1.3675 342.9044 2.1432 2301.6215 28.7703 MIN 1.1883 298.8228 1.8676 2005.8044 25.0726

最速

-KevalオプションによるSIMD化で性能低下 novrec指示行も効果なし

Page 39: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

utl_bcgstb_08区間

39

765 1 #ifdef TIMER 766 1 call fapp_start("utl_bcgstb_08", 0, 0) 767 1 #endif 768 2 do IIMAT=1,NMAT 769 2 IMAT=MAT_NO(IIMAT) 770 2 ICVS=MAT_CVEXT(IIMAT-1)+1 771 2 ICVE=MAT_INDEX(IIMAT) 772 2 if(.not.mat_cal(IIMAT)) cycle 773 3 do 440 ICVL=ICVS,ICVE !i=1,NCVIN 774 3 dum1=r1(ICVL)

<<< Loop-information Start >>> <<< [OPTIMIZATION] <<< SOFTWARE PIPELINING <<< Loop-information End >>>

775 4 8s do 441 j=1,IQ(ICVL,2) 776 4 ! --- low+upper 777 4 8m dum1=dum1+a(ICVL,j)*r1(ip(ICVL,j)) 778 4 8v 441 continue 779 3 r2(ICVL)=dum1 780 3 u(IIMAT)=u(IIMAT)+dum1*q0(ICVL) 781 3 v(IIMAT)=v(IIMAT)+dum1*dum1 782 3 440 continue 783 2 enddo

(1)-Kfast,noeval (ASIS)

(2)-Kfast (演算順序の変更を伴う) 765 1 #ifdef TIMER

766 1 call fapp_start("utl_bcgstb_08", 0, 0) 767 1 #endif 768 2 do IIMAT=1,NMAT 769 2 IMAT=MAT_NO(IIMAT) 770 2 ICVS=MAT_CVEXT(IIMAT-1)+1 771 2 ICVE=MAT_INDEX(IIMAT)

772 2 if(.not.mat_cal(IIMAT)) cycle 773 3 do 440 ICVL=ICVS,ICVE !i=1,NCVIN

774 3 dum1=r1(ICVL) <<< Loop-information Start >>> <<< [OPTIMIZATION]

<<< SIMD <<< SOFTWARE PIPELINING

<<< Loop-information End >>> 775 4 4v do 441 j=1,IQ(ICVL,2) 776 4 ! --- low+upper 777 4 4v dum1=dum1+a(ICVL,j)*r1(ip(ICVL,j)) 778 4 4v 441 continue 779 3 r2(ICVL)=dum1 780 3 u(IIMAT)=u(IIMAT)+dum1*q0(ICVL) 781 3 v(IIMAT)=v(IIMAT)+dum1*dum1 782 3 440 continue 783 2 enddo 本ループは、evalオプションの

指定の場合に、SIMD化された。 ただし、SIMD化により性能低下。

Page 40: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

中間報告まとめ

• utl_iccg_hpcとutl_iccg_direct_hpcの比較

– ソルバー単体で約1.3倍の性能向上となった

• utl_iccg_direct_hpcについて

– SIMD化をコンパイルオプション、指示行で試してみたが、逆に遅くなる場合もあるため、効果のある部分だけ個別にSIMD化した方がよい。

• utl_bcgstb_hpcについて

– コンパイルオプション、指示行での高速化の効果は得られなかった。

40

Page 41: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

その他の高速化案

• SOLVER_SEND_RECV、hpcrsumの削減

• utl_bcgstbにもutl_iccg_directと同様な修正は可能か?

41

Page 42: 「京」におけるFrontFlow/MPの 性能分析...性能評価諸条件 • データ – 348x192x318 (約2000万格子点) – 174ノード(1392プロセス) • 「京」言語環境

END

42