IA039 Message Passing Interface, MPI Paralelní programovaní ■ Data paralelismus ■ Stejne instrukce na ruzných pocesorech zpracovavaj ruzna data ■ V podstate odpovída SIMD modelu (Single Instruction Multiple Data) * Napr. paralelizace cýklu ■ Task paralelismus ■ MIMD model (Multiple Instruction Multiple Data) ■ Paralelne provadeene nezavisle bloký (funkce, procedurý, programý) ■ SPMD ■ Není sýnchronizovan na urovni jednotlivých instrukcí ■ Ekvivalentní MIMD IAossMessage passing urceno pro SPMD/MIMD jaro2oio Prostředí/Systémy ■ Parallel Virtual Machine, PVM ■ Primarne urCen pro distribuované prostředí ■ Message Passing Interface, MPI ■ Předevsím podpora meziprocesorove komunikace ■ Linda (Koordinacní jazyk) ■ Expliciní task parallelismus ■ Komunikace pres sdílenou plochu IA039 3 Jaro 2010 Message Passing Interface ■ Komunikační rozhraní pro paralelní programy ■ Definovano API ■ Standardizovano ■ Rada nezavislyčh implementací * MoZnost optimalizace pro konkrétní hardware * Určite probiemy se skutečnou interoperabilitou IA039 4 Jaro 2010 Vývoj MPI ■ Postupné uvádění verzí ■ Verze 1.0 * Základní, nebylá implementovaná * Vázbá ná jáyzky C á Fortran ■ Verze 1.1 * Oprává nejvetSích nedostátkU * Implementováná ■ Verze 1.2 * Přechodá verze (pres MPI-2) * RozSírení stándárdu MPI-1 IA039 5 Járo 2010 Aktuální stav - MPI-2.0 ■ Aktuální verze ■ Experimentální implementace plneho štandardu ■ Rozšírení ■ Paralelní I/O ■ Jednosmerne operace (put, get) ■ Manipulace s procesy ■ Vazba na C++ i Fortran 90 IA039 6 Jaro 2010 Cíle návrhu MPI Přenositelnost ■ Definice standardu (API) ■ Vazba na rUzne programovací jazyky ■ Nezavisie implementace Vykon ■ Nezavisla optimalizace pro konkrétní hardware ■ Knihovny, moznost vymeeny algoritmu * Např. nove verze kolektivních algoritmu Funkcionalita ■ Snaha pokryt vsechny aspekty meziprocesorove komunikace IA039 7 Jaro 2010 Cíle II Specifikace knihovny pro podporu předávání zpráv Určena pro paralelní poCítaCe, clustery i Gridy Zpřístupnění paralelního hardware pro ■ UZivatele ■ Autory knihoven ■ Vyvojaře nastrojU a aplikací IA039 8 Jaro 2010 Core MPI MPLInit Inicializace MPI MPLComm_Size Zjištění poCtu procesů MPLComm_Rank Zjištění vlastní identifikace MPLSend Zaslaní zpravy MPLRecv Přijetí zpravy MPLFinalize Ukonceni MPI IA039 9 Jaro 2010 Inicializace MPI ■ Vytvoření prostredí ■ Definuje, Ze program bude pouZívat MPI knihovny ■ Nemanipuluje explicitne s procesy IA039 10 Jaro 2010 Identifikace prostředí ■ Párálelní (distribuovány) prográm potřebuje znát ■ Kolik procesu se ucástní vypoctu ■ Jáká je „moje" identifikáce ■ MPLComm_size(MPLCOMM_WORLD, &size) ■ Vrácí pocet procesu sdílejících komunikátor MPLCOMMLWORLD (viz dále) ■ MPLComm_ránk(MPLCOMM_WORLD, &ránk) ■ Vrácí císlo procesu IA039 11 Járo 2010 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 vhodne popsat data? ■ Jak specifikovat proces (kterému jsou data urcena)? ■ Jak prijímající pozná, Ze data patrí jemu? ■ Jak poznáme (uspesne) dokoncení techto operací? IA039 12 Jaro 2010 Klasický přístup ■ Data posílame jako proud bytU ■ Je ukolem posílajícího a přijímajícího data spravne nastavit a rozpoznat ■ Kazdy proces ma jedinečny identifikator ■ Musíme znat identifkator príjemce/vysílajícího ■ Broadcast operace ■ Muzeme specifikovat príznak (tag) zpravy pro snazsí rozpoznaní (napr. poradove císlo zpravy) ■ Synchronizace ■ Explicitní spoluprace vysílajícího a přijímajícího ■ Definuje pořadí zprav IA039 13 Jaro 2010 Klasický přístup II ■ send(buffer, len, destination, tag) ■ buffer obsahuje data, jeho delka je len ■ Zprava je zaslana procesu s identifikací 'destination ■ Zprava ma príznak tag ■ recv(buffer, maxlen, source, tag, actlen) ■ Zprava bude prijata do pameřove oblasti specifikovaná polozkou buffer jehoz delka je maxlen ■ Skutecna delka přijata zpravy je actlen (actlen