FACULTY OF INFORMATICS Masaryk University IA039: Architektura superpočítačů a náročné výpočty Message Passing Interface Luděk Matýska Jaro 2020 Luděk Matýska • MPI • Jaro 2020 1/42 FACULTY OF INFORMATICS Masaryk University Paralelní programování ■ Data paralelismus ■ Stejné instrukce na různých pocesorech zpracovávaj různá data ■ V podstatě odpovídá SIMD modelu (Single Instruction Multiple Data) ■ Např. paraLeLizace cyklu ■ Task paralelismus ■ MIMD model (Multiple Instruction Multiple Data) ■ Paralelně prováděné nezávislé bloky (funkce, procedury, programy) ■ SPMD ■ Není synchronizován na úrovni jednotlivých instrukcí ■ Ekvivalentní MIMD ■ Message passing určeno pro SPMD/MIMD Luděk Matýska • MPI • Jaro 2020 2/42 FACULTY OF INFORMATICS Masaryk University Message Passing Interface ■ Komunikační rozhraní pro paralelní programy ■ Definováno API ■ Standardizováno ■ Řada nezávislých implementací ■ Možnost optimalizace pro konkrétní hardware Určité problémy se skutečnou interoperabilitou Luděk Matýska • MPI • Jaro 2020 3/42 FACULTY OF INFORMATICS I Masaryk University Vývoj MPI ■ Postupné uvádění verzí ■ Verze 1.0 ■ Základní, nebyla implementována ■ Vazba na jayzky C a Fortran ■ Verze 1.1 ■ Oprava nějvětších nedostatků ■ Implementována ■ Verze 1.2 ■ Přechodá verze (před MPI-2) ■ Rozšíření standardu MPI-1 Luděk Matýska • MPI • Jaro 2020 4/42 FACULTY OF INFORMATICS Masaryk University MPI-2.0 ■ Experimentální implementace plného standardu ■ Rozšíření ■ Paralelní 1/0 ■ Jednosměrné operace (put, get) ■ Manipulace s procesy ■ Vazba na C++ i Fortran 90 Luděk Matýska • MPI • Jaro 2020 5/42 FACULTY OF INFORMATICS I Masaryk University MPI-3.0 ■ Snaha odstranit nedostatky předchozích verzí a reagovat na vývoj v oblasti hardware (zejména muLticore procesory), viz http://www.mpi-forum.org/ ■ Pracovní skupiny ■ Collective Operations and Topologies ■ Backward Compatibility ■ Fault Tolerance ■ Fortran Bindings ■ Remote Memory Access ■ Tools Support ■ Hybrid Programming ■ Persistency ■ Aktuální standard je MPI-3.1 (vydán v červnu 2015) ■ Probíhají práce na nové specifikaci (MPI Fórum) Luděk Matýska • MPI • Jaro 2020 6/42 FACULTY OF INFORMATICS Masaryk University Cíle návrhu MPI ■ Přenositelnost ■ Definice standardu (API) ■ Vazba na různé programovací jazyky ■ Nezávislé implementace ■ Výkon ■ Nezávislá optimalizace pro konkrétní hardware ■ Knihovny, možnost výměny algoritmů ■ Např. nové verze kolektivních algoritmů ■ Funkcionalita ■ Snaha pokrýt všechny aspekty mezi procesorové komunikace Luděk Matýska • MPI • Jaro 2020 7/42 FACULTY OF INFORMATICS I Masaryk University ■ Specifikace knihovny pro podporu předávání zpráv ■ Určena pro paralelní počítače, clustery i Gridy ■ Zpřístupnění paralelního hardware pro ■ Uživatele ■ Autory knihoven ■ Vývojáře nástrojů a aplikací Luděk Matýska • MPI • Jaro 2020 FACULTY OF INFORMATICS Masaryk University Core MPI MPLInit Inicializace MPI MPLComm_Size Zjištění počtu procesů MPLComm_Rank Zjištění vlastní identifikace MPLSend Zaslání zprávy MPLRecv Přijetí zprávy MPLFinaLize Ukončeni MPI Luděk Matýska • MPI • Jaro 2020 9/42 FACULTY OF INFORMATICS Masaryk University Inicializace MPI ■ Vytvoření prostředí ■ Definuje, že program bude používat MPI knihovny ■ Nemanipuluje explicitně s procesy Luděk Matýska • MPI • Jaro 2020 10/42 FACULTY OF INFORMATICS Masaryk University Identifikace prostředí ■ ParaLeLní (distribuovaný) program potřebuje znát ■ Kolik procesů se účastní výpočtu ■ Jaká je „moje" identifikace ■ MPLComm_size(MPLCOMM_WORLD, &size) ■ Vrací počet procesů sdílejících komunikátor MPLCOMM_WORLD (viz dále) ■ MPLComm_rank(MPLCOMM_WORLD, &rank) ■ Vrací číslo procesu Luděk Matýska • MPI • Jaro 2020 11/42 FACULTY OF INFORMATICS Masaryk University Práce se zprávami ■ Primitivní modeL: ■ Proces A posílá zprávu: operace send ■ Proces B přijímá zprávu: operace receive ■ Celá řada otázek: Jak vhodně popsat data? ■ Jak specifikovat proces (kterému jsou data určena) ■ Jak přijímající pozná, že data patří jemu? ■ Jak poznáme (úspěšné) dokončení těchto operací? Luděk Matýska • MPI • Jaro 2020 FACULTY OF INFORMATICS Masaryk University Klasický přístup ■ Data posíláme jako proud bytů ■ Je úkolem posílajícího a přijímajícího data správně nastavit a rozpoznat ■ Každý proces má jedinečný identifikátor ■ Musíme znát identifkátor příjemce/vysílajícího ■ Broadcast operace ■ Můžeme specifikovat příznak (tag) zprávy pro snazší rozpoznání (např. pořadové číslo zprávy) ■ Synchronizace ■ Explicitní spolupráce vysílajícího a přijímajícího ■ Definuje pořadí zpráv Luděk Matýska • MPI • Jaro 2020 13/42 FACULTY OF INFORMATICS Masaryk University Klasický přístup II ■ send(buffer, Len, destination, tag) ■ buffer obsahuje data, jeho délka je ten ■ Zpráva je zaslána procesu s identifikací 'destination ■ Zpráva má příznak tag ■ recv(buffer, maxlen, source, tag, actLen) ■ Zpráva bude přijata do pamětové oblasti specifikované položkou buffer jehož délka je maxlen ■ Skutečná délka přijaté zprávy je actlen (actíen