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

Similar documents
para02-2.dvi

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

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

untitled

演習準備

MPI usage

Microsoft PowerPoint - KHPCSS pptx

Microsoft PowerPoint _MPI-03.pptx

WinHPC ppt

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 _MPI-01.pptx

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

コードのチューニング

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

PowerPoint プレゼンテーション

目 目 用方 用 用 方

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

120802_MPI.ppt

I I / 47

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

MPI MPI MPI.NET C# MPI Version2

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

NUMAの構成

コードのチューニング

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,

スライド 1

Microsoft PowerPoint MPI.v...O...~...O.e.L.X.g(...Q..)

スライド 1

untitled

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

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

演習1: 演習準備

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

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

nakao

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

smpp_resume.dvi

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

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

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

joho07-1.ppt

chap2.ppt

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

I

XcalableMP入門

スライド 1

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

XMPによる並列化実装2

スライド 1

ex01.dvi

XACC講習会

1.ppt

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

ex01.dvi

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

ÊÂÎó·×»»¤È¤Ï/OpenMP¤Î½éÊâ¡Ê£±¡Ë


86

openmp1_Yaguchi_version_170530

PowerPoint プレゼンテーション

C言語によるアルゴリズムとデータ構造

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

double float

A/B (2018/06/08) Ver kurino/2018/soft/soft.html A/B

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

Platypus-QM β ( )

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

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

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

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

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

Cプログラミング - 第8回 構造体と再帰

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

I J

内容に関するご質問は まで お願いします [Oakforest-PACS(OFP) 編 ] 第 85 回お試しアカウント付き並列プログラミング講習会 ライブラリ利用 : 科学技術計算の効率化入門 スパコンへのログイン テストプログラム起動 東京大学情報基盤セ

Fundamental MPI 1 概要 MPI とは MPI の基礎 :Hello World 全体データと局所データタ グループ通信 (Collective Communication) 1 対 1 通信 (Point-to-Point Communication)

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

£Ã¥×¥í¥°¥é¥ß¥ó¥°(2018) - Âè11²ó – ½ÉÂꣲ¤Î²òÀ⡤±é½¬£² –

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

1.overview

Excel97関数編

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

エラー処理・分割コンパイル・コマンドライン引数

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

Microsoft PowerPoint - MPIprog-F [互換モード]

超初心者用

08 p Boltzmann I P ( ) principle of equal probability P ( ) g ( )g ( 0 ) (4 89) (4 88) eq II 0 g ( 0 ) 0 eq Taylor eq (4 90) g P ( ) g ( ) g ( 0

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

01_OpenMP_osx.indd

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

86 8 MPIBNCpack 15 : int n, myid, numprocs, i; 16 : double pi, start_x, end_x; 17 : double startwtime = 0.0, endwtime; 18 : int namelen; 19 : char pro

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

Microsoft PowerPoint - MPIprog-C [互換モード]

MPI 超 入門 (FORTRAN 編 ) 東京大学情報基盤センター C 言語編は以下 /ohshima/seminars/t2k201111/ (MPI による並列アプリケーション開発入門 2)

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

第5回お試しアカウント付き並列プログラミング講習会

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

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

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:

‚æ4›ñ

Transcription:

2012 8 7 1 / 52

MPI Hello World I ( ) Hello World II ( ) I ( ) II ( ) ( sendrecv) π ( ) MPI fortran C wget http://www.na.scitec.kobe-u.ac.jp/ yaguchi/riken2012/enshu2.zip unzip enshu2.zip 2 / 52

FORTRAN 3 / 52

MPI program main use mpi mpif.h i m p l i c i t none integer : : nprocs, myrank, i e r r c a l l m p i i n i t ( i e r r ) MPI c a l l mpi comm size (MPI COMM WORLD, nprocs, i e r r ) c a l l mpi comm rank (MPI COMM WORLD, myrank, i e r r ) c a l l m p i f i n a l i z e ( i e r r ) MPI end program main myrank fortran/template.f90 4 / 52

mpi init(ierr) MPI mpi comm size(mpi COMM WORLD,nprocs,ierr) nprocs MPI COMM WORLD MPI COMM WORLD mpi comm rank(mpi COMM WORLD,myrank,ierr) myrank MPI COMM WORLD mpi finalize(ierr) MPI 5 / 52

Hello World! hello world from hello world myrank hello world from 0 hello world from 2 hello world from 3 hello world from 1 mpifrtpx hello. f90 pjsub job. sh./a.out 6 / 52

Technical Computing Suite 1 2 3 4. / a. out 7 / 52

#!/bin/sh #PJM -L rscgrp=school #PJM -L node=8 #PJM -L elapse=3:00 #PJM -j school = mpiexec n 4. / a. out fortran/job.sh 8 / 52

pjsub p j s t a t pjdel Hello World pjsub job. sh [INFO] PJM 0000 pjsub Job 1057 submitted. 1057 job.sh.oxxxx XXXX hello world 9 / 52

mpi send(buff,count,datatype,dest,tag,comm,ierr) buff: count: datatype: MPI CHARACTER, MPI INTEGER, MPI DOUBLE PRECISION dest: tag: 0 comm: MPI COMM WORLD ierr: 10 / 52

mpi recv(buff,count,datatype,source,tag,comm,status,ierr) buff: count: datatype: MPI CHARACTER, MPI INTEGER, MPI DOUBLE PRECISION source: tag: comm: MPI COMM WORLD status: MPI STATUS SIZE. ierr: 11 / 52

Hello World (Part II) 0 0 hello world from 16 myrank hello world from 2 hello world from 3 hello world from 1 12 / 52

mpi wtime() double precision mpi barrier c a l l mpi barrier (MPI COMM WORLD, i e r r ) time0 = mpi wtime ( ) c a l l mpi barrier (MPI COMM WORLD, i e r r ) time1 = mpi wtime ( ) time1-time0 0 mpi barrier(comm,ierr) comm 13 / 52

mpi send 0 0 mpi wtime 1, 2, 4 n n p i [(i n)/p + 1, ((i + 1) n)/p] 14 / 52

program main use mpi i m p l i c i t none integer : : i, nprocs, myrank, i e r r integer, parameter : : n=10000 double precision : : v ( n ), w( n ) double precision : : res c a l l m p i i n i t ( i e r r ) c a l l mpi comm size (MPI COMM WORLD, nprocs, i e r r ) c a l l mpi comm rank (MPI COMM WORLD, myrank, i e r r ) do i=1,n v(i) = dsin(i*0.1d0) w(i) = dcos(i*0.1d0) end do res = 0.0d0 do i=1,n res = res + v(i)*w(i) end do p r i n t, res c a l l m p i f i n a l i z e ( i e r r ) end program main fortran/innerproduct.f90 15 / 52

reduction mpi reduce(sendbuff, recvbuff, count, datatype, op, root, comm, ierr) sendbuff: recvbuff: count: datatype: MPI DOUBLE PRECISION op: MPI SUM, MPI PROD, MPI MAX, MPI MIN root: comm: ierr: 16 / 52

allreduce mpi allreduce(sendbuff, recvbuff, count, datatype, op, comm, ierr) mpi reduce sendbuff: recvbuff: count: datatype: MPI DOUBLE PRECISION op: MPI SUM, MPI PROD, MPI MAX, MPI MIN root: ( ) comm: ierr: 17 / 52

broadcast mpi bcast(buff, count, datatype, root, comm, ierr) root buff buff buff: root count: datatype: MPI DOUBLE PRECISION root: comm: ierr: 18 / 52

mpi reduce 0 mpi bcast 0 mpi allreduce 19 / 52

send/recv mpi isend(buff,count,datatype,dest,tag,comm,request,ierr) mpi send mpi wait/mpi waitall buff: count: datatype: MPI CHARACTER, MPI INTEGER, MPI DOUBLE PRECISION dest: tag: comm: MPI COMM WORLD request: ierr: 20 / 52

mpi irecv(buff,count,datatype,source,tag,comm,request,ierr) mpi isend mpi wait/mpi waitall buff: count: datatype: MPI CHARACTER, MPI INTEGER, MPI DOUBLE PRECISION source: tag: comm: MPI COMM WORLD request: ierr: 21 / 52

mpi wait(request, status, ierr) isend/irecv request: status: isend ierr: mpi waitall(count, request, status, ierr) isend/irecv count: request: status: isend (MPI STATUS SIZE, ). ierr: 22 / 52

mpi sendrecv(sendbuff, sendcount, sendtype, dest, sendtag, recvbuff, recvcount, recvtype, source, recvtag, comm, status, ierr) sendbuff: sendcount: sendtype: MPI DOUBLE PRECISION dest: source sendtag: recvbuff: recvcount: recvtype: MPI DOUBLE PRECISION source: dest recvtag: comm: status: ierr: 23 / 52

a isend irecv, wait, waitall a sendrecv a hint: 0 1 1-myrank 24 / 52

program main use mpi i m p l i c i t none integer : : i, nprocs, myrank, i e r r integer, parameter : : n=10 integer : : a ( n ) c a l l m p i i n i t ( i e r r ) c a l l mpi comm size (MPI COMM WORLD, nprocs, i e r r ) c a l l mpi comm rank (MPI COMM WORLD, myrank, i e r r ) do i =1,n a ( i ) = i + myrank 10 end do do i =1,n p r i n t, myrank, i, a ( i ) end do c a l l m p i f i n a l i z e ( i e r r ) end program main fortran/swap.f90 25 / 52

π MPI Init 26 / 52

program pi i m p l i c i t none integer, parameter : : n = 1000000 integer : : i double precision : : x, dx, p dx = 1.0d0 / dble ( n ) p = 0.0d0 do i = 1,n x = dble ( i ) dx p = p + 4.0d0 / ( 1. 0 d0 + x 2) dx end do p r i n t, p end program fortran/pi.f90 27 / 52

C 28 / 52

MPI #include mpi. h i n t main ( i n t argc, char argv ) { i n t nprocs, myrank ; M P I I n i t (&argc,&argv ) ; MPI Comm size (MPI COMM WORLD,&nprocs ) ; MPI Comm rank (MPI COMM WORLD,&myrank ) ; mpi.h MPI MPI Finalize ( ) ; return 0; } MPI myrank c/template.c 29 / 52

MPI Init(&argc, &argv) MPI MPI Comm size(mpi COMM WORLD, &nprocs) nprocs MPI COMM WORLD MPI COMM WORLD MPI Comm rank(mpi COMM WORLD, &myrank) myrank MPI COMM WORLD MPI Finalize() MPI 30 / 52

Hello World! hello world from hello world myrank hello world from 0 hello world from 2 hello world from 3 hello world from 1 mpifccpx hello. c pjsub job. sh./a.out 31 / 52

Technical Computing Suite 1 2 3 4. / a. out 32 / 52

#!/bin/sh #PJM -L rscgrp=school #PJM -L node=8 #PJM -L elapse=3:00 #PJM -j school = mpiexec n 4. / a. out fortran/job.sh 33 / 52

pjsub p j s t a t pjdel Hello World pjsub job. sh [INFO] PJM 0000 pjsub Job 1057 submitted. 1057 job.sh.oxxxx XXXX hello world 34 / 52

int MPI Send(void * buff, int count, MPI Datatype datatype, int dest, int tag, MPI Comm comm) buff: count: datatype: MPI CHAR, MPI INT, MPI DOUBLE dest: tag: 0 comm: MPI COMM WORLD 35 / 52

int MPI Recv(void *buff, int count, MPI Datatype datatype, int source, int tag, MPI Comm comm, MPI Status *status) buff: count: datatype: MPI CHAR, MPI INT, MPI DOUBLE source: tag: comm: MPI COMM WORLD status: 36 / 52

Hello World (Part II) 0 0 hello world from 16 myrank hello world from 2 hello world from 3 hello world from 1 #include string. h char s t r [ 1 7 ] ; strcpy ( str, hello world from ) ; strcpy ( str, ) ; 37 / 52

double MPI Wtime() double MPI Barrier MPI Barrier (MPI COMM WORLD) time0 = MPI Wtime ( ) MPI Barrier (MPI COMM WORLD) time1 = MPI Wtime ( ) time1-time0 0 int MPI Barrier(comm) comm 38 / 52

MPI Send 0 0 MPI Wtime 1, 2, 4 n n p i [(i n)/p, ((i + 1) n)/p 1] 39 / 52

#include mpi. h #include stdio. h #include math. h i n t main ( i n t argc, char argv ) { i n t i, nprocs, myrank ; const i n t n=10000; double v [ n ], w[ n ] ; double res ; M P I I n i t (&argc,&argv ) ; MPI Comm size (MPI COMM WORLD,&nprocs ) ; MPI Comm rank (MPI COMM WORLD,&myrank ) ; for(i=0;i n;i++){ v[i] = sin(i*0.1); w[i] = cos(i*0.1); } res = 0.0; for(i=0;i n;i++){ res = res + v[i]*w[i]; } p r i n t f ( %f \n, res ) ; MPI Finalize ( ) ; return 0; } c/innerproduct.c 40 / 52

reduction int MPI Reduce(void *sendbuff, void *recvbuff, int count, MPI Datatype datatype, MPI Op op, int root, MPI Comm comm) sendbuff: recvbuff: count: datatype: MPI DOUBLE op: MPI SUM, MPI PROD, MPI MAX, MPI MIN root: comm: 41 / 52

allreduce int MPI Allreduce (void *sendbuff, void *recvbuff, int count, MPI Datatype datatype, MPI Op op, MPI Comm comm) mpi reduce sendbuff: recvbuff: count: datatype: MPI DOUBLE op: MPI SUM, MPI PROD, MPI MAX, MPI MIN root: ( ) comm: 42 / 52

broadcast int MPI Bcast( void *buff, int count, MPI Datatype datatype, int root, MPI Comm comm ) root buff buff buff: root count: datatype: MPI DOUBLE root: comm: 43 / 52

MPI Reduce 0 MPI Bcast 0 MPI Allreduce 44 / 52

Send/Recv int MPI Isend(void *buff, int count, MPI Datatype datatype, int dest, int tag, MPI Comm comm, MPI Request *request) MPI Send MPI Wait/MPI Waitall buff: count: datatype: MPI DOUBLE dest: tag: comm: MPI COMM WORLD request: 45 / 52

int MPI Irecv(void *buff, int count, MPI Datatype datatype, int source, int tag, MPI Comm comm, MPI Request *request) MPI Isend MPI Wait/MPI Waitall buff: count: datatype: MPI DOUBLE source: tag: comm: MPI COMM WORLD request: 46 / 52

int MPI Wait(MPI Request *request, MPI Status *status) isend/irecv request: status: isend int MPI Waitall(int count, MPI Request request[], MPI Status status[]) isend/irecv count: request: status: isend. 47 / 52

int MPI Sendrecv(void *sendbuff, int sendcount, MPI Datatype sendtype, int dest, int sendtag, void *recvbuff, int recvcount, MPI Datatype recvtype, int source, int recvtag, MPI Comm comm, MPI Status *status) sendbuff: sendcount: sendtype: MPI DOUBLE dest: source sendtag: recvbuff: recvcount: recvtype: MPI DOUBLE source: dest recvtag: comm: status: 48 / 52

a Isend Irecv, Wait, Waitall a Sendrecv a hint: 0 1 1-myrank 49 / 52

#include mpi. h #include stdio. h # include math. h i n t main ( i n t argc, char argv ) { i n t i, nprocs, myrank ; const i n t n=10; i n t a [ n ] ; M P I I n i t (&argc,& argv ) ; MPI Comm size (MPI COMM WORLD,&nprocs ) ; MPI Comm rank (MPI COMM WORLD,&myrank ) ; for ( i =0; i <n ; i ++){ a [ i ] = i + myrank 10; } for ( i =0; i <n ; i ++){ p r i n t f ( %d, %d, %d \n, myrank, i, a [ i ] ) ; } MPI Finalize ( ) ; return 0; } c/swap.c 50 / 52

π MPI Init 51 / 52

#include stdio.h i n t main ( i n t argc, char argv ) { const i n t n=1000000; i n t i ; double x, dx, p ; dx = 1. 0 / ( double ) n ; p = 0. 0 ; for ( i =0; i <n ; i ++){ x = ( double ) i dx ; p = p + 4.0 / (1 + x x ) dx ; } p r i n t f ( %16.14 f \n, p ) ; return 0; } c/pi.c 52 / 52