演習問題の構成 ディレクトリ構成 MPI/ --practice_1 演習問題 1 --practice_2 演習問題 2 --practice_3 演習問題 3 --practice_4 演習問題 4 --practice_5 演習問題 5 --practice_6 演習問題 6 --sample

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

Microsoft PowerPoint - KHPCSS pptx

演習準備

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

Microsoft PowerPoint _MPI-01.pptx

Microsoft PowerPoint _MPI-03.pptx

untitled

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

並列計算導入.pptx

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

PowerPoint プレゼンテーション

NUMAの構成

(Microsoft PowerPoint \211\211\217K3_4\201i\216R\226{_\211\272\215\342\201j.ppt [\214\335\212\267\203\202\201[\203h])

コードのチューニング

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

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

Page 2 本資料は, 東北大学サイバーサイエンスセンターと NEC の共同により作成され, 大阪大学サイバーメディアセンターの環境で実行確認を行い, 修正を加えたものです. 無断転載等は, ご遠慮下さい.

スライド 1

about MPI

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

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

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

H28 年度 SX-ACE 高速化技法の基礎 ( 演習用資料 ) 2016 年 6 月 16 日大阪大学サイバーメディアセンター日本電気株式会社

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

untitled

120802_MPI.ppt

スライド 1

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

PowerPoint プレゼンテーション

コードのチューニング

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

Fujitsu Standard Tool

演習1: 演習準備

目次 LS-DYNA 利用の手引き 1 1. はじめに 利用できるバージョン 概要 1 2. TSUBAME での利用方法 使用可能な LS-DYNA の実行 4 (1) TSUBAMEにログイン 4 (2) バージョンの切り替え 4 (3) インタラ

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

演習1

Microsoft PowerPoint - S1-ref-F.ppt [互換モード]

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

(Basic Theory of Information Processing) Fortran Fortan Fortan Fortan 1

サイバーメディアセンター 大規模計算機システムの利用

nakao

Sae x Sae x 1: 1. {x (i) 0 0 }N i=1 (x (i) 0 0 p(x 0) ) 2. = 1,, T a d (a) i (i = 1,, N) I, II I. v (i) II. x (i) 1 = f (x (i) 1 1, v(i) (b) i (i = 1,

memo

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

2 2.1 Mac OS CPU Mac OS tar zxf zpares_0.9.6.tar.gz cd zpares_0.9.6 Mac Makefile Mekefile.inc cp Makefile.inc/make.inc.gfortran.seq.macosx make

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

openmp1_Yaguchi_version_170530

Microsoft PowerPoint - 講義10改.pptx

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

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

演習2

コードのチューニング

3. :, c, ν. 4. Burgers : u t + c u x = ν 2 u x 2, (3), ν. 5. : u t + u u x = ν 2 u x 2, (4), c. 2 u t 2 = c2 2 u x 2, (5) (1) (4), (1 Navier Stokes,.,

Microsoft Word - appli_SMASH_tutorial_2.docx

memo

Fortran90/95 2. (p 74) f g h x y z f x h x = f x + g x h y = f y + g y h z = f z + g z f x f y f y f h = f + g Fortran 1 3 a b c c(1) = a(1) + b(1) c(

( ) 1 Windows HTML ( ) ( ) ( ) WWW 10 ( )

3. :, c, ν. 4. Burgers : t + c x = ν 2 u x 2, (3), ν. 5. : t + u x = ν 2 u x 2, (4), c. 2 u t 2 = c2 2 u x 2, (5) (1) (4), (1 Navier Stokes,., ν. t +

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

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

スクールCOBOL2002

Microsoft PowerPoint ppt

H26 年度 スーパーコンピュータの高速化技法入門 演習用資料 2015 年 1 月 21 日大阪大学サイバーメディアセンター 日本電気株式会社

< 中略 > 24 0 NNE 次に 指定した日時の時間降水量と気温を 観測地点の一覧表に載っているすべての地点について出力するプログラムを作成してみます 観測地点の一覧表は index.txt というファイルで与えられています このファイルを読みこむためのサブルーチンが AMD

Microsoft Word _001b_hecmw_PC_cluster_201_howtodevelop.doc

untitled

2

cp-7. 配列

gengo1-8

Reedbush-Uアカウントの発行

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

Microsoft PowerPoint - 第10回講義(2015年12月22日)-1 .pptx

memo

pdf軽_台紙まとめ県民

サイバーメディアセンター 大規模計算機システムの利用

スライド 1

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

MPI usage

GeoFEM開発の経験から

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

2 /83

PowerPoint プレゼンテーション

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

. (.8.). t + t m ü(t + t) + c u(t + t) + k u(t + t) = f(t + t) () m ü f. () c u k u t + t u Taylor t 3 u(t + t) = u(t) + t! u(t) + ( t)! = u(t) + t u(

ポインタ変数

EPSON GT-7400U スタートアップガイド

Microsoft Word - 資料 docx

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

Microsoft PowerPoint mod.ppt

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

11042 計算機言語7回目 サポートページ:

OpenMPプログラミング

並列計算プログラミング超入門

PowerPoint プレゼンテーション

1.overview

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

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

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

プラズマ核融合学会誌5月号【81-5】/内外情報_ソフト【注:欧フォント特殊!】

Transcription:

H26 年度 MPI プログラミング入門 ( 演習補足資料 ) 2014 年 6 月 24 日 大阪大学サイバーメディアセンター 日本電気株式会社

演習問題の構成 ディレクトリ構成 MPI/ --practice_1 演習問題 1 --practice_2 演習問題 2 --practice_3 演習問題 3 --practice_4 演習問題 4 --practice_5 演習問題 5 --practice_6 演習問題 6 --sample テキスト内の samplex.f として掲載しているプログラム -- etc その他, テキスト内のetcX.f として掲載しているプログラム Page 2

3. 演習問題 1-1 (practice_1) P15 のプログラム (sample2.f) を practice1.f としてコピーし, コンパイル 実行してください ファイルのコピー % cd MPI/practice_1 % cp../sample/sample2.f practice1.f コンパイル方法 % sxmpif90 -cfsx9 practice1.f Page 3

3. 演習問題 1-1 (practice_1) つづき 実行スクリプトの確認 % cat run.sh #!/bin/csh #PBS -q DBG9 #PBS -l cpunum_job=4,memsz_job=5gb,elapstim_req=0:05:00,cputim_job=00:05:00 #PBS -T mpisx #PBS -b 1 setenv MPIPROGINF DETAIL cd $PBS_O_WORKDIR mpirun -np 4./a.out ジョブの投入 ( 実行 ) % qsub run.sh 実行結果の確認 % cat p1-practice.oxxxx (XXXX はシステムにより付与されるジョブ ID) Page 4

3. 演習問題 1-2 (practice_1) 演習問題 1-1 で使った MPI プログラム Hell oworld の結果をランク 0の みが出力するように書き換えてください ファイルのコピー % cp practice1.f practice1-2.f プログラムの編集 % vi practice1-2.f コンパイル % sxmpif90 -cfsx9 practice1-2.f 実行 % qsub run.sh Page 5

4. 演習問題 2(practice_2) MPI プログラミング入門テキスト P18 の1から 10 0の総和を求める逐次プログラムを 4 分割して MPI 並列で実行し, 各部分和を各ランクから出力してください. ヒント : プログラムの流れは下記のとおり MPI の初期化処理 プロセス数と自プロセスのランク番号の取得 分割時の始点と終点を求める 部分和に初期値 (=0) を与える部分和を求めるループの実行 部分和の出力 MPI の終了化処理 Page 6

4. 演習問題 2(practice_2) つづき ディレクトリの移動 % cd MPI/practice_2 プログラムの編集 逐次プログラムはディレクトリ practice_2/ にあります. % vi practice2.f コンパイル % sxmpif90 -cfsx9 practice2.f 実行 % qsub run.sh Page 7

5. 演習問題 3(practice_3) 演習問題 2 のプログラムの各ランクの部分和をランク 0 に集めて, 総和を計算し出力してください ヒント : 転送処理は以下 ランク 1,2,3(0 以外 ) ランク 0 call MPI_SEND(sum,1,MPI_INTEGER,0, & itag,mpi_comm_world,ierr) call MPI_RECV(sum2,1,MPI_INTEGER,1, & itag,mpi_comm_world,status,ierr) call MPI_RECV(sum2,1,MPI_INTEGER,2, & itag,mpi_comm_world,status,ierr) call MPI_RECV(sum2,1,MPI_INTEGER,3, & itag,mpi_comm_world,status,ierr) sum で受信するとランク 0 の部分和が上書きされてしまう Page 8

5. 演習問題 3(practice_3) つづき ディレクトリの移動 % cd MPI/practice_3 プログラムの編集 演習問題 2 の回答例を practice3.f として用意しています % vi practice3.f コンパイル % sxmpif90 -cfsx9 practice3.f 実行 % qsub run.sh Page 9

6. 演習問題 4(practice_4) 演習問題 3 のプログラムで 各ランクの部分和を MPI_REDUCE を使用してランク 0 に集計して ランク 0 から結果を出力してください ディレクトリの移動 % cd MPI/practice_4 プログラムの編集 演習問題 3 の回答例を practice4.f として用意しています % vi practice4.f コンパイル % sxmpif90 -cfsx9 practice4.f 実行 % qsub run.sh Page 10

8. 演習問題 5(practice_5) P58 の etc4.f を P56 の 代表プロセス入力 + メモリ削減 の例のように, 各プロセスに必要な領域だけ確保するように修正してください. ヒント : 1 2 3 4 senddata,recvdataを動的に確保するように allocatable 宣言する各プロセスが確保する領域 (ist,ied) を求める各プロセスで必要な senddataの領域を確保する (allocate) ランク 0でrecvdataの領域を確保する (allocate) Page 11

8. 演習問題 5(practice_5) つづき ディレクトリの移動 % cd MPI/practice_5 プログラムの編集 practice5.f を用意しています % vi practice5.f コンパイル % sxmpif90 -cfsx9 practice5.f 実行 % qsub run.sh Page 12

9. 演習問題 6(practice_6) 行列積プログラムを MPI で並列化してください implicit real(8)(a-h,o-z) parameter ( n=12000 ) real(8) a(n,n),b(n,n),c(n,n) real(4) etime,cp1(2),cp2(2),t1,t2,t3 do j = 1,n do i = 1,n a(i,j) = 0.0d0 b(i,j) = n+1-max(i,j) c(i,j) = n+1-max(i,j) enddo enddo write(6,50) ' Matrix Size = ',n 50 format(1x,a,i5) t1=etime(cp1) do j=1,n do k=1,n do i=1,n a(i,j)=a(i,j)+b(i,k)*c(k,j) end do end do end do t2=etime(cp2) t3=cp2(1)-cp1(1) write(6,60) ' Execution Time = ',t2,' sec',' A(n,n) = ',a(n,n) 60 format(1x,a,f10.3,a,1x,a,d24.15) stop end 左記に行列積を行うプログラムを MPI 化して 4 プロセスで実行してください. 出力はプロセス 0 で行ってください. Page 13

9. 演習問題 6(practice_6) つづき ヒント : プログラムの流れは下記のとおり MPI の初期化処理 プロセス数と自プロセスのランク番号の取得 分割時の始点と終点を求める 解を格納する配列 a の初期化行列 b と c の値の設定 各プロセスが担当する範囲の行列積を計算 解を格納する配列 a をランク 0 に集める 時間計測は MPI_Wtime を使用する 1 時間を格納する変数は rea l*8 で定義する real*8t1,t2 2 測定する区間の始まりと終わりの時間を計測する callmpi_barrier(mpi_comm_world,ierr) t1=mpi_wtime() [ 測定区間 ] callmpi_barrier(mpi_comm_world,ierr) t2=mpi_wtime() 3t2-t1 が計測区間の時間となる ランク 0 が結果を出力 MPI の終了化処理 Page 14

9. 演習問題 6(practice_6) つづき データの転送方法 ( 行列 - ベクトル積 ) プロセス 0 はプロセス 1,2,3 から計算結果を格納した配列 x を受け取る ( 下図 ) プロセス 0 プロセス 1 プロセス 2 プロセス 3 MPI_GATHER を使用して 各ランクに分散したデータを集める詳細は付録 1.3.8 Page 15

9. 演習問題 6(practice_6) つづき ディレクトリの移動 % cd MPI/practice_6 プログラムの編集 MPI プログラム入門テキスト P80 の sample6.f を practice6.f として用意しています % vi practice6.f コンパイル % sxmpif90 -cfsx9 practice6.f 実行 % qsub run.sh Page 16

演習問題解答例 Page 17

3. 演習問題 1-2(practice_1) 解答例 prog ramexample 1 incl ude'mpif. h' inte gerierr,myran k callmpi_init (ierr) callmpi_comm_rank (MPI_COMM_WORL D,myrank,ier r) if(m yrank.eq.0) + rint*, Hello p World My nk=,myran k, (,nproc s, processes) callmpi_finalize (ier) stop end %sxmpif90 practice1.f %qsub run.sh %cat p1-practice.oxxxx Hello World 0 Page 18

Page 19 progr amexam ple2 inclu de 'mpif.h' integ erierr,myra nk,npro cs,is t,ied param eter(n= 1000) integ er su m call MPI_INI T(ierr) call MPI_COM M_SIZ E(MPI_C OMM_W ORLD,np rocs, ier) call MPI_COM M_RAN K(MPI_C OMM_W ORLD,my rank, ier) ist=(n-1)/n procs +1)*myr ank+1 ied=(n-1)/n procs +1)*(my rank+ 1) sum=0 doi=ist,ie d sum=sum+ i enddo write (6,6000 )myrank,su m 6000 forma t("tota l of Rank:", i2,i1 0) call MPI_FIN ALIZE (ierr) stop end 4. 演習問題 2(practice_2) 解答例

5. 演習問題 3(practice_3) 解答例 program example3 include'mpif.h' integerierr,myrank,nprocs,ist,ied integer status(mpi_status_size) parameter(n=100) integer sum,sum2 call MPI_INIT(ier) call MPI_COMM_SIZE(MPI_COM_WORLD,nprocs,ierr) call MPI_COMM_RANK(MPI_COM_WORLD,myrank,ierr) ist=((n-1)/nprocs+1)*myrank+1 ied=((n-1)/nprocs+1)*(myrank+1) sum=0 doi=ist,ied sum=sum+i enddo Page 20

5. 演習問題 3(practice_3) 解答例 ( つづき ) itag=1 if(myr ank.ne.0) n the callmpi_send(sum,1,mpi_intege R,0, & itag,mpi_comm_wo RLD,ier r) else callmpi_recv(sum 2,1,MPI_INTEG ER,1, & itag,mpi_comm_wo RLD,status,ie rr) sum= sum+sum 2 callmpi_recv(sum 2,1,MPI_INTEG ER,2, & itag,mpi_comm_wo RLD,status,ie rr) sum= sum+sum 2 callmpi_recv(sum 2,1,MPI_INTEG ER,3, & itag,mpi_comm_wo RLD,status,ie rr) sum= sum+sum 2 writ e(6,6000) m su 6000 at("total form = ",i10 Sum ) endi f call PI_FINALIZE M (ierr) stop end Page 21

6. 演習問題 4(practice_4) 解答例 programexample4 include'mpif.h' integerierr,myrank,nprocs,ist,ied parameter(n=100) integer sum,sum2 call MPI_INIT(ier) call MPI_COMM_SIZE(MPI_COM_WORLD,nprocs,ierr) call MPI_COMM_RANK(MPI_COM_WORLD,myrank,ierr) ist=((n-1)/nprocs+1)*myrank+1 ied=((n-1)/nprocs+1)*(myrank+1) sum=0 doi=ist,ied sum=sum+i enddo Page 22

6. 演習問題 4(practice_4) 解答例 ( つづき ) callmpi_reduce(sum,sum2,1,mpi_integer,mpi_sum,0, & MPI_COMM_WORLD,ierr) if(myrank.eq.0) write(6,600) sum2 600format("Total Sum = ",i10) call MPI_FINALIZE(ier) stop end MPI_REDUCE では送信するデータと受信するデータの領域に重なりがあってはならない.sum と sum2 に分けて使用. Page 23

8. 演習問題 5(practice_5) 解答例 Page 24 inclu de 'mpif.h' integ er,para meter::numdat=100 integ er,allo catab le::sendda ta(:),recvda ta(:) call MPI_INI T(ierr) call MPI_COM M_RAN K(MPI_C OMM_W ORLD,my rank, ier) call MPI_COM M_SIZ E(MPI_C OMM_W ORLD,np rocs, ier) ist=((numd at-1)/nprocs +1)*m yrank+ 1 ied=((numd at-1)/nprocs +1)*( myrank+ 1) alloc ate(senddata(ist:ie d)) if(my rank.eq.0) allocate (recv data(numdat)) icoun t=(numd at-1)/nprocs +1 doi=1,icoun t senddata(icount*myrank +i)=icount*myrank +i enddo

8. 演習問題 5(practice_5) 解答例 ( つづき ) callmpi_gat HER(senddat a(icou nt*myra nk+1), & icount,m PI_IN TEGER,r ecvda ta, & count,m i PI_IN TEGER,0,MPI_ COMM_WO RLD, & ierr) if(my rank.eq.0) hen t open(60,fi le='f ort.60' ) write(60,' (10I8 )')recvdata endif call MPI_FIN ALIZE (ierr) stop end Page 25

9. 演習問題 6(practice_6) 解答例 programexample6 implicit real(8)(a-h,o-z) include'mpif.h' integerierr,myrank,nprocs,ist,ied parameter(n=12000) real(8) a(n,n),b(n,n),c(n,n) real(8) t1,t2 call MPI_INIT(ier) call MPI_COMM_SIZE(MPI_COM_WORLD,nprocs,ierr) call MPI_COMM_RANK(MPI_COM_WORLD,myrank,ierr) ist=((n-1)/nprocs+1)*myrank+1 ied=((n-1)/nprocs+1)*(myrank+1) n2=n/nprocs Page 26

9. 演習問題 6(practice_6) 解答例 ( つづき ) doj =1,n doi= 1,n a(i,j)= 0.0d0 b(i,j)= n+1-max(i,j) c(i,j)= n+1-max(i,j) enddo enddo if(myrank.eq.0) then write(6,50)' Matrix Size = ',n endif 50format(1x,a,i5) Page 27

9. 演習問題 6(practice_6) 解答例 ( つづき ) Page 28 call PI_BARRIER M (MPI_COMM_WORLD, ier) t1=mpi _WTIM E() do =ist,ie j d do =1,n k doi=1,n a(i,j)=a(i,j)+b(i,k)*c(k,j) end do endo end o d call PI_GATHER(a(1 M,ist),n*n2,MP I_REAL8,d,n*n 2 & _REAL8,0,MPI_,MPI COMM_WORLD, ierr) callmpi_barrier (MPI_COMM_WORLD, ier) t2=mpi _WTIME( ) if(myr ank.eq.0) n the write( 6,60) ' tion Execu Time,t2-t1,' = ',' sec' A(n,n) =',d(n,n) endi f 60 format (1x,a,f10.3,a,1x,a,d24.15 ) call PI_FINALIZE M (ierr) stop end