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



Podobne dokumenty
Programowanie Równoległe Wykład 5. MPI - Message Passing Interface (część 3) 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

Kolejne funkcje MPI 1

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

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

Łagodne wprowadzenie do Message Passing Interface (MPI)

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

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

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

Mnożenie macierzy. Systemy z pamięcią współdzieloną Systemy z pamięcią rozproszoną Efektywność

Budowa systemów komputerowych

Charakterystyka systemów plików

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

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

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

Architektura komputerów

Podstawy programowania

API transakcyjne BitMarket.pl

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

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET

Elementy cyfrowe i układy logiczne

Bazy danych. Andrzej Łachwa, UJ, /15

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

2.Prawo zachowania masy

Wiedza niepewna i wnioskowanie (c.d.)

POMOC PSYCHOLOGICZNO-PEDAGOGICZNA Z OPERONEM. Vademecum doradztwa edukacyjno-zawodowego. Akademia

Zadanie 1. Liczba szkód w każdym z trzech kolejnych lat dla pewnego ubezpieczonego ma rozkład równomierny:

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Zaawansowana adresacja IPv4

Elementy animacji sterowanie manipulatorem

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

PRZYRODA RODZAJE MAP

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

PRÓG RENTOWNOŚCI i PRÓG

ZASADY WYPEŁNIANIA ANKIETY 2. ZATRUDNIENIE NA CZĘŚĆ ETATU LUB PRZEZ CZĘŚĆ OKRESU OCENY

Jak korzystać z Group Tracks w programie Cubase na przykładzie EWQLSO Platinum (Pro)

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

Projektowanie bazy danych

INSTRUKCJA Projektowanie plików naświetleń (rozkładówek + rozbiegówek) oraz pliku okładki dla albumu z okładką personalizowaną.

REJESTRATOR RES800 INSTRUKCJA OBSŁUGI

GPD Gumowe wkłady uszczelniaja ce

Zagospodarowanie magazynu

OFERTA WYKŁADÓW, WARSZTATÓW I LABORATORIÓW DLA UCZNIÓW KLAS IV- VI SZKÓŁ PODSTAWOWYCH, GIMNAZJALNYCH I ŚREDNICH

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Operacje grupowego przesyłania komunikatów

Program szkoleniowy Efektywni50+ Moduł III Standardy wymiany danych

Kancelaris - Zmiany w wersji 2.50

Procedura weryfikacji badania czasu przebiegu 1 paczek pocztowych

Przekładnie morskie. Napędy pomp DPO 087

Temat: Co to jest optymalizacja? Maksymalizacja objętości naczynia prostopadłościennego za pomocą arkusza kalkulacyjngo.

Surowiec Zużycie surowca Zapas A B C D S 1 0,5 0,4 0,4 0, S 2 0,4 0,2 0 0, Ceny x

1. Korzyści z zakupu nowej wersji Poprawiono Zmiany w słowniku Stawki VAT Zmiana stawki VAT w kartotece Towary...

Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Instrukcja obsługi panelu operacyjnego XV100 w SZR-MAX-1SX

Pracownia internetowa w ka dej szkole (edycja 2004/2005)

Statystyczna analiza danych w programie STATISTICA. Dariusz Gozdowski. Katedra Doświadczalnictwa i Bioinformatyki Wydział Rolnictwa i Biologii SGGW

Wartości domyślne, szablony funkcji i klas

G PROGRAMMING. Part #4

OSTRZEŻENIA DANE TECHNICZNE. Wbudowana bateria słoneczna oraz alkaliczna bateria manganowa (1,5 V LR44)

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

W tym elemencie większość zdających nie zapisywała za pomocą równania reakcji procesu zobojętniania tlenku sodu mianowanym roztworem kwasu solnego.

Optymalizacja komunikacji w systemach rozproszonych i równoległych

Programowanie w standardzie MPI

VLAN Ethernet. być konfigurowane w dowolnym systemie operacyjnym do ćwiczenia nr 6. Od ćwiczenia 7 należy pracować ć w systemie Linux.

51. Metody komunikacji nieblokującej.

art. 488 i n. ustawy z dnia 23 kwietnia 1964 r. Kodeks cywilny (Dz. U. Nr 16, poz. 93 ze zm.),

Wykorzystanie synergii obszarowych odpowiedzią na wzrastającą konkurencyjność rynku

Sieć komputerowa grupa komputerów lub innych urządzeo połączonych ze sobą w celu wymiany danych lub współdzielenia różnych zasobów, na przykład:

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

Automatyzacja procesu publikowania w bibliotece cyfrowej

PowerShell. Sławomir Wawrzyniak

INSTRUKCJA OBS UGI

SZABLONY KOMUNIKATÓW SPIS TREŚCI

Monopolistyczna konkurencja

Nowości w module: BI, w wersji 9.0

Zadania ćwiczeniowe do przedmiotu Makroekonomia I

Mapa umiejętności czytania, interpretacji i posługiwania się mapą Polski.

Programowanie obrabiarek CNC. Nr H8

Wtedy wystarczy wybrać właściwego Taga z listy.

Metody opracowywania dokumentów wielostronicowych. Technologia Informacyjna Lekcja 28

Czy zdążyłbyś w czasie, w jakim potrzebuje światło słoneczne, aby dotrzeć do Saturna, oglądnąć polski hit kinowy: Nad życie Anny Pluteckiej-Mesjasz?

Zaproszenie. Ocena efektywności projektów inwestycyjnych. Modelowanie procesów EFI. Jerzy T. Skrzypek Kraków 2013 Jerzy T.

System kontroli wersji SVN

Programowanie Zespołowe

tel/fax lub NIP Regon

Wykład 2. Budowa komputera. W teorii i w praktyce

9. Dynamiczne generowanie grafiki, cz. 3

Opis modułu analitycznego do śledzenia rotacji towaru oraz planowania dostaw dla programu WF-Mag dla Windows.

mprofi.pl nowa generacja usług mobilnych TWOJA APLIKACJA MOBILNA: Komunikator na smartfony

Rozszerzenia MPI-2 1

Kto tak naprawdę odwiedza Twoją stronę?

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Wyznaczanie współczynnika sprężystości sprężyn i ich układów

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

POLITECHNIKA WARSZAWSKA Wydział Chemiczny LABORATORIUM PROCESÓW TECHNOLOGICZNYCH PROJEKTOWANIE PROCESÓW TECHNOLOGICZNYCH

Transkrypt:

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

Dorobiliśmy się strony WWW Za tydzień 1. wykład z CUDY (Z. Koza) www.ift.uni.wroc.pl/~koma/pr/index.html

MPI, wykład 3. Plan: - wirtualne topologie - badanie skalowanie czasu rozwiązania - typy pochodne (MPI_Type_)

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 dim = 2 (wymiar przestrzeni) d[0] = 3 (ilość elementów w kierunku 0) d[1] = 4 (ilość elementów w kierunku 1) 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 zmiana numeracji procesów (true/false)

Mapowanie sieć->proces int MPI_Cart_rank( MPI_Comm comm, int *coords, int *rank) coords tablica współrzędnych (wynik) rank id procesu (wyjście) uwzględnia periodyczność

Mapowanie proces->sieć int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords) rank id procesu (wejście) maxdims długość przesyłanego coords[] (może być < dim) 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) dir kierunek [0-dim) disp zwrot (0 - w dół, w górę) zwraca id dwóch procesów źródłowego i docelowego 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)

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 (true/false) 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 -Wall time double MPI_Wtime(void); czas lokalny dla procesu czas jaki minął od pewnej chwili w przeszłości pewna chwila nie zmienia się w trakcie życia procesu wartość zmiennoprzecinkowa w sekundach

Przykład: Wall time t0 = MPI_Wtime(); ( ) // dużo operacji o niewielkim narzucie na // tranfer danych 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 Rozważamy dwa typy skalowania czasu wykonania: Skalowanie słabe przyspieszenie w funkcji N dla stałego L/N Skalowanie silne (trudniejsze) przyspieszenie w funkcji N dla stałego L gdzie: N liczba procesorów L rozmiar problemu

Redukcja skalowanie Słabe Silne słabe skalowanie dobre do N=4 (liczba proc. na węzeł) redukcja nieefektywna dla N>4 skalowanie silne generalnie gorsze narzut komunikacji MPI na efektywność pojedynczego wątku (skalowanie silne)

Typy danych w MPI To ważne żeby używać wbudowanych typów do komunikacji (komunikacja między różnymi systemami). MPI_BYTE 8 bitów (może być inny niż char) MPI_PACKED typ danych do komunikacji z użyciem bufora

Przesyłanie struktur danych Jak przesłać w komunikacie więcej niż 1 zmienną? Najprościej: kilka MPI_Send/MPI_Recv (wady) Przykład (przesłanie tablicy L x H ): for (j=0; j<h; j++) { MPI_Send(&t[j][1], L, MPI_DOUBLE, dst, tag, MPI_COMM_WORLD); } (rzędy w całości w pamięci) Zalety: prostota Wady: dużo krótkich wiadomości (narzut komunikacji!)

Przesyłanie struktur danych Dane można przekopiować do jakiegoś bufora Np. tablicę 2d do tablicy 1d double *buf; (.. malloc etc.) for(j=0; j<h; ++j) for (i=0; i<l; ++i) { *(buf++) = t[j][i]; } MPI_Send(buf, L*H, MPI_DOUBLE, dst, tag, MPI_COMM_WORLD); Zalety: prostota, 1 długa wiadomość Wady: jak przesłać różne typy? Konwersja nieefektywna.

MPI_Pack scalanie danych int MPI_Pack( void* inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outsize, int *pos, MPI_Comm comm) inbuf - bufor wejściowy outbuf - bufor wyjściowy (adres początku) outsize rozmiar bufora wyjściowego (w bajtach) pos pozycja (w bajtach) Dopuszcza np. warunkowe przesłanie danych (odbieram dalej tylko jeśli część danych jest taka, albo taka)

MPI_Pack scalanie danych int position, i, j, a[2]; char buff[1000]; MPI_Comm_rank(MPI_COMM_WORLD, &myrank); if (myrank == 0) { /* SENDER CODE */ position = 0; MPI_Pack(&i, 1, MPI_INT, buff, 1000, &position, MPI_COMM_WORLD); MPI_Pack(&j, 1, MPI_INT, buff, 1000, &position, MPI_COMM_WORLD); MPI_Send( buff, position, MPI_PACKED, 1, 0, MPI_COMM_WORLD); } else /* RECEIVER CODE */ MPI_Recv( a, 2, MPI_INT, 0, 0, MPI_COMM_WORLD); position automatyczna kontrola MPI Można użyć kombinacji: MPI_Recv ( MPI_PACKED) + MPI_Unpack do rozpakowania złożonych struktur.

Typy pochodne danych MPI Alternatywa dla MPI_Pack / MPI_Unpack? MPI pozwala definiować pochodne typy danych Dzięki temu np. tablicę można przesłać jednym MPI_Send / MPI_Recv komunikaty wysyłane tylko w całości wymagają zdefiniowania typu i rejestracji prostrza obsługa po zdefiniowaniu

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_struct int MPI_Type_create_struct( int count, int array_of_blocklengths[], MPI_Aint array_of_displacements[], MPI_Datatype array_of_types[], MPI_Datatype *newtype); MPI_Datatype MPI_AAA; MPI_Type_creat.. &MPI_AAA_; count - liczba bloków danych (blok elementów tego samego typu) array_of_blocklength tablica liczb elementów w bloku array_of_displacements - tablica przesunięć w bajtach dla bloków array_of_types typ elementów w bloku newtype nowy typ danych

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) MPI_Type_indexed MPI_Type_hidndexed podobny do MPI_Type_vector (różna długość bloków)

Projekt

Za tydzień - CUDA Za tydzień 1. wykład z CUDY (Z. Koza) www.ift.uni.wroc.pl/~koma/pr/index.html

CUDA w akcji! LBM na CUDA, przyspieszenie wzgl 1 rdzenia CPU.

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