Programowanie współbieżne... (4) Andrzej Baran 2010/11

Podobne dokumenty
Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1

Programowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie w standardzie MPI

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

Message Passing Interface

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP

Programowanie współbieżne... (5)

Rozszerzenia MPI-2 1

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface (część 3) Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie współbieżne... (6)

Programowanie współbieżne i rozproszone


Łagodne wprowadzenie do Message Passing Interface (MPI)

Operacje grupowego przesyłania komunikatów

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski

Programowanie Współbieżne

Programowanie współbieżne... (2)

Architektury systemów równoległych

Programowanie współbieżne Wykład 11 Wprowdzenie do MPI. Rafał Skinderowicz

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie współbieżne... (w13)

Programowanie współbieżne... (12) Andrzej Baran 2010/11

Weryfikacja oprogramowania, korzystajacego z MPI

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania. Matematycznego i Komputerowego Uniwersytet Warszawski

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do MPI

Jak wygląda praca na klastrze

Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1

Pierwsze kroki w środowisku MPI

Page 1. Programowanie równoległe i rozproszone - INZ3774 wykład - 3 ECTS, laboratorium 3 ECTS. Wykładowca: Jan Kwiatkowski, pokój 201/15, D-2

Programowanie Równoległe Wykład 6. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

51. Metody komunikacji nieblokującej.

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Równoległość i współbieżność

Równoległość i współbieżność

5. Model komunikujących się procesów, komunikaty

Miary Wydajności. Efektywność programu równoległego (E) jest definiowana jako stosunek przyśpieszenia do liczby procesorów

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Kolejne funkcje MPI 1

Programowanie współbieżne Wykład 12 MPI c.d. Rafał Skinderowicz

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Wprowadzenie. System rozproszony jest kolekcją niezależnych, autonomicznych komputerów, które dla użytkownika prezentują się jak jeden komputer.

Algorytmy i Struktury Danych

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Systemy rozproszone. Państwowa Wyższa Szkoła Zawodowa w Chełmie. ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej w Lublinie

Argumenty wywołania programu, operacje na plikach

Klient-Serwer Komunikacja przy pomocy gniazd

61 Topologie wirtualne

Programowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran

Programowanie współbieżne... (10) Andrzej Baran 2010/11

Wstęp do Programowania, laboratorium 02

Obliczenia rozproszone z wykorzystaniem MPI

Języki i metodyka programowania. Wprowadzenie do języka C

Nowoczesne technologie przetwarzania informacji

IPC: Kolejki komunikatów

HPC na biurku. Wojciech De bski

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Programowanie procesorów graficznych GPGPU

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Podział programu na moduły

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Zdalne wywoływanie procedur RPC 27. października Dariusz Wawrzyniak (IIPP) 1

Algorytmy Równoległe i Rozproszone Część VI - Systemy rozproszone, podstawowe pojęcia

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Zdalne wywoływanie procedur RPC 27. października 2010

Superkomputer z Raspberry PI

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

Operacje kolektywne MPI

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

O superkomputerach. Marek Grabowski

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Optymalizacja komunikacji w systemach rozproszonych i równoległych

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Wskaźniki. Programowanie Proceduralne 1

Podstawy programowania 1

POZNA SUPERCOMPUTING AND NETWORKING. Wtki w MPI. Michał Sajkowski

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

2 Przygotował: mgr inż. Maciej Lasota

Funkcja (podprogram) void

Język C, tablice i funkcje (laboratorium)

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

PRiR dla maszyn DM i sieci komputerowych. (PRiR, wykład 5)

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Lab 9 Podstawy Programowania

PVM Parallel Virtual Machine

Transkrypt:

Programowanie współbieżne... (4) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html

Przykład Zaczniemy od znanego już przykładu: Iloczyn skalarny różne modele Programowanie współbieżne... 2

Obliczenia sekwencyjne Programowanie współbieżne... 3

Obliczenia MPI (myid==0) Programowanie współbieżne... 4

Obliczenia OpenMP Programowanie współbieżne... 5

Zadanie (Lab) Napisać program obliczania iloczynu skalarnego w języku Fortran95 w obu modelach obliczeń równoległych: MPI i OpenMP. Porównać czasy wykonania dla przypadku 1, 2 lub więcej procesów i czasy wykonania z MPI i OpenMP. Wybrać odpowiednio duże wektory a(:) i b(:). Który model daje większe przyspieszenia? Wykreślić zależność przyspieszenia od liczby procesów oraz od wymiaru n wektorów a oraz b. Programowanie współbieżne... 6

Schemat Core2Duo (?) Procesor dwurdzeniowy (większość komputerów) Programowanie współbieżne... 7

Historia MPI MPI forum: rządy, nauka, przemysł Listopad 1992 utworzenie komitetu do spraw MPI Maj 1994 opublikowano MPI 1.0 Czerwiec 1995 MPI 1.1 Kwiecień 1995 powstaje komitet MPI 2.0 Lipiec 1997 poblikacja MPI 2.0 Lipiec 1997 publikacja MPI 1.2 Programowanie współbieżne... 8

Przykład OW OW = obliczenia współbieżne Wczytać z pliku tablicę a(1..6), 6 elementową, wykonać obliczenia (dowolne) traktując elementy a() jako dane do obliczeń. Wyniki zapisać do tej samej tablicy i wypisać ją na wyjście (do pliku). Obliczenia wykonać za pomocą 1 procesora za pomocą 3 procesorów Programowanie współbieżne... 9

MPI Materiały o MPI http://www.netlib.org/utk/papers/mpibook/mpi-book.html Dokumenty MPICH http://wwwunix.mcs.anl.gov/mpi/mpich/ C, C++ oraz FORTRAN z MPI-1.2 http://www.lammpi.org/tutorials/bindings/ MPI Home http://www.mpi-forum.org/ http://www-unix.mcs.anl.gov/mpi/ Programowanie współbieżne... 10

Przegląd Message Passing Programming Przegląd Czym jest MPI? Programowanie równoległe z MPI Podstawy Send i Receive Buforowanie i dostarczanie komunikatów Non-blocking communication Collective Communication Uwagi o innych możliwościach Programowanie współbieżne... 11

Message Passing Programming Model Grupa procesow z których każdy posiada dostęp do danych lokalnych i może sie porozumiewać z innymi procesami wysyłając komunikaty Korzyści Wygodny I zupełny model opisu algorytmów równoległych Potencjalnie szybka realizacja algorytmów i obliczeń Często używany Programowanie współbieżne... 12

Czym jest MPI? MPI: standard przesyłania komunikatów między procesami Przed standardem MPI istniały standardy i biblioteki firmowe (Cray shmem, IBM MPL) i inne (PVM, p4) Specyfikacja biblioteki message-passing dla Fortranu, C oraz C++ Programowanie współbieżne... 13

Stan realizacji - wdrożenia MPI 1.2, MPI 2 MPICH 2 ANL/MSU (Argonne National Lab., Michigan State University) LAM/MPI, Indiana University, University of Notre Dame, Ohio State University IBM, Cray, HP, SGI, NEC, Fujitsu Programowanie współbieżne... 14

Programowanie równoległe z MPI Komunikacja podstawy send/receive (blocking) Kolektywna Non-blocking Jednostronna (MPI 2) Synchronizacja Bezpośrednia w komunikacji point-to-point Synchronizacja globalna poprzez komunikaty kolektywne Równoległe I/O (MPI 2) Programowanie współbieżne... 15

Współbieżność Single Program Multiple Data (SPMD) Każdy proces wykonuje ten sam program z innymi danymi Każda kopia pracuje w swoim tempie i nie wymaga synchronizacji Program może realizować różne przebiegi Kontrola odbywa się poprzez parametr rank oraz liczbę zadań Programowanie współbieżne... 16

Współbieżność Multiple Program Multiple Data Każdy proces MPI może być oddzielnym programem Połączenie MPI I OpenMP lub pthreads Każdy proces MPI można rozbić na wątki używając np. dyrektyw OpenMP Programowanie współbieżne... 17

PROGRAMY Programowanie współbieżne... 18

Hello (C) #include "mpi.h" #include <stdio.h> int main( argc, argv ) int argc; char *argv[]; { int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); printf( "I am %d of %d\n", rank, size ); MPI_Finalize(); return 0; } Programowanie współbieżne... 19

Hello (Fortran) program main include 'mpif.h' integer ierr, rank, size call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, rank, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, size, ierr ) print *, 'I am ', rank, ' of ', size call MPI_FINALIZE( ierr ) end Programowanie współbieżne... 20

Podstawa MPI: Send/Receive Proces 0 Proces 1 send recv Dla poprawnego przesyłania komunikatów potrzebne są informacje: Jak zidentyfikować proces? Jak zidentyfikować komunikat (message)? Jak zidentyfikować dane? Programowanie współbieżne... 21

Identyfikacja processów MPI Communicator (komunikator) Definiuje grupę (zbiór uporządkowanych procesów) oraz context (sieć wirtualna) Rank (ranga) Numer procesu w grupie MPI_ANY_SOURCE przyjmuje komunikaty od dowolnych procesów Komunikator MPI_COMM_WORLD oznacza całą grupę procesów Programowanie współbieżne... 22

Identyfikacja komunikatów MPI Communicator definiuje wirtualną sieć, para send/recv używa tego samego komunikatora Procedury send/recv posiadają znacznik (tag; zmienna całkowita), którego używa się do identyfikacji komunikatu (wiadomości) MPI_ANY_TAG otrzymuje wiadomości z dowolnym znacznikiem (tag) Programowanie współbieżne... 23

Identyfikacja danych Dane opisane są trójką (addres, typ, ilość) Dla send, definiuje to wiadomość Dla recv, definiuje to rozmiar odebranego bufora Ilość otrzymanych danych, źródło danych oraz tag są znane poprzez status struktury danych Użyteczny jeśli używa się MPI_ANY_SOURCE, MPI_ANY_TAG Programowanie współbieżne... 24

List... KOPERTA Odbiorca: Imię i Nazwisko Ulica, nr domu Kod, Miasto Kraj Szanowny Panie, Bla, bla, bla... Nadawca: Imię i Nazwisko Ulica, nr domu Miasto Kraj = treść listu Programowanie współbieżne... 25

Komunikat MPI Koperta source (źródło) destination (cel) communicator grupa procesów wśród których jest nadawca i odbiorca tag (znacznik) uzywany do klasyfikacji komunikatów Treść buffer (bufor) tablica danych count (ilość) liczba danych dtype (typ) typ danych Programowanie współbieżne... 26

Blokujące operacje SEND, RECV Podstawowa operacja wysyłania komunikatu MPI MPI_SEND Argumenty buffer, count, datatype = TREŚĆ destination, tag, communicator = KOPERTA FORTRAN MPI_SEND(buf, count, dtype, dest, tag, comm, ierr) count, dtype, dest, tag, comm INTEGER ierr INTEGER, kod błędu Programowanie współbieżne... 27

Blokujące operacje SEND, RECV Podstawowa operacja odbioru komunikatu MPI MPI_RECV Argumenty buffer, count, datatype = TREŚĆ source, tag, communicator, status = KOPERTA (odb. niejawny) FORTRAN MPI_RECV(buf, count, dtype, source, tag, comm, status, ierr) count, dtype, source, tag, comm = INTEGER status = integer; tablica o wielkości MPI_STATUS_SIZE Programowanie współbieżne... 28

Uwagi, błędy... Niezgodność typów danych Niezgodność długości bufora danych Buf = tablica, której typ musi być zgodny z typem określonym przez dtype inne Programowanie współbieżne... 29

Typy danych MPI Typy danych MPI Predefiniowane typy MPI Typy tablicowe ciągłe Tablice jednakowej długości bloków Tablice bloków różnej długości Struktury dowolne Typy definiowane przez użycie odpowiednich procedur MPI, np. MPI_TYPE_VECTOR Programowanie współbieżne... 30

Predefiniowane typy MPI C: Fortran: MPI_INT MPI_INTEGER MPI_FLOAT MPI_DOUBLE MPI_CHAR MPI_UNSIGNED MPI_LONG C, Fortran: MPI_BYTE MPI_REAL MPI_DOUBLE_PRECISION MPI_CHARACTER MPI_LOGICAL MPI_COMPLEX MPI_REAL8, MPI_REAL16 Programowanie współbieżne... 31

Przykład komunikacji point-to-point Process 0 Process 1 #define TAG 999 float a[10]; int dest=1; MPI_Send(a, 10, MPI_FLOAT, dest, TAG, MPI_COMM_WORLD); #define TAG 999 MPI_Status status; int count; float b[20]; int sender=0; MPI_Recv(b, 20, MPI_FLOAT, sender, TAG, MPI_COMM_WORLD, &status); MPI_Get_count(&status, MPI_FLOAT, &count); Programowanie współbieżne... 32

MPI_Send MPI_Send(address, count, type, dest, tag, comm) address: wskaźnik do danych (pointer) count: liczba wysyłanych elementów type: typ danych dest: proces odbierający tag: identyfikator (tag) comm: komunikator Kiedy MPI_Send powraca oznacza to, że komunikat został wysłany (nie musiał być jednak odebrany) Programowanie współbieżne... 33

MPI_Recv MPI_Recv(address, count, type, dest, tag, comm, status) address: pointer do danych count: liczba elementów do przesłania type: typ danych dest: proces odbiorca tag: identyfikator (tag) comm: komunikator status: nadawca, tag, I rozmiar komunikatu Kiedy MPI_Recv wraca oznacza to, że komunikat został odebrany I można używać otrzymane dane. Programowanie współbieżne... 34

MPI Status Data Structure C MPI_Status status; int recvd_tag, recvd_from, recvd_count; recvd_tag = status.mpi_tag; recvd_from = status.mpi_source; MPI_Get_count( &status, MPI_INT, &recvd_count); Fortran integer status(mpi_status_size) Programowanie współbieżne... 35

Programowanie MPI: 6 procedur Pewne programy można napisać używając tylko 6 podstawowych procedur biblioteki MPI: MPI_Init MPI_Finalize MPI_Comm_size MPI_Comm_rank MPI_Send MPI_Recv Programowanie współbieżne... 36

Algorytmy Przy poważnych obliczeniach warto najpierw zajrzeć do bibliotek gotowych programów BLACS, SCALAPACK,... Lub książek... Następny krok programowanie Programowanie współbieżne... 37

Problemy...? Programowanie współbieżne... 38