研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並



Similar documents
1.overview

Microsoft PowerPoint - sps14_kogi6.pptx

XcalableMP入門

HPC146

HPC143

高生産 高性能プログラミング のための並列言語 XcalableMP 佐藤三久 筑波大学計算科学研究センター

XACC講習会

PowerPoint Presentation

XMPによる並列化実装2

PowerPoint プレゼンテーション

nakao

XACCの概要

新しい並列プログラミング言語である 分散メモリ環境において OpenMPのようにMPI とは異なるシンプルな言語構文と指示文による並列化を目指している ベース言語は Fortran 言語とC 言語となっており 2011 年 6 月に発足したPC クラスタコンソーシアム XcalableMP 規格部会

NUMAの構成

NUMAの構成

Microsoft PowerPoint - 演習1:並列化と評価.pptx

PowerPoint プレゼンテーション

Microsoft PowerPoint - XMP-AICS-Cafe ppt [互換モード]

01_OpenMP_osx.indd

演習1: 演習準備

並列計算導入.pptx

Fujitsu Standard Tool

WinHPC ppt

Microsoft Word - openmp-txt.doc

MPI usage

コードのチューニング

Fujitsu Standard Tool

Microsoft PowerPoint - OpenMP入門.pptx

コードのチューニング

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments

Microsoft PowerPoint - KHPCSS pptx

MPI MPI MPI.NET C# MPI Version2

Microsoft PowerPoint - 阪大CMSI pptx

スーパーコンピューティングニュース特集号 原稿

Microsoft PowerPoint - sales2.ppt

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)

gengo1-8

I I / 47

enshu5_4.key

Microsoft PowerPoint _MPI-01.pptx

スパコンに通じる並列プログラミングの基礎

スパコンに通じる並列プログラミングの基礎

2007年度 計算機システム演習 第3回

Microsoft PowerPoint - program.ppt [互換モード]

演習準備

PowerPoint プレゼンテーション

VXPRO R1400® ご提案資料

Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc

memo

GeoFEM開発の経験から

program7app.ppt

情報処理概論(第二日目)

卒業論文

最新の並列計算事情とCAE

スパコンに通じる並列プログラミングの基礎

Microsoft PowerPoint - compsys2-06.ppt

cp-7. 配列

2 T 1 N n T n α = T 1 nt n (1) α = 1 100% OpenMP MPI OpenMP OpenMP MPI (Message Passing Interface) MPI MPICH OpenMPI 1 OpenMP MPI MPI (trivial p

2012年度HPCサマーセミナー_多田野.pptx

Microsoft Word - 3new.doc

untitled

Microsoft PowerPoint - 講義:片方向通信.pptx

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

about MPI

Microsoft Word - no202.docx

第8回講義(2016年12月6日)

memo

PowerPoint プレゼンテーション

第9回 配列(array)型の変数

スライド 1

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

OpenMP¤òÍѤ¤¤¿ÊÂÎó·×»»¡Ê£±¡Ë

CCS HPCサマーセミナー 並列数値計算アルゴリズム

並列分散ワークフロー処理システムの研究開発

PowerPoint Presentation

OpenMPプログラミング

< C93878CBB926E8C9F93A289EF8E9197BF2E786264>

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

4th XcalableMP workshop 目的 n XcalableMPのローカルビューモデルであるXMPのCoarray機能を用 いて Fiberミニアプリ集への実装と評価を行う PGAS(Pertitioned Global Address Space)言語であるCoarrayのベ ンチマ

Microsoft PowerPoint - 講義:コミュニケータ.pptx

平成18年○月○日

スライド 1

27

P01_表紙

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

chap2.ppt

02_C-C++_osx.indd

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1

スライド 1

Microsoft PowerPoint - 阪大CMSI pptx

C/C++ FORTRAN FORTRAN MPI MPI MPI UNIX Windows (SIMD Single Instruction Multipule Data) SMP(Symmetric Multi Processor) MPI (thread) OpenMP[5]

Java プログラミング Ⅰ 11 回目多次元配列 2 次元配列 2 次元配列配列要素が直線上に並ぶ一次元配列に対して 平面上に並ぶ配列要素をもつ配列 直観的には 2 次元配列の準備配列変数の宣言は型と識別子を指定して次のように行う 型識別子 [ ][ ]; または 型 [ ][ ] 識別子 ; 配

生物情報実験法 (オンライン, 4/20)

PowerPoint Presentation

スライド 1

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

<4D F736F F F696E74202D C097F B A E B93C782DD8EE682E890EA97705D>

OpenMP (1) 1, 12 1 UNIX (FUJITSU GP7000F model 900), 13 1 (COMPAQ GS320) FUJITSU VPP5000/64 1 (a) (b) 1: ( 1(a))

スライド 1

みどり野43号-P01

Transcription:

XcalableMPによる NAS Parallel Benchmarksの実装と評価 中尾 昌広 李 珍泌 朴 泰祐 佐藤 三久 筑波大学 計算科学研究センター 筑波大学大学院 システム情報工学研究科

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並列プログラミングモデルとして XcalableMPが提案されている SWoPP2010 金沢 2

XcalableMP 分散メモリ型システム用の並列プログラミングモデル OpenMPのように指示文を用いた並列化 + α 科学技術計算でよく用いられるCとFortran言語に対応 プログラミングコストを低減し 生産性を上げる #pragma xmp loop on t(i) for(i = 0; i < MAX; i++){ a[i] = func(i); } 指示文により ループ文を分散して 各ノードで処理可能 XcalableMPのプログラム例 SWoPP2010 金沢 3

発表内容 研究目的 XcalableMP XMP の記述性と性能を明らかにする 研究内容 NAS Parallel Benchmarks NPB をXMPで実装し 性能評価を行う Embarrassingly Parallel EP 乱数発生 Integer Sort IS 整数ソート Conjugate Gradient CG 共役勾配法 SWoPP2010 金沢 4

この後の発表の流れ XMPの概要と文法 XMPによるNPBの実装 性能測定 まとめ SWoPP2010 金沢 5

XMPの概要 実行モデルはSingle Program Multiple Data High Performance Fortranなどを参考に開発 node1 Performance Awareness 通信が発生する箇所は明示的に指示 それ以外はローカルメモリにアクセス 2つのプログラミングモデル node2 node3 Directives Comm, sync and work-sharing グローバルビュー 定型的な通信 集団通信 同期など ローカルビュー MPI_Put/Getのような 片方向通信の記述 SWoPP2010 金沢 6

#pragma xmp loop on t(i) for( i = 0; i < N; i++) a[ i ] = func( i ); #pragma xmp nodes n(4) #pragma xmp template t(0:n-1) #pragma xmp distribute t(block) onto n #pragma xmp align a[i] with t(i) // 4 // 0 N-1 index template // template n // a template template t 0 N-1 a[ ] node1 node2 node3 node4 0 N/4 N/2 N/4*3 N-1 7

#pragma xmp loop on t(i) for( i = 0; i < N; i++) a[ i ] = func( i ); #pragma xmp nodes n(4) #pragma xmp template t(0:n-1) #pragma xmp distribute t(block) onto n #pragma xmp align a[i] with t(i) // 4 // 0 N-1 index template // template n // a template template t 0 N-1 a[ ] node1 node2 node3 node4 0 N/4 N/2 N/4*3 N-1 7

#pragma xmp loop on t(i) for( i = 0; i < N; i++) a[ i ] = func( i ); #pragma xmp nodes n(4) #pragma xmp template t(0:n-1) #pragma xmp distribute t(block) onto n #pragma xmp align a[i] with t(i) // 4 // 0 N-1 index template // template n // a template template t node1 node2 node3 node4 0 N-1 a[ ] node1 node2 node3 node4 0 N/4 N/2 N/4*3 N-1 7

#pragma xmp loop on t(i) for( i = 0; i < N; i++) a[ i ] = func( i ); #pragma xmp nodes n(4) #pragma xmp template t(0:n-1) #pragma xmp distribute t(block) onto n #pragma xmp align a[i] with t(i) // 4 // 0 N-1 index template // template n // a template template t a[ ] node1 node2 node3 node4 0 N-1 node1 node2 node3 node4 0 N/4 N/2 N/4*3 N-1 7

グローバルビューの通信 集団通信 Reduce Broadcast, Gatherなど gmove 分散配列のための代入指示文 シャドウ 袖領域のための通信 シャドウについては論文集を参考にして下さい SWoPP2010 金沢 8

グローバルビューの通信 集団通信 Reduce Broadcast, Gatherなど gmove 分散配列のための代入指示文 シャドウ 袖領域のための通信 シャドウについては論文集を参考にして下さい SWoPP2010 金沢 8

DATA DATA DATA DATA DATA #pragma xmp loop on t(i) for(i = 0, sum=0; i < N; i++){ sum += array[i]; } #pragma xmp reduction (+:sum) 9

#pragma xmp gmove a[:] = b[:]; array[ lower : upper ] array lower upper array[:] a[10] b[10] 10

#pragma xmp gmove a[:] = b[:]; array[ lower : upper ] array lower upper array[:] a[10] b[10] 10

ローカルビュー ローカルデータとノード間通信を意識したプログラミング XMPではローカルビューとしてCo-array記法を導入し 片側通信を実現 Fortran版のXMPはCo-Array Fortranと互換 C言語では文法を拡張 #pragma xmp coarray b a[0:3] = b[3:6]:[1]; 配列の次元を拡張 ノード番号を表す ノード1が持つb[3:6]のデータを a[0:3]に代入 より柔軟な並列アルゴリズムの記述が可能 SWoPP2010 金沢 11

XMPによるNPB実装 NAS Parallel Benchmarks NPB をXMPで実装 並列化の方法 MPI版とOpenMP版におけるNPBの並列アルゴリズムを XMPで実装 対象問題 Embarrassingly Parallel EP 乱数発生 Integer Sort IS 整数ソート Conjugate Gradient CG 共役勾配法 OpenMPを参考にした実装やEPについては論文集を参考にして下さい SWoPP2010 金沢 12

7 8 4 1 2 6 5 3 0 9 2 4 7 6 13

#pragma xmp coarray key_buff2 #pragma xmp loop on t(i) for( i=0; i<num_keys; i++ ) bucket_size[key_array[i] >> shift]++; #pragma xmp loop on t(i) for( i=0; i<num_keys; i++ ) { key = key_array[i]; key_buff1[bucket_ptrs[key >> shift]++] = key; } for(i=0;i<num_procs;i++) key_buff2[a[i]:b[i]]:[i] = key_buff1[c[i]:d[i]]; 14

#pragma xmp coarray key_buff2 #pragma xmp loop on t(i) for( i=0; i<num_keys; i++ ) bucket_size[key_array[i] >> shift]++; #pragma xmp loop on t(i) for( i=0; i<num_keys; i++ ) { key = key_array[i]; key_buff1[bucket_ptrs[key >> shift]++] = key; } for(i=0;i<num_procs;i++) key_buff2[a[i]:b[i]]:[i] = key_buff1[c[i]:d[i]]; 14

for(i=0;i<num_procs;i++) key_buff2[ a[ i ] : b[ i ] ] : [ i ] = key_buff1[ c[ i ] : d[ i ] ]; a[ k ] b[ k ] c[ k ] d[ k ] 15

for(i=0;i<num_procs;i++) key_buff2[ a[ i ] : b[ i ] ] : [ i ] = key_buff1[ c[ i ] : d[ i ] ]; a[ k ] b[ k ] c[ k ] d[ k ] 15

16

Performance(Mop/s) 180 120 60 0 XMP MPI 1 2 4 8 16 Number of Node 750 500 250 0 1 2 4 8 16 XMP 10% XMP MPI 17

CG 共役勾配法 のXMP化 2次元疎行列 a[ ] CG 共役勾配法 4プロセスの例 プロセスは2次元に配置 #pragma xmp template t(0:n-1,0:n -1) #pragma xmp distribute t(block,block) on n double x[n], z[n], p[n], q[n], r[n], w[n]; 最小固有値 x[], z[], p[], q[], r[] n(1,1) n(2,1) n(1,2) n(2,2) w[] #pragma xmp align [i] with t(i,*):: x,z,p,q,r #pragma xmp align [i] with t(*,i):: w template t SWoPP2010 金沢 18

CG 共役勾配法 のXMP化 2次元疎行列 a[ ] CG 共役勾配法 最小固有値 4プロセスの例 プロセスは2次元に配置 #pragma xmp template t(0:n-1,0:n -1) #pragma xmp distribute t(block,block) on n double x[n], z[n], p[n], q[n], r[n], w[n]; x[], z[], p[], q[], r[] x[0:n/2-1] x[n/2:n-1] n(1,1) n(2,1) x[0:n/2-1] x[n/2:n-1] n(1,2) n(2,2) w[] #pragma xmp align [i] with t(i,*):: x,z,p,q,r #pragma xmp align [i] with t(*,i):: w template t SWoPP2010 金沢 19

CG 共役勾配法 のXMP化 2次元疎行列 a[ ] CG 共役勾配法 最小固有値 4プロセスの例 プロセスは2次元に配置 #pragma xmp template t(0:n-1,0:n -1) #pragma xmp distribute t(block,block) on n double x[n], z[n], p[n], q[n], r[n], w[n]; x[], z[], p[], q[], r[] w[0:n/2-1] w[0:n/2-1] n(1,1) n(2,1) w[n/2:n-1] w[n/2:n-1] n(1,2) n(2,2) w[] #pragma xmp align [i] with t(i,*):: x,z,p,q,r #pragma xmp align [i] with t(*,i):: w template t SWoPP2010 金沢 20

CG 共役勾配法 のXMP化 2次元疎行列 a[ ] CG 共役勾配法 4プロセスの例 プロセスは2次元に配置 #pragma xmp template t(0:n-1,0:n -1) #pragma xmp distribute t(block,block) on n double x[n], z[n], p[n], q[n], r[n], w[n]; #pragma xmp align [i] with t(i,*):: x,z,p,q,r #pragma xmp align [i] with t(*,i):: w n(*,1) x[], z[], p[], q[], r[] n(1,1) n(2,1) n(1,2) n(2,2) w[] n(*,2) *は重複の意味 最小固有値 SWoPP2010 金沢 template t 21

#pragma xmp loop on t(*, j) for(j = 0; j < lastrow-firstrow+1; j++) { sum = 0.0; for(k = rowstr[j]; k <= rowstr[j+1]; k++) { sum = sum + a[k]*p[colidx[k]]; } w[j] += sum; } #pragma xmp reduction(+:w) on n(*,:) #pragma xmp gmove q[:] = w[:]; p[ j ], q[ j ] with t (j, *) w[ j ] with t (*, j) 22

#pragma xmp loop on t(*, j) for(j = 0; j < lastrow-firstrow+1; j++) { sum = 0.0; for(k = rowstr[j]; k <= rowstr[j+1]; k++) { sum = sum + a[k]*p[colidx[k]]; } w[j] += sum; } #pragma xmp reduction(+:w) on n(*,:) #pragma xmp gmove q[:] = w[:]; p[ j ], q[ j ] with t (j, *) w[ j ] with t (*, j) 22

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] q[0:n/2-1] q[n/2:n-1] n(1,2) n(2,2) n(1,2) n(2,2) 23

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] q[0:n/2-1] q[n/2:n-1] n(1,2) n(2,2) n(1,2) n(2,2) 23

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] q[0:n/2-1] q[n/2:n-1] n(1,2) n(2,2) n(1,2) n(2,2) 23

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] q[0:n/2-1] q[n/2:n-1] n(1,2) n(2,2) n(1,2) n(2,2) 23

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] q[0:n/2-1] q[n/2:n-1] n(1,2) n(2,2) n(1,2) n(2,2) 23

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,2) n(2,2) n(2,1) n(1,2) n(2,2) 23

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] w[n/2:n-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(1,2) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] w[0:n/2-1] q[0:n/2-1] q[n/2:n-1] n(1,2) n(2,2) n(2,1) n(1,2) n(2,2) 23

#pragma xmp gmove q[:] = w[:]; q[] w[0:n/2-1] w[0:n/2-1] w[0:n/2-1] q[0:n/2-1] w[n/2:n-1] q[n/2:n-1] n(1,1) n(2,1) n(1,1) n(1,2) n(2,1) w[] w[n/2:n-1] w[n/2:n-1] w[0:n/2-1] q[0:n/2-1] w[n/2:n-1] q[n/2:n-1] n(1,2) n(2,2) n(2,1) n(1,2) n(2,2) 23

2400 4000 Performance(Mop/s) 1800 1200 600 0 XMP MPI 1 2 4 8 16 3000 2000 1000 0 1 2 4 8 16 Number of Node 1, 4, 16 XMP MPI 24

2400 4000 Performance(Mop/s) 1800 1200 600 0 XMP MPI 1 2 4 8 16 3000 2000 1000 0 1 2 4 8 16 Number of Node 1, 4, 16 XMP MPI 24

CGの考察 2と8プロセスの場合 縦と横の分割数が異なる 1 4 16では同じ reduction後のgmove wとqの要素数は同じ q[] n(1,1) n(2,1) n(3,1) n(4,1) w[] n(1,1) n(2,1) n(3,1) n(4,1) n(1,2) n(2,2) n(3,2) n(4,2) n(1,2) n(2,2) n(3,2) n(4,2) 2分割 4コピー 4分割 2コピー XMP版ではすべての要素をリダクションにしているのに対し MPI版は計算に必要な要素のみをリダクションしているため SWoPP2010 金沢 25

CGの考察 2と8プロセスの場合 縦と横の分割数が異なる 1 4 16では同じ reduction後のgmove wとqの要素数は同じ q[] w[] n(1,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,2) n(2,2) n(3,2) n(4,2) n(1,2) n(2,2) n(3,2) n(4,2) 2分割 4コピー 4分割 2コピー XMP版ではすべての要素をリダクションにしているのに対し MPI版は計算に必要な要素のみをリダクションしているため SWoPP2010 金沢 25

CGの考察 2と8プロセスの場合 縦と横の分割数が異なる 1 4 16では同じ reduction後のgmove wとqの要素数は同じ q[] w[] n(1,1) n(2,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,2) n(2,2) n(3,2) n(4,2) n(1,2) n(2,2) n(3,2) n(4,2) 2分割 4コピー 4分割 2コピー XMP版ではすべての要素をリダクションにしているのに対し MPI版は計算に必要な要素のみをリダクションしているため SWoPP2010 金沢 25

CGの考察 2と8プロセスの場合 縦と横の分割数が異なる 1 4 16では同じ reduction後のgmove wとqの要素数は同じ q[] n(1,2) w[] n(1,1) n(2,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,2) n(2,2) n(3,2) n(4,2) n(1,2) n(2,2) n(3,2) n(4,2) 2分割 4コピー 4分割 2コピー XMP版ではすべての要素をリダクションにしているのに対し MPI版は計算に必要な要素のみをリダクションしているため SWoPP2010 金沢 25

CGの考察 2と8プロセスの場合 縦と横の分割数が異なる 1 4 16では同じ reduction後のgmove wとqの要素数は同じ q[] n(1,2) n(2,2) w[] n(1,1) n(2,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,2) n(2,2) n(3,2) n(4,2) n(1,2) n(2,2) n(3,2) n(4,2) 2分割 4コピー 4分割 2コピー XMP版ではすべての要素をリダクションにしているのに対し MPI版は計算に必要な要素のみをリダクションしているため SWoPP2010 金沢 25

CGの考察 2と8プロセスの場合 縦と横の分割数が異なる 1 4 16では同じ reduction後のgmove wとqの要素数は同じ q[] n(1,2) n(2,2) w[] n(1,1) n(2,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,1) n(2,1) n(3,1) n(4,1) n(1,2) n(2,2) n(3,2) n(4,2) n(1,2) n(2,2) n(3,2) n(4,2) 利用されない 2分割 4コピー 4分割 2コピー XMP版ではすべての要素をリダクションにしているのに対し MPI版は計算に必要な要素のみをリダクションしているため SWoPP2010 金沢 25

まとめと今後の課題 分散メモリシステム用の新しいプログラミングモデルで あるXMPの性能評価 本発表では NPBのCGとISをXMPの実装を紹介 MPI版のNPBとの性能比較した結果 ほぼ同等の性能 今後の課題 マルチコア対応XMPの評価 ノード数とプロセス数を増やして性能評価 並列化をサポートするための プロファイリングツールの 開発 SWoPP2010 金沢 26