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