IA039 Message Passing Interface, MPI 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 jar02oo8 Prostředí/Systémy ■ Parallel Virtual Machine, PVM ■ Primárně určen pro distribuované prostředí ■ Message Passing Interface, MPI ■ Především podpora meziprocesorove komunikace ■ Linda (Koordinační jazyk) Expliciní task parallelismus ■ Komunikace přes sdílenou plochu IA039 3 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 interoperabihtou IA039 4 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 největších nedostatků * Implementována ■ Verze 1.2 * Přechodá verze (přes MPI-2) * Rozšíření standardu MPI-1 IA039 5 Jaro 2008 Aktuální stav - MPI-2.0 ■ Aktuální verze ■ Experimentální implementace plného standardu ■ Rozšíření ■ Paralelní I/O ■ Jednosměrné operace (put, get) ■ Manipulace s procesy ■ Vazba na C++ i Fortran 90 IA039 6 Jaro 2008 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 meziprocesorove komunikace IA039 7 Jaro 2008 Cíle II ■ 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í IA039 8 Jaro 2008 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 IA039 9 Jaro 2008 Inicializace MPI ■ Vytvoření prostředí ■ Definuje, že program bude používat MPI knihovny ■ Nemanipuluje explicitně s procesy IA039 10 Jaro 2008 Identifikace prostředí ■ Paralelní (distribuovaný) program potřebuje znát ■ Kolik procesů se účastní výpočtu ■ Jaká je „moje" identifikace ■ MPLComm_size(MPLCOMM_WORLD5 &size) ■ Vrací počet procesů sdílejících komunikátor MPLCOMIVLWORLD (viz dále) ■ MPLComm_rank(MPLCOMM_WORLD, &rank) ■ Vrací číslo procesu IA039 11 Jaro 2008 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í? IA039 12 Jaro 2008 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 IA039 13 Jaro 2008 Klasický přístup II ■ send(buffer, len, destination, tag) ■ buffer obsahuje data, jeho délka je len ■ Zpráva je zaslána procesu s identifikací 'destination ■ Zpráva má příznak tag ■ recv(buffer, maxien, source, tag, actlen) ■ Zpráva bude přijata do pamětové oblasti specifikované položkou buffer jehož délka je maxien ■ Skutečná délka přijaté zprávy je actlen (actlen