1.1 Příkazy pro kolektivní komunikaci (pokračování)

Podobné dokumenty
1 Příkazy MPI REDUCE a MPI ALLREDUCE

Univerzita Jana Evangelisty Purkyně v Ústí nad Labem. Přírodovědecká fakulta

1 Rozdělení paralelních úloh z hlediska jejich

APLIKACE. 1.1 Částice v jednorozměrném silovém poli

Programování založené na posílání zpráv

APLIKACE (pokračování) 1 Paralelní molekulární dynamika

Paralelní LU rozklad

Úvod do MPI. Úvod do MPI Operace send a recieve Blokující a neblokující posílání zpráv Blokující posílání zpráv Neblokující posílání zpráv

Operační systémy. Přednáška 5: Komunikace mezi procesy


Základní komunikační operace

Semafory Zobecněním operací WAKEUP a SLEEP přidáním celočíselného čítače vzniknou semafory a jejich atomické operace DOWN a UP.

Ústav technické matematiky FS ( Ústav technické matematiky FS ) / 35

Klávesy, které lze naprogramovat:

Proč potřebujeme komunikátory? - pokrač. Týden 4 Programování zasíláním zpráv (MP) - programování v MPI - počítání na svazcích stanic

Číslo materiálu: VY 32 INOVACE 29/18. Číslo projektu: CZ.1.07/1.4.00/

MPI Message Passing Interface. Charakteristika

Úvod do Operačních Systémů

Basic256 - úvod do programování Příklady. ing. petr polách

Komunikace eorders. aegis. aegis.cz. Konference Common 2009 Malá Fatra. Evžen Kučera

C2115 Praktický úvod do superpočítání

MIDAM Verze 1.1. Hlavní okno :

Numerické řešení rovnice f(x) = 0

Analýza dějů na rozhraní RS 232 C

IB109 Návrh a implementace paralelních systémů. Kolektivní komunikační primitava. RNDr. Jiří Barnat, Ph.D.

Úvod do OpenMP. Jiří Fürst

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Úvod do simulace - 1

2N LiftIP. IO Extender. Communicator for Lifts. Version

kupi.cz Michal Mikuš

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

Základy digitální techniky

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

II_2-01_39 ABBA,Happy New Year, řešení II_2-01_39 ABBA,Happy New Year, for students

Martin Lísal. Úvod do MPI

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

Programovani v Maplu Procedura

Gymnázium, Brno, Slovanské nám. 7 WORKBOOK. Mathematics. Teacher: Student:

WORKSHEET 1: LINEAR EQUATION 1

Počítačová simulace logistických procesů I. 11. přednáška Programování v SimTalk. ŠAVŠ, Fábry

Výukový materiál zpracovaný v rámci projektu. Základní škola Sokolov, Běžecká 2055 pracoviště Boženy Němcové 1784

MATrixLABoratory letný semester 2004/2005

Pokročilé architektury počítačů

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Samovysvětlující pozemní komunikace

Správa linuxového serveru: Zprovoznění Ruby aplikací s RVM, Thin a Nginx

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

MAXScript výukový kurz

Histogram. 11. února Zadání

Obsah. 2 Fortran ve Windows a v Linuxu Windows Prostředí MSDS Linux Intel Fortran Úkoly Základy syntaxe 11

UŽIVATELSKÁ PŘÍRUČKA KLÁVESNICE

awk programovatelný filtr

Immigration Studying. Studying - University. Stating that you want to enroll. Stating that you want to apply for a course.

Immigration Studying. Studying - University. Stating that you want to enroll. Stating that you want to apply for a course.

PCKEYB JEDNOTKA PRO OBSLUHU KLÁVESNICE TYPU PC AT. Příručka uživatele a programátora

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

BASH. Kouzla s příkazovou řádkou. Petr Koloros

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.



Příklady popisu základních obvodů ve VHDL

Závěrečná zkouška z informatiky 2011


Příloha č. 1: Pokyny ve škole v anglickém jazyce





II/2 Inovace a zkvalitnění výuky cizích jazyků na středních školách


Digital Imaging and Communications in Medicine (DICOM). Part II: Networking

Rozhodovací stromy a jejich konstrukce z dat

Regulární výrazy a grep

Pokročilé architektury počítačů

v. 2425a Jak si na PC vypěstovat HTTP (WWW, Web) server a jak ho používat (snadno a rychle) by: Ing. Jan Steringa

ŘÍZENÍ FYZIKÁLNÍHO PROCESU POČÍTAČEM

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Správce virtuálních strojů

How to get to Hotel Step (venue of WWP AW 2018)

10. Architektura klient/server a třívrstvá architektura

Scan Operator 12 FX Světelný ovladač

Tematický celek 03 - Cvičné příklady

10. Architektura klient/server a třívrstvá architektura

XPSCVDD by ESCAD, Corp.

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Analyzátor, minimalizátor kombinačních logických obvodů

Multiple Event Support

CZ.1.07/1.5.00/

Psaná podoba jazyka, slovní zásoba

Energy vstupuje na trh veterinárních produktů Energy enters the market of veterinary products

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

VY_32_INOVACE_08_2_04_PR

5 ÚVOD DO TESTOVÁNÍ SOFTWARE. 6 Testování software ve vývojovém prostředí MICROSOFT VISUAL STUDIO V hlavním menu volba Debug

PITSTOP VY_22_INOVACE_26

14. Složitější konstrukce

Konzistentnost. Přednášky z distribuovaných systémů

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

C2115 Praktický úvod do superpočítání

Transkript:

Martin Lísal listopad 2003 1 Často používané MPI příkazy (pokračování) 1.1 Příkazy pro kolektivní komunikaci (pokračování) 1.1.1 Distribuce informací nestejné velikosti na jednotlivé procesy call MPI_SCATTERV(sendbuf,sendcounts,displs,send_MPI_data_type, recvbuf,recvcount, recv_mpi_data_type, root,comm,ierr) Funkce příkazu je vysvětlena na obr. 1 a použití MPI SCATTERV demonstruje následující program. program scatterv implicit none include mpif.h preprocessor directive integer :: nprocs, # of processes myrank, my process rank ierr integer :: send_count(0:3), send count recv_count, receive count displ(0:3) displacement real :: sendmsg(10), send message recvmsg(4) recieve message start up MPI call MPI_INIT(ierr) find out how many processes are being used call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) 1

if(nprocs > 4) stop " scatterv: nprocs > 4" get my process rank call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) if(myrank == 0) then sendmsg=(/1.0,2.0,2.0,3.0,3.0,3.0,4.0,4.0,4.0,4.0/) send_count=(/1,2,3,4/) displ=(/0,1,3,6/) endif recv_count=myrank+1 call MPI_SCATTERV(sendmsg,send_count,displ,MPI_REAL, recvmsg,recv_count, MPI_REAL, 0,MPI_COMM_WORLD,ierr) print*," myrank =",myrank," recvmsg:",recvmsg shut down MPI call MPI_FINALIZE(ierr) end program scatterv 1.1.2 Shromáždění informací nestejné velikosti z jednotlivých procesů call MPI_GATHERV(sendbuf,sendcount, send_mpi_data_type, recvbuf,recvcounts,displs,recv_mpi_data_type, root,comm,ierr) Funkce příkazu je vysvětlena na obr. 2 a použití MPI GATHERV demonstruje následující program. 2

program gatherv implicit none include mpif.h preprocessor directive integer :: nprocs, # of processes myrank, my process rank ierr,i integer :: send_count, send count recv_count(0:3), receive count displ(0:3) displacement real :: sendmsg(4), send message recvmsg(10) recieve message start up MPI call MPI_INIT(ierr) find out how many processes are being used call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) if(nprocs > 4) stop " gatherv: nprocs > 4" get my process rank call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) do i=1,myrank+1 sendmsg(i)=myrank+1 enddo send_count=myrank+1 recv_count=(/1,2,3,4/) displ=(/0,1,3,6/) call MPI_GATHERV(sendmsg,send_count, MPI_REAL, recvmsg,recv_count,displ,mpi_real, 0,MPI_COMM_WORLD,ierr) 3

if(myrank == 0) then print*," recvmsg:",recvmsg endif shut down MPI call MPI_FINALIZE(ierr) end program gatherv Příkazy MPI GATHER a MPI GATHERV mají ještě ALL verze MPI ALLGATHER a MPI ALLGATHERV, které shromažďují informace na všechny procesy a tudíž neobsahují argument root. 1.1.3 Posílání informací stejné velikosti z jednotlivých procesů na všechny procesy call MPI_ALLTOALL(sendbuf,sendcount,send_MPI_data_type, recvbuf,recvcount,recv_mpi_data_type, comm,ierr) Funkce příkazu je vysvětlena na obr. 3 a použití MPI ALLTOALL demonstruje následující program. program alltoall implicit none include mpif.h preprocessor directive integer :: nprocs, # of processes myrank, my process rank ierr,i real :: sendmsg(4), send message recvmsg(4) start up MPI recieve message 4

call MPI_INIT(ierr) find out how many processes are being used call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) if(nprocs > 4) stop " gather: nprocs > 4" get my process rank call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) do i=1,nprocs sendmsg(i)=real(i+nprocs*myrank) enddo print*," myrank =",myrank," sendmsg:",sendmsg call MPI_ALLTOALL(sendmsg,1,MPI_REAL, recvmsg,1,mpi_real, MPI_COMM_WORLD,ierr) print*," myrank =",myrank," recvmsg:",recvmsg shut down MPI call MPI_FINALIZE(ierr) end program alltoall 1.1.4 Posílání informací nestejné velikosti z jednotlivých procesů na všechny procesy call MPI_ALLTOALLV(sendbuf,sendcounts,sdispls,send_MPI_data_type, recvbuf,recvcounts,rdispls,recv_mpi_data_type, comm,ierr) Funkce příkazu je vysvětlena na obr. 4 a použití MPI ALLTOALLV demonstruje následující program. 5

program alltoallv implicit none include mpif.h preprocessor directive integer :: nprocs, # of processes myrank, my process rank ierr,i integer :: scnt(0:3), send counts sdsp(0:3), send displacements rcnt(0:3), recv counts rdsp(0:3) recv displacements real :: sendmsg(10),recvmsg(16) sendmsg=(/1.0,2.0,2.0,3.0,3.0,3.0,4.0,4.0,4.0,4.0/) scnt=(/1,2,3,4/) sdsp=(/0,1,3,6/) start up MPI call MPI_INIT(ierr) find out how many processes are being used call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) if(nprocs > 4) stop " gather: nprocs > 4" get my process rank call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) sendmsg do i=1,10 sendmsg(i)=sendmsg(i)+real(nprocs*myrank) enddo print*," myrank =",myrank," sendmsg:",sendmsg rcnt and rdsp 6

do i=0,nprocs-1 rcnt(i)=myrank+1 rdsp(i)=i*(myrank+1) enddo call MPI_ALLTOALLV(sendmsg,scnt,sdsp,MPI_REAL, recvmsg,rcnt,rdsp,mpi_real, MPI_COMM_WORLD,ierr) print*," myrank =",myrank," recvmsg:",recvmsg shut down MPI call MPI_FINALIZE(ierr) end program alltoallv 1.2 Příkazy pro operace na proměnných distribuovaných na jednotlivých procesech call MPI_REDUCE(operand,result,count,MPI_data_type,operation,root, comm,ierr) Příkaz MPI REDUCE má ještě ALL verzi, které neobsahuje argument root. call MPI_SCAN(sendbuf,recvbuf,count,MPI_data_type,operation,comm,ierr) Funkce příkazu je vysvětlena na obr. 5 a použití MPI SCAN demonstruje následující program. 7

program scan implicit none include mpif.h preprocessor directive integer :: nprocs, # of processes myrank, my process rank ierr real :: sendmsg,recvmsg start up MPI call MPI_INIT(ierr) find out how many processes are being used call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) if(nprocs > 4) stop " gather: nprocs > 4" get my process rank call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) sendmsg sendmsg=real(myrank+1) call MPI_SCAN(sendmsg,recvmsg,1,MPI_REAL,MPI_SUM, MPI_COMM_WORLD,ierr) print*," myrank =",myrank," recvmsg:",recvmsg shut down MPI call MPI_FINALIZE(ierr) end program scan 8

call MPI_MPI_REDUCE_SCATTER(sendbuf,recvbuf,recvcounts,MPI_data_type, operation,comm,ierr) Funkce příkazu je vysvětlena na obr. 6 a použití MPI REDUCE SCATTER demonstruje následující program. program reduce_scatter implicit none include mpif.h preprocessor directive integer :: nprocs, # of processes myrank, my process rank ierr,i integer :: rcnt(0:3) recv counts real :: sendmsg(10), send message recvmsg(4) recieve message rcnt=(/1,2,3,4/) start up MPI call MPI_INIT(ierr) find out how many processes are being used call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) if(nprocs > 4) stop " scatter: nprocs > 4" get my process rank call MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) do i=1,10 sendmsg(i)=real(i+myrank*10) enddo print*," myrank =",myrank," sendmsg:",sendmsg 9

call MPI_REDUCE_SCATTER(sendmsg,recvmsg,rcnt,MPI_REAL,MPI_SUM, MPI_COMM_WORLD,ierr) print*," myrank =",myrank," recvmsg =",recvmsg shut down MPI call MPI_FINALIZE(ierr) end program reduce_scatter 10

Obrázek 1: Schematický popis funkce příkazu MPI SCATTERV. Obrázek 2: Schematický popis funkce příkazu MPI GATHERV. Obrázek 3: Schematický popis funkce příkazu MPI ALLTOALL. 11

Obrázek 4: Schematický popis funkce příkazu MPI ALLTOALLV. Obrázek 5: Schematický popis funkce příkazu MPI SCAN. Obrázek 6: Schematický popis funkce příkazu MPI REDUCE SCATTER. 12

Figure 129. MPI_SCATTERV

Figure 131. MPI_GATHERV

Figure 134. MPI_ALLTOALL

Figure 135. MPI_ALLTOALLV

Figure 139. MPI_SCAN

Figure 140. MPI_REDUCE_SCATTER