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

Similar documents
Microsoft PowerPoint - KHPCSS pptx

untitled

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

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

120802_MPI.ppt

Microsoft PowerPoint _MPI-01.pptx

Microsoft PowerPoint _MPI-03.pptx

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

untitled

nakao

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

演習準備

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

MPI usage

1.overview


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

XcalableMP入門

Fujitsu Standard Tool

目 目 用方 用 用 方

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

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

Vol.-HPC- No. // 情報処理学会研究報告 integer :: array():[*] integer :: tmp() if (this_image() == ) then array(:)[] = tmp(:) tmp(:) = arrray(:)[] end if! Put co

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

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

PowerPoint プレゼンテーション

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

コードのチューニング

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

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

1F90/kouhou_hf90.dvi

並列計算導入.pptx

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

XACC講習会

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

86

コードのチューニング


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

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

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

102

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

スライド 1

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


人事行政の運営状況等の公表(平成19年12月)(PDF)



mogiJugyo_slide_full.dvi

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

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,

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

, ,

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


スライド 1

スライド 1


n 第1章 章立ての部分は、書式(PC入門大見出し)を使います


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



MPI コミュニケータ操作

GeoFEM開発の経験から

表紙_02




野岩鉄道の旅

Microsoft PowerPoint - sps14_kogi6.pptx

スタイルシェルフ 〈クローク収納プラン〉

2

<31332D97708CEA89F090E02E6D6364>


マイスタープロジェクト 推奨仕様

1

第18回海岸シンポジウム報告書


3

(718)



液晶ディスプレイ取説TD-E432/TD-E502/TD-E552/TD-E652/TD-E432D/TD-E502D


() () ()

000-.\..


1 C 2 C 3 C 4 C 1 C 2 C 3 C

<967B95D2955C8E F4390B32E6169>


平成24年財政投融資計画PDF出後8/016‐030


XMPによる並列化実装2

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

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

Microsoft PowerPoint - 阪大CMSI pptx

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

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

Transcription:

4th XcalableMP workshop 目的 n XcalableMPのローカルビューモデルであるXMPのCoarray機能を用 いて Fiberミニアプリ集への実装と評価を行う PGAS(Pertitioned Global Address Space)言語であるCoarrayのベ ンチマークとして整備することも考慮している n Coarrayによる並列化に関する知見を得る 1

n

n l l l l l integer a,b,c if (myrank == 0) then call MPI_Isend(a, 1,..., 1,..., ierr) else if (myrank == 1) then call MPI_Irecv(b, 1,..., 0,..., ierr) end if call MPI_Wait(irec, istat, ierr) call MPI_Bcast(c, 1,..., 0,..., ierr) integer a, b[*], c if (this_image() == 1) then b[2] = a else if (this_image() == 2) then continue end if call co_broadcast(c,source_image=1)

n integer(4),allocatable :: na_per_cell(:,:,:) allocate(na_per_cell(lzdiv+4,lydiv+4,lxdiv+4)) nccp = (icz1-icz0+1) * (icyp1-icyp0+1) call mpi_sendrecv(na_per_cell(icz0,icyp0,icx), nccp, MPI_INTEGER, ipy_pdest, myrank, & na_per_cell(icz0,icybp0,icx), nccp, MPI_INTEGER, ipy_psrc, ipy_psrc, & MPI_COMM_WORLD, istatus, ierr) icyp0 icyp1 icybp0 icybp0+mm-1 icz0=1 icz0=1 Y Z n 要素数 nccp icz1 mm integer(4),allocatable :: na_per_cell(:,:,:)[:] icz1 mm allocate(na_per_cell(lzdi+4,lydiv+4,lxdiv+4)[*]) mm = icyp1-icyp0+1 na_per_cell(icz0:icz1,icyp0:icyp0+mm-1,icx)[ipy_pdest+1] & = na_per_cell(icz0:icz1,icybp0:icybp0+mm-1,icx)

n REAL(8), pointer :: SendBuf(:), RecvBuf(:) DO IbBat_proc = 1, NOccBat_per_Pro RecvBuf => RIInt3c3a(:,Ib_Send:) DO Jarank_diff = 0, NProcs_half DO IaBat_proc = 1, IaBat_Proc_End if( commsizeeach(commphase) > 0 ) then CALL MPI_ISend(SendBuf(1,commIndexEach(commPhase)), commsizeeach(commphase), & MPI_DOUBLE_PRECISION, Jranksend_1, commphase, MPI_COMM_MO, ireq(1), IErr) CALL MPI_IRecv(RecvBuf(1,commIndexEach(commPhase)), commsizeeach(commphase), & MPI_DOUBLE_PRECISION, Jrankrecv_1, commphase, MPI_COMM_MO, ireq(2), IErr) end if DO LNumber_base = 1, LCount + (NUM_STREAM-1) if ( LNumber >=1.and. LNumber <= LCount ) then if ( commphase <= commcount.and. commsizeeach(commphase) > 0 ) then CALL MPI_Wait(ireq(1), istat1, IErr) CALL MPI_Wait(ireq(2), istat2, IErr) end if if ( commphase <= commcount.and. commsizeeach(commphase) > 0 ) then CALL MPI_ISend(SendBuf(1,commIndexEach(commPhase)), commsizeeach(commphase), & MPI_DOUBLE_PRECISION, Jranksend_1, commphase, MPI_COMM_MO, ireq(1), IErr) CALL MPI_IRecv(RecvBuf(1,commIndexEach(commPhase)), commsizeeach(commphase), & MPI_DOUBLE_PRECISION, Jrankrecv_1, commphase, MPI_COMM_MO, ireq(2), IErr) end if end if END DO END DO END DO END DO

n REAL(8), pointer :: SendBuf(:), RecvBuf(:) REAL(8), allocatable :: sbuf(:)[:], rbuf(:)[:] integer :: bufsize integer, save :: jsta DO IbBat_proc = 1, NOccBat_per_Pro RecvBuf => RIInt3c3a(:,Ib_Send:) DO Jarank_diff = 0, NProcs_half DO IaBat_proc = 1, IaBat_Proc_End if( commsizeeach(commphase) > 0 ) then bufsize = commsizeeach(commphase) allocate(sbuf(bufsize)[*]) allocate(rbuf(bufsize)[*]) jsta = commindexeach(commphase) sbuf(1:bufsize) = SendBuf(1:bufsize,jsta) rbuf(1:bufsize)[jranksend_1+1] = sbuf(1:bufsize) end if DO LNumber_base = 1, LCount + (NUM_STREAM-1) if ( LNumber >=1.and. LNumber <= LCount ) then if ( commphase <= commcount.and. commsizeeach(commphase) > 0 ) then RecvBuf(1:bufsize,jsta) = rbuf(1:bufsize) if (allocated(sbuf)) deallocate(sbuf) if (allocated(rbuf)) deallocate(rbuf) end if if ( commphase <= commcount.and. commsizeeach(commphase) > 0 ) then end if Ø

n call MPI_Bcast(arg, 1, MPI_INTEGER, ids, MPI_COMM_WORLD, ierr) n call co_broadcast(arg, ids+1) n call MPI_Allreduce(r8, r8tmp, 1, MPI_REAL8, MPI_SUM, MPI_COMM_WORLD, ierr) r8 = r8tmp n r8tmp = r8 call co_sum(r8tmp, r8) n call MPI_Allreduce(nGrp, ngrpmax, 1, MPI_INTEGER, MPI_MAX, MPI_COMM_WORLD, Ierr) n call co_max(ngrp, ngrpmax)

n integer(4),allocatable :: nrearrange(:) integer(4) :: m2i_tmp(na1cell*lxdiv*lydiv*lzdiv) allocate(nrearrange(n)) call MPI_Gatherv(m2i_tmp, nselfatm, MPI_INTEGER, nrearrange, natmlist, natmdisp, MPI_INTEGER, & mpiout, MPI_COMM_WORLD, ierr) m2i_tmp(1:nselfatm) mpiout: nrearrange(1:n) natmdisp(1) natmdisp(2) natmdisp(n) n integer(4),allocatable :: nrearrange(:)[:] allocate(nrearrange(n)[*]) me = this_image() ms = natmdisp(me) nrearrange(ms:ms+nselfatm-1)[mpiout+1] = m2i_tmp(1:nselfatm)

n do i=0, numprocs-1 call MPI_Bcast(idall(i)%sdesc, 1, MPI_INTEGER, i, MPI_COMM_WORLD, ierr) end do idall(0)%sdesc idall(1)%sdesc idall(numprocs-1)%sdesc idall(:)%sdesc n integer buf do i=1, numprocs buf = idall(i)%sdesc call co_broadcast(buf,i) idall(i-1)%sdesc = buf end do

n sendbuf(1) = localsum call MPI_Allgather( sendbuf, & 1, & MPI_DOUBLE_PRECISION, & recvbuf, & 1, & MPI_DOUBLE_PRECISION, & ADM_COMM_RUN_WORLD, & ierr) globalsum = sum( recvbuf(:) ) n localsumc = localsum call co_sum(localsumc, globalsum)

n n l l

n MyColor = MyRank / NCorePerIO MyKey = MOD(MyRank, NCorePerIO) CALL MPI_COMM_SPLIT(MPI_COMM_WORLD, MyColor, MyKey, MPI_COMM_IO, IErr) MPI_COMM_WORLD NCorePerIO=4 Rank=0 NewRank=0 Rank=1 NewRank=1 Rank=2 NewRank=2 Rank=3 NewRank=3 Rank=4 NewRank=0 Rank=5 NewRank=1 Rank=6 NewRank=2 Rank=7 NewRank=3 MPI_COMM_IO Group #1 MPI_COMM_IO Group #2 FILE I/O n integer,parameter :: iounit_size = 4 integer,parameter :: n_iounit = 2 integer,parameter :: io_node_id = 1!$xmp nodes allnodes(iounit_size, n_iouni)!$xmp nodes iounit(iounit_size) = allnodes(:,*)!$xmp nodes ionodes(n_iounit) = allnodes(io_node_id,:)!$xmp task on iounit if (this_images().eq. 1) write(ounit) buf!$xmp end task

n n

n

n

n n l l n l