1.overview

Similar documents
Microsoft PowerPoint - sps14_kogi6.pptx

XACC講習会

XcalableMP入門

PowerPoint プレゼンテーション

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

XMPによる並列化実装2

XACCの概要

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

PowerPoint Presentation

nakao

HPC143

PowerPoint プレゼンテーション

HPC146

NUMAの構成

スライド 1

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

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

WinHPC ppt

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

MPI usage

Microsoft PowerPoint - KHPCSS pptx

program7app.ppt

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

MPI コミュニケータ操作

目 目 用方 用 用 方

chap2.ppt

¥Ñ¥Ã¥±¡¼¥¸ Rhpc ¤Î¾õ¶·

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

コードのチューニング

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

Microsoft PowerPoint - OpenMP入門.pptx

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

±é½¬£²¡§£Í£Ð£É½éÊâ

Microsoft PowerPoint 並列アルゴリズム04.ppt

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

01_OpenMP_osx.indd

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

44 6 MPI 4 : #LIB=-lmpich -lm 5 : LIB=-lmpi -lm 7 : mpi1: mpi1.c 8 : $(CC) -o mpi1 mpi1.c $(LIB) 9 : 10 : clean: 11 : -$(DEL) mpi1 make mpi1 1 % mpiru

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

Microsoft Word - openmp-txt.doc

Microsoft PowerPoint ppt

Microsoft PowerPoint - compsys2-06.ppt

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

120802_MPI.ppt

cp-7. 配列

Fujitsu Standard Tool

スライド 1

Gfarm/MPI-IOの 概要と使い方

演習 II 2 つの講義の演習 奇数回 : 連続系アルゴリズム 部分 偶数回 : 計算量理論 部分 連続系アルゴリズム部分は全 8 回を予定 前半 2 回 高性能計算 後半 6 回 数値計算 4 回以上の課題提出 ( プログラム + 考察レポート ) で単位

DKA ( 1) 1 n i=1 α i c n 1 = 0 ( 1) 2 n i 1 <i 2 α i1 α i2 c n 2 = 0 ( 1) 3 n i 1 <i 2 <i 3 α i1 α i2 α i3 c n 3 = 0. ( 1) n 1 n i 1 <i 2 < <i

58 7 MPI 7 : main(int argc, char *argv[]) 8 : { 9 : int num_procs, myrank; 10 : double a, b; 11 : int tag = 0; 12 : MPI_Status status; 13 : 1 MPI_Init

課題 S1 解説 C 言語編 中島研吾 東京大学情報基盤センター

演習準備 2014 年 3 月 5 日神戸大学大学院システム情報学研究科森下浩二 1 RIKEN AICS HPC Spring School /3/5

スライド 1

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

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

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

PowerPoint プレゼンテーション - 物理学情報処理演習

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

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

講義の流れ 並列プログラムの概要 通常のプログラムと並列プログラムの違い 並列プログラム作成手段と並列計算機の構造 OpenMP による並列プログラム作成 処理を複数コアに分割して並列実行する方法 MPI による並列プログラム作成 ( 午後 ) プロセス間通信による並列処理 処理の分割 + データの

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

Microsoft PowerPoint _MPI-01.pptx

about MPI

講習No.9

かし, 異なったプロセス間でデータを共有するためには, プロセス間通信や特殊な共有メモリ領域を 利用する必要がある. このためマルチプロセッサマシンの利点を最大に引き出すことができない. こ の問題はマルチスレッドを用いることで解決できる. マルチスレッドとは,1 つのプロセスの中に複 数のスレッド

スライド 1

Microsoft Word - 計算科学演習第1回3.doc

02: 変数と標準入出力

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - algo ppt [互換モード]

並列処理論2

演習準備

Java講座

Microsoft PowerPoint - 演習2:MPI初歩.pptx

PowerPoint プレゼンテーション

CUDA 連携とライブラリの活用 2

memo

115 9 MPIBNCpack 9.1 BNCpack 1CPU X = , B =

<4D F736F F F696E74202D D F95C097F D834F E F93FC96E5284D F96E291E85F8DE391E52E >

第1回 プログラミング演習3 センサーアプリケーション

Microsoft PowerPoint _MPI-03.pptx

Excel97関数編

MPI MPI MPI.NET C# MPI Version2

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

memo

memo

05-opt-system.ppt

Microsoft PowerPoint - 11.pptx

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0

<4D F736F F D20332E322E332E819C97AC91CC89F090CD82A982E78CA982E9466F E393082CC8D5C91A291CC90AB945C955D89BF5F8D8296D85F F8D F5F E646F63>

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi7.ppt

gengo1-8

Prog1_10th

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

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

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

Transcription:

村井均 ( 理研 )

2 はじめに 規模シミュレーションなどの計算を うためには クラスタのような分散メモリシステムの利 が 般的 並列プログラミングの現状 半は MPI (Message Passing Interface) を利 MPI はプログラミングコストが きい 標 性能と 産性を兼ね備えた並列プログラミング 語の開発

3 並列プログラミング 語 XcalableMP 次世代並列プログラミング 語検討委員会 / PC クラスタコンソーシアム XcalableMP 規格部会で検討中 MPI に代わる並列プログラミングモデル 標 : Performance Expressiveness Optimizability Education cost www.xcalablemp.org

4 XcalableMP の特徴 (1) Fortran/C の拡張 ( 指 ベース ) 逐次プログラムからの移 が容易 SPMD モデル 各ノード ( 並列実 の主体 ) が独 に ( 重複して ) 実 を開始する

5 XcalableMP の特徴 (2) 明 的な並列化と通信 ワークマッピング ( 並列処理 ) 通信 および同期は 集団的 な指 によって明 される チューニングが容易 2 つのプログラミングモデル グローバルビュー ローカルビュー

6 XMP の実 モデル (SPMD) 各ノードは 同 のコードを独 に ( 重複して ) 実 する 指 の箇所では 全ノードが協調して動作する ( 集団実 ) 通信 同期 ワークマッピング ( 並列処理 ) ノード 1 ノード 4 重複実 指 通信, 同期, ワークマッピング

7 メモリモデル 各ノードは のローカルメモリ上のデータ ( ローカルデータ ) のみをアクセスできる 他のノード上のデータ ( リモートデータ ) にアクセスする場合は 特殊な記法による明 的な指定が必要 通信指 coarray 分散 されないデータは 全ノードに重複して配置される

8 プログラム例 (MPI との 較 ) XMP/C プログラム int array[max]; #pragma xmp nodes p[*] #pragma xmp template t[max] #pragma xmp distribute t[block] onto p #pragma xmp align array[i] with t[i] main(){ #pragma xmp loop on t[i] reduction(+:res) for (i = 0; i < MAX; i++){ array[i] = func(i); res += array[i]; } } シンプル int array[max]; MPI プログラム main(int argc, char **argv){ MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); dx = MAX/size; llimit = rank * dx; if (rank!= (size -1)) ulimit = llimit + dx; else ulimit = MAX; temp_res = 0; for (i = llimit; i < ulimit; i++){ array[i] = func(i); temp_res += array[i]; } MPI_Allreduce(&temp_res, &res, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); } MPI_Finalize( );

9 XMP のグローバルビュー プ ログラミング ローカルビュー : 各ノードが解くべき問題を個別に す ノード 1 は問題 1 25 を解け ノード 2 は 解くべき問題全体を記述し それを N 個のノードが分担する 法を す 問題 1 100 を 4 で分担して解け 分かりやすい ( 基本的に指 を挿 するだけ ) 分担 を指定する 法 データマッピング ワークマッピング 通信 同期

10 XcalableMP 指 の記法 XMP の指 は #pragma xmp または!$xmp から始まる [C] 例 #pragma xmp align a[i] with t[i] [F]!$xmp align a(i) with t(i)

11 XMP のデータマッピング 整列 + 分散による 2 段階の処理 0 1 2 3 4 5 整列 0 1 2 3 4 5 分散 0 1 2 配列はテンプレートに整列され テンプレートはノードに分散される 6 6 7 7 3 配列 / ループ テンプレート ( 仮想的な配列 ) ノード

12 データマッピング指 (1) nodes 指 XMP プログラムの実 者である ノード のサイズと形状を宣 する データやワークを割り当てる対象 プロセッサ ( マルチコア可 ) とローカルメモリから成る [C] [F] #pragma xmp nodes p[4][4]!$xmp nodes p(4,4)

13 動的な nodes 指 実際の p のサイズは 実 時に決まる mpiexec コマンドの引数など [C] [F] #pragma xmp nodes p[*] #pragma xmp nodes p[*][4]!$xmp nodes p(*)!$xmp nodes p(4,*) 最後の次元に * を指定できる

14 データマッピング指 (2) template 指 XMP プログラムの並列処理の基準である テンプレート のサイズと形状を宣 する データやワークの整列の対象 [C] [F] #pragma xmp template t[64][64]!$xmp template t(64,64)

15 データマッピング指 (3) distribute 指 ノード集合 p に テンプレート t を分散する [C] #pragma xmp distribute t[block] onto p [F]!$xmp distribute t(block) onto p 分散形式として ブロック サイクリック ブロックサイクリック 不均等ブロックを指定できる

16 データマッピングの例 例 1: ブロック分散 #pragma xmp nodes p[4] #pragma xmp template t[20] #pragma xmp distribute t[block] onto p 例 2: サイクリック分散 #pragma xmp nodes p[4] #pragma xmp template t[20] #pragma xmp distribute t[cyclic] onto p ノード インデックス ノード インデックス P[0] 0, 1, 2, 3, 4 P[1] 5, 6, 7, 8, 9 P[2] 10, 11, 12, 13, 14 P[0] 0, 4, 8, 12, 16 P[1] 1, 5, 9, 13, 17 P[2] 2, 6, 10, 14, 18 P[3] 15, 16, 17, 18, 19 P[3] 3, 7, 11, 15, 19

17 多次元テンプレートの分散 #pragma xmp nodes p2[2][2] #pragma xmp distribute t[block][block] onto p2 P2[0][0] P2[0][1] P2[1][0] P2[1][1] #pragma xmp nodes p1[4] #pragma xmp distribute t[block][*] onto p1 P1[0] P1[1] P1[2] P1[3] * は 分散を意味する

18 データマッピング指 (4) align 指 (1) 配列 a の要素 i を テンプレート t の要素 i-1 に整列させる [C] #pragma xmp align a[i] with t[i-1] [F]!$xmp align a(i) with t(i-1) 多次元配列も整列可能 [C] [F] #pragma xmp align a[i][j] with t[i-1][j]!$xmp align a(i,j) with t(i-1,j)

19 データマッピング 整列 + 分散による 2 段階の処理 #pragma xmp nodes p[4] #pragma xmp template t[8] #pragma xmp distribute t[block] onto p float a[8]; #pragma xmp align a[i] with t[i] 0 0 0 1 1 2 3 4 5 整列 2 3 4 5 分散 1 2 6 6 7 7 3 配列 テンプレート ( 仮想的な配列 ) ノード

20 特殊な整列 縮退 #pragma xmp distribute t[block] onto p1 #pragma xmp align a[i][*] with t[i] 複製 #pragma xmp distribute t[block][block] onto p2 #pragma xmp align a[i] with t[i][*] a[0] の実体は p2[0][0] と p2[0][1] に存在する 値の 致は保証されない

21 動的な配列の整列 ポインタまたは割付け配列として宣 実際の 整列 の処理は 続く xmp_malloc または allocate において実 される [C] [F] int *a; #pragma xmp align a[i] with t[i]... a = (int *)xmp_malloc(xmp_desc_of(a), 100); integer, allocatable :: a(:)!$xmp align a(i) with t(i)... allocate (a(100))

22 ワークマッピング指 (1) loop 指 (1) ループの並列化を指 する t[i][j] を持つノードが 繰り返し i,j において a[i][j] への代 を実 する #pragma xmp loop (i,j) on t[i][j] for (i = 0; i < n; i++) for (j = 0; j < n; j++) a[i][j] =...;

23 loop 指 (2) アクセスされるデータが その繰り返しを実 するノードに割り当てられていなければならない 下の例では t[i][j] を持つノードが a[i][j] を持たなければならない そうでない場合 事前に通信を っておく #pragma xmp loop (i,j) on t[i][j] for (i = 0; i < n; i++) for (j = 0; j < n; j++) a[i][j] =...;

24 loop 指 (3) reduction 節 並列ループの終了時に 各ノードの値を 集計 する 提供している演算は +,max, min など #pragma xmp loop on t[i] reduction(+:sum) for (i = 0; i < 20; i++) sum += i; 各ノード上の sum の値を合計した値で 各ノード上の sum を更新する

25 ワークマッピング指 (2) task 指 直後の処理を 指定したノードが実 する #pragma xmp task on p[0] { func_a(); } #pragma xmp task on p[1] { func_b(); } P[0] が func_a を実 する p[1] が func_b を実 する

26 通信指 (1) shadow/reflect 指 a の上下端に幅 1 のシャドウを付加する #pragma xmp distribute t[block] onto p #pragma xmp align a[i] with t[i] #pragma xmp shadow a[1:1]... #pragma xmp reflect (a) a に対する隣接通信を実 する reflect P[0] P[1] P[2] P[3]

27 shadow/reflect 指 の例 #pragma xmp loop on t[i] for (i = 1; i < 9; i++) b[i] = a[i-1] + a[i] + a[i+1]; a P[0] P[1] 0 1 2 3 4 5 4 5 6 7 8 9 b 0 1 2 3 4 5 6 7 8 9

28 shadow/reflect 指 の例 #pragma xmp shadow a[1:1] #pragma xmp reflect (a) #pragma xmp loop on t[i] for (i = 1; i < 9; i++) b[i] = a[i-1] + a[i] + a[i+1]; a reflect P[0] P[1] 0 1 2 3 4 5 4 5 6 7 8 9 b 0 1 2 3 4 5 6 7 8 9

29 通信指 (2) gmove 指 通信を伴う任意の代 を実 する #pragma xmp gmove a[:][:] = b[:][:]; C で 部分配列 も記述できる n1 n3 n2 n4 a[block][block] n1 n2 n3 n4 b[block][*]

30 通信指 (3) bcast 指 特定のノードが 指定したデータを他のノードへブロードキャストする ( ばらまく ) #pragma xmp bcast (s) from p[0] from p[0] は省略可 barrier 指 ノードが互いに待ち合わせる ( バリア同期 ) #pragma xmp barrier

31 XcalableMP プログラムの例!$xmp nodes p(npx,npy,npz)!$xmp template (lx,ly,lz) :: t!$xmp distribute (block,block,block) onto p :: t ノード集合の宣!$xmp align (ix,iy,iz) with t(ix,iy,iz) ::!$xmp& sr, se, sm, sp, sn, sl,...!$xmp shadow (1,1,1) ::!$xmp& sr, se, sm, sp, sn, sl,... lx = 1024!$xmp reflect (sr, sm, sp, se, sn, sl)!$xmp loop on t(ix,iy,iz) do iz = 1, lz-1 do iy = 1, ly do ix = 1, lx wu0 = sm(ix,iy,iz ) / sr(ix,iy,iz ) wu1 = sm(ix,iy,iz+1) / sr(ix,iy,iz+1) wv0 = sn(ix,iy,iz ) / sr(ix,iy,iz )... テンプレートの宣 と分散の指定 整列の指定 シャドウの指定 重複実 される 隣接通信の指定 ループの並列化の指定

32 XMP のローカルビュー プロ グラミング 各ノードが解くべき問題を個別に す ノード 1 は問題 1 25 を解け ノード 2 は 由度が いが やや難しい ローカルビューのための機能として Fortran 2008 から導 した coarray をサポート

33 coarray 機能 coarray として宣 されたデータは 代 の形式で他のノードからもアクセスできる ノード 2 が持つ b[3:3] のデータを a[0:3] に代 float b[100]:[*]; if (xmpc_this_image() == 0) a[0:3] = b[3:3]:[1]; 配列 b は coarray であると宣 コロンの後の [] はノード番号を表す base length 0 からの 3 要素