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

Podobne dokumenty
Programowanie Równoległe Wykład 6. 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 Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

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

Kolejne funkcje MPI 1

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

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

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

Operacje grupowego przesyłania komunikatów

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

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

51. Metody komunikacji nieblokującej.

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

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

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

61 Topologie wirtualne

Interfejs MPI. Maciej Kasperski, Rafał Kozik. 16 kwietnia 2008

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

Message Passing Interface

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

Rozszerzenia MPI-2 1

Programowanie współbieżne i rozproszone

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

Programowanie w standardzie MPI

Optymalizacja komunikacji w systemach rozproszonych i równoległych

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

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Operacje kolektywne MPI

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

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

1. Zbadać liniową niezależność funkcji x, 1, x, x 2 w przestrzeni liniowej funkcji ciągłych na przedziale [ 1, ).

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

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

Architektury systemów równoległych

Łagodne wprowadzenie do Message Passing Interface (MPI)

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

Weryfikacja oprogramowania, korzystajacego z MPI

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

Algorytmy i Struktury Danych

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

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

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

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

Biblioteka PCJ do naukowych obliczeń równoległych


Programowanie Współbieżne

Architektura sieci połączeń między procesorami, sterowanie komunikacjami, biblioteki komunikacyjne

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Podstawy Programowania C++

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

Warstwa sieciowa. Model OSI Model TCP/IP. Aplikacji. Aplikacji. Prezentacji. Sesji. Transportowa. Transportowa

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

PRZEWODNIK PO PRZEDMIOCIE

Nowoczesne technologie przetwarzania informacji

Wstęp do programowania. Różne różności

O superkomputerach. Marek Grabowski

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

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

Programowanie kart graficznych

Java Podstawy. Michał Bereta

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

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Szablony funkcji i szablony klas

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Lab 9 Podstawy Programowania

MATLAB Z3. Rafał Woźniak. Warsaw, Faculty of Economic Sciences, University of Warsaw

Podstawy programowania

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

Jak wygląda praca na klastrze

Programowanie komputerowe. Zajęcia 4

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

WTYCZKA FARA-TCM Dane techniczne dla twórców zewnętrznych aplikacji do obsługi map cmentarza

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Programowanie współbieżne i rozproszone

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Wykresy i interfejsy użytkownika

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

KARTA PRZEDMIOTU. Egzamin / zaliczenie. Egzamin / zaliczenie. ocenę*

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

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

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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

Informatyka I Lab 06, r.a. 2011/2012 prow. Sławomir Czarnecki. Zadania na laboratorium nr. 6

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Ćwiczenie Wyznaczanie tras sumarycznych dla adresów IPv4 i IPv6

Komputerowe systemy na rynkach finansowych. wykład 5. MQL4 - funkcje operujące na obiektach wykresu

Języki i techniki programowania Ćwiczenia 2

Transkrypt:

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

MPI, wykład 3. Plan: - wirtualne topologie - badanie skalowanie czasu rozwiązania

Wirtualne topologie predefiniowany komunikator MPI_COMM_WORLD zawiera listę wszystkich procesów z unikalnym numerowaniem

Wirtualne topologie chcemy mapować kawałki problemu (np. tablicy) na osobne procesy MPI przykład tablica 2x2: MPI dostarcza funkcje mapujące dla typowych problemów

Topologia sieci periodycznej 2D ndims = 2 (wymiar przestrzeni) dim[0] = 3 (ilość elementów w kierunku 'x') dim[1] = 4 (ilość elementów w kierunku 'y') per[0] = per[1] = true (periodyczność sieci)

MPI_Cart_create int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, int reorder, MPI_Comm *comm_cart) nowy komunikator dla topologii kartezjańskiej reorder dopuszcza (lub nie) zmianę numeracji procesów (true/false)

Mapowanie współrzędne sieci proces int MPI_Cart_rank( MPI_Comm comm, int *in_coords, int *out_rank) in_coords tablica współrzędnych out_rank id procesu, uwzględnia periodyczność (możliwe błędy, gdy kierunek nie jest periodyczny!)

Mapowanie proces współrzędne na sieci int MPI_Cart_coords( MPI_Comm comm, int in_rank, int in_maxdims, int *out_coords) in_rank id procesu (wejście) in_maxdims ilość współrzędnych w out_coords out_coords tablica współrzędnych (wynik)

Wyznaczenie sąsiada int MPI_Cart_shift( MPI_Comm comm, int dir, int disp, int *rank_source, int *rank_dest) SRC JA DST dir kierunek [0-dim) disp zwrot (0 - w dół, w górę) zwraca id dwóch sąsiadów: source ( w kierunku siebie ) i destination ( od siebie ) brak sąsiada: MPI_PROC_NULL

Podział kartezjański Procedura: dzielimy problem (np. wydzielamy podsieci o mniejszym wymiarze) tworzymy osobny komunikator dla każdej podsieci MPI_Cart_sub Każda podsieć może wykonywać własne operacje kolektywne (np. MPI_Reduce) Na przykład: operacje na macierzach (rzędy)

MPI_Cart_sub int MPI_Cart_sub ( MPI_Comm comm, int *remain_dims, MPI_Comm *newcomm) comm komunikator o topologii kartezjańskiej remain_dims określa czy dany wymiar jest zachowany przykład: dim = 3, d[] = {3,2,4} Remain_dims[] = {true, false, true} Stworzy 2 komunikatory, każdy z 12 procesami w topologii kartezjańskiej 3 x 4 Remain_dims[] = {false, true, false} Stworzy 12 komunikatorów 1d o wymiarze 2

Badanie wydajności

Przykład: Wall time t0 = MPI_Wtime(); ( ) t1 = MPI_Wtime(); printf(" %f \n", t1-t0); czas może, ale nie musi być zsynchronizowany między procesami zmienna środowiskowa MPI_WTIME_IS_GLOBAL

Badanie wydajności double MPI_Wtick(void); rozdzielczość czasu podawana przez MPI_Wtime() np. 10-3 jeśli MPI_Wtime() ma dokładność do milisekundy

Efektywność redukcji ( ) ( ) t0 = MPI_Wtime(); for(i = 0; i < L; i++) send[i] = rand() / (float)rand_max; MPI_Reduce(send, recv, L, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); t1 = MPI_Wtime(); if(myrank==0) { for(i=1; i < L; i++) recv[0] += recv[i]; }

Skalowanie rozwiązania Jeśli: L rozmiar problemu n liczba procesów Rozważamy dwa typy skalowania czasu wykonania: Skalowanie słabe przyspieszenie w funkcji n dla stałego L/n Skalowanie silne przyspieszenie w funkcji n dla stałego L

Przykład - reduce ( ) t0 = MPI_Wtime(); for(i = 0; i < L; i++) send[i] = rand() / (float)rand_max; MPI_Reduce(send, recv, L, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); t1 = MPI_Wtime(); ( ) // następnie redukcja różnic t1-t0 ze wszystkich procesów (ćwiczenia)

Typy danych w MPI To ważne żeby używać wbudowanych typów do komunikacji (komunikacja między różnymi systemami).

Typy pochodne danych MPI MPI pozwala definiować pochodne typy danych Dzięki temu np. strukturę można przesłać jednym MPI_Send / MPI_Recv komunikaty wysyłane tylko w całości wymagają zdefiniowania typu i rejestracji

Ogólny typ danych MPI Typ danych w MPI to struktura zawierająca: sekwencję typów podstawowych sekwencję przesunięć (offsetów) Np: typemap = { (type0; disp0); ; (typen-1; dispn-1) } ;

MPI_Type_contiguous int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype); count ilość elementów oldtype typ pojedynczego elementu newtype nowy typ danych

MPI_Type_contiguous Przykład, wektor 2D i 3D: ( ) MPI_Datatype MPI_2D; MPI_Datatype MPI_3D; MPI_Type_contiguous(2, MPI_DOUBLE, &MPI_2D ); MPI_Type_contiguous(3, MPI_DOUBLE, &MPI_3D ); MPI_Type_commit(&MPI_2D); MPI_Type_commit(&MPI_3D); ( ) Teraz można wykonać np.: MPI_Send( buf, size, MPI_2D, 1, 0, MPI_COMM_WORLD);

Inne typy pochodne MPI_Type_struct najbardziej ogólny typ pochodny (podajemy lokację, rozmiar i typ wszystkich danych) MPI_Type_contiguous dane ułożone kolejno w pamięci (tablica 1d) MPI_Type_vector MPI_Type_hvector dane ułożone jak w MPI_Type_contiguous z przesunięciem. np. fragment tablicy (podajemy m.in. parametr stride oznaczający jaką część pomijamy)

Następny wykład - OpenMP www.ift.uni.wroc.pl/~koma/pr/

Literatura http://people.sc.fsu.edu/~jburkardt/pdf/mpi_course.pdf (polecam!) Wolfgang Baumann, ZIB Parallel Programming with MPI MPI: A Message-Passing Interface Standard, Version 1.3 http://aragorn.pb.bialystok.pl/~wkwedlo/pc3.pdf