Bevezetés. Bevezetés. Az üzenetküldéses paradigma A teljesítménynövekedés eredménye:

Hasonló dokumentumok
Párhuzamos és Elosztott Rendszerek II

Bevezetés a párhuzamos programozási koncepciókba

9. MPI

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

A számítási grideket alkotó gépek erısen heterogén környezetében megvalósíthatatlan hogy minden gép ugyanazt a fájlrendszert lássa.

Adatstruktúrák, algoritmusok, objektumok

PVM programok áthelyezése GRID környezetbe

Csoportos üzenetszórás optimalizálása klaszter rendszerekben

QuickSend. , és SMS küldés program. Felhasználói kézikönyv. Program dokumentáció 2008 JMGM Magyarország Informatikai Kft.

Operációs rendszerek

Operációs rendszerek. Az X Window rendszer

Párhuzamos programozási platformok

A WINETTOU Távközlési Szolgáltató Korlátolt Felelısségő Társaság. Internet szolgáltatásra vonatkozó Általános Szerzıdéses Feltételek

Szakdolgozat. Brosch Balázs 2009.

Ellenőrzőpont támogatás PVM alkalmazások számára a magyar ClusterGriden

Mobil Peer-to-peer rendszerek

Kommunikáció. 3. előadás

Számítógépes Hálózatok. 5. gyakorlat

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Programozás I. 5. Előadás: Függvények

Párhuzamos programozási platformok

Az objektumorientált megközelítés elınye: Hátránya:

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

Irányítástechnika Elıadás. PLC-k programozása

A futtatás elıtt az alábbi két dolgot kell tenni:

A LOGSYS GUI. Fehér Béla Raikovich Tamás, Laczkó Péter BME MIT FPGA laboratórium

Ezeket a kiemelkedı sebességő számítógépeket nevezzük szuperszámítógépeknek.

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Bevezetés az SAP világába. 5. Kommunikációs és integrációs technológiák

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Occam 1. Készítette: Szabó Éva

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

2. fejezet Hálózati szoftver

Elosztott rendszerek. Az elıadás. Az elosztott rendszer definíciója. Köztesrétegként felépülı elosztott rendszer

GoWebeye Monitor Release Üzenetküldés

OOP. Alapelvek Elek Tibor

Java II. I A Java programozási nyelv alapelemei

Könyvtári kölcsönzések kezelése

UNIX: folyamatok kommunikációja

Operációs rendszerek. Az NT folyamatok kezelése

Hardver és szoftver követelmények

Hálózati architektúrák laborgyakorlat

Operációs rendszerek. 6. gyakorlat: Processzusok közti kommunikáció (osztott memória, üzenetsor)

Programozás C++ -ban

Operációs rendszerek Folyamatok 1.1

Párhuzamos és Elosztott Rendszerek

A kontrolladat-szolgáltatás elkészítése

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Együttmőködési rendszerek, csoporttevékenység támogatása 1. rész

Párhuzamos és Grid rendszerek

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Az adatszolgáltatási rendszer kliens felülete

Irányítástechnika Elıadás. PLC rendszerek konfigurálása

Információ és kommunikáció

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Iman 3.0 szoftverdokumentáció

Architektúra, megszakítási rendszerek

A Vizsgálóhelyi nyilvántartó program Online Telepítıje

Hardver leíró nyelvek (HDL)

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Java I. A Java programozási nyelv

Java. Java Message Service. ANTAL Margit. JMS API technológia. ANTAL Margit. Sapientia - EMTE

Megoldás. Feladat 1. Statikus teszt Specifikáció felülvizsgálat

Erőforrás gazdálkodás a bevetésirányításban

Broadcast alkalmazás készítése

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Irányítástechnika Elıadás. PLC-k programozása

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

univerzum Standard,Vanilla,PVM,MPI,Globus és Java. condor_shadow

Földmérési és Távérzékelési Intézet

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

TESZ INTERNET ÉS KOMMUNIKÁCIÓ M7

Számítástechnika nyugdíjasoknak Február 16.

Számítógépes munkakörnyezet II. Szoftver

Internet of Things 2

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Párhuzamos és Grid rendszerek. Parallel programozás áttekintése. Történelmi áttekintés

Autóipari beágyazott rendszerek. Local Interconnection Network

Könyvtári címkéző munkahely

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Folyamatok. 6. előadás

A vezérlő alkalmas 1x16, 2x16, 2x20, 4x20 karakteres kijelzők meghajtására. Az 1. ábrán látható a modul bekötése.

Tisztaszınyeg nyilvántartó

alkalmazásfejlesztő környezete

Verzió: 1.7 Dátum: Elektronikus archiválási útmutató

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

(kernel3d vizualizáció: kernel245_graph.mpg)

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Programozás C++ -ban 2007/7

Belépés a rendszerbe. Gyors menü

NetPay technikai áttekintés partnereink számára

P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához. Rendszerterv. Sipos Gergely

8. gyakorlat Pointerek, dinamikus memóriakezelés

Object Orgy PROJEKTTERV 1 (9) Adattípusok menedzselése Palatinus Endre

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Átírás:

Bevezetés Dr. Mileff Péter A hardver fejlıdésének ellenére nem mondhatunk le a párhuzamos feldolgozás által nyújtott teljesítménynövekedésrıl. A párhuzamosítás több szinten történik: egyetlen processzoron belüli párhuzamosítástól egészen a szuper-számítógépek ill. komplett számítóközpontok szintjéig. A különbözı szintő párhuzamosítások függnek egymástól eredıjük jelentkezik. 2 Bevezetés A teljesítménynövekedés eredménye: (1) Korábban számítógéppel megoldhatatlan feladatok megoldása válik lehetıvé. (2) Egyes problémák sokkal jobb minıségben oldhatók meg. (3)bizonyos megoldási idı szempontjából kritikus feladatok gyorsabban oldhatók meg. fontos például valós idejő alkalmazások esetén. Az üzenetküldéses paradigma A párhuzamos programot felfoghatjuk: egymástól független, egymással kommunikáló szekvenciális folyamatok halmazaként. A kommunikációt tekintve ekkor kétfajta programozási paradigmáról beszélhetünk: Osztott memóriás modell: a futó folyamatok ugyanahhoz a (nem feltétlenül fizikai) memóriához férnek hozzá. Üzenetváltásos modell: minden egyes folyamat a többi által nem elérhetı memóriát használ. a kommunikációt pedig a folyamatok közötti (szinkron, aszinkron) üzenetek biztosítják. 3 4 1

Az üzenetküldéses paradigma Ha a modellünk üzenetváltásos modell, nem jelenti feltétlenül azt, hogy végül az implementált programnak is feltétlenül üzenetváltásos hardveren kell futnia. Azonban egyszerőbben és általában hatékonyabban implementálhatók üzenetváltásos architektúrákon. Üzenetküldő rendszerek szabványai A rendszerek fejlesztését alapvetıen két fontos irány segítette. 1. Parallel Virtual Machine (PVM) könyvtár Alapkoncepciója: heterogén hardverrel és szoftverrel rendelkezı, különbözı architektúrájú számítógépekbıl egy virtuális gépet épít fel. 2. Message Passing Interface (MPI) Jelenleg az üzenetküldéses paradigma szabványa. 1991 elsı verzió. 5 6 PVM: Parallell Virtual Machine Általában egy üzenetküldéses rendszer konkrét megvalósításának tekintik. Helyesebb ha egy üzenetküldéses rendszer specifikációjaként fogjuk fel. (PVM kézikönyv) Fejlesztı: Oak Ridge National Laboratory elsı (nem nyilvános) változat 1989-ben. Elsı publikus változat (2.0) a University of Tenessee-n 1991-ben. Teljesen újraírt 3-as sorozatszámú változat 1993. A PVM rendszer Célja: egy olyan szoftverrendszer kifejlesztése, amely támogatja az elosztott alkalmazások készítését. Fıleg UNIX rendszerekben. Csak kevés hagyományos értelemben vett operációs rendszer szolgáltatást biztosít legfıbb profilja az elosztott alkalmazáskomponensek kommunikációjának megszervezése. Virtuális számítógép koncepció: lehetıséget ad több számítógép erıforrásainak összevonására. Egységes interface az összekapcsolódáshoz. 7 8 2

A PVM rendszer C nyelven készült: az alaprendszer a C és a Fortran nyelvet támogatja Minden modern nyelvhez készült interface. C++ nyelvhez: PVM++ függvénykönyvtár. Alapkoncepciója a virtuális gép fogalma. A virtuális gépet erıforrások egy halmaza alkotja. A PVM tervezésekor az egyik legfıbb alapelv a heterogenitás volt, egyazon virtuális gép elemei különféle módon lehetnek heterogének. Heterogenitások Architektúra: támogatott architektúrák a PC osztályú számítógépektıl egészen a szuperszámítógépekig terjednek. Adatformátum: biztosítani kell, hogy egy üzenet különbözı architektúrájú feladója és címzettje megértik egymást. Számítási sebesség: gondoskodni kel róla, hogy a virtuális gépet alkotó számítógépek számítási teljesítményüknek megfelelıen részesednek a feladatokból. 9 10 Heterogenitások Processzorterheltség: A virtuális gépet nem feltétlenül dedikált számítógépek alkotják, más felhasználók is használhatják ıket. A gépek terheltsége folyamatosan változhat. Hálózati terheltség: A virtuális gép részei különbözı hálózati architektúrákkal rendelkezhetnek nagyon különbözı hálózati teljesítményt eredményezhet az egyes gépek között. A heterogenitás jól kihasználható A rendszer szerkezete Két fıbb komponensbıl áll: Eljáráskönyvtár: amit a PVM-et használó alkalmazásokhoz hozzá kell linkelni. PVM szolgáltatások. Önállóan futtatható PVM-démon (pvmd) gépenként és felhasználónként egy-egy példányban fut a PVM szolgáltatások tényleges implementációja itt van. A legelsı gépen elindított pvmd démon a mester pvmd (master pvmd) démon. Szerepe kitüntetett. A további pvmd-ket általában a mester pvmd indítja. 11 12 3

A pvmd folyamatok A felhasználó jogaival futnak (Unix terminológia) Így az egyes felhasználók virtuális gépei teljesen függetlenek egymástól, konfigurációjuk is különbözı lehet. A PVM futási egysége a taszk Minden taszkot az adott gépen futó pvmd indít el. Minden taszk és pvmd egy egyedi azonosítóval van ellátva, amely egy 32 bites egész szám. Oka: A PVM elterjedtsége A szabad elérhetısége. Számos hardvergyártó a többprocesszoros/elosztott számítógépeihez ilyen interfészt (is) biztosít. Az elkészített program hordozható is. A UNIX operációs rendszert bıvíti ki. Ezzel lehetıvé válik párhuzamos programok szabványos UNIX környezetbe történı beágyazására. 13 14 PVM a gyakorlatban PVM a gyakorlatban Két számítógépbıl egyetlen virtuális gép: mindkét gépen elindítjuk a (megfelelıen felkonfigurált) PVM-démont, majd el kell indítani a PVM-et használó alkalmazásokat. Ha egy gépet több különbözı felhasználó akar egy virtuális géppé összekapcsolni: mindegyik felhasználónak saját PVM-démont kell indítania Felhasználóként viszont elég csak egy PVMdémont futtatnia. ez megszervezi a felhasználó összes (akár több is!) elosztott alkalmazásának futtatását. 15 A PVM nem biztosít eszközöket összetett alkalmazások komponenseinek automatikus párhuzamosításához. Az egyes komponenseket különálló programokként kell megírni. (pl. Unix processzként) Szinkronizációra/adatcserére kell a PVM-et használni. 16 4

PVM támogatásai PVM virtuális gép vázlatos felépítése Egy mezei UNIX processz bekapcsolódjon a virtuális gépbe. Egy PVM-be kapcsolódott UNIX processz kilépjen a PVM által biztosított virtuális gépbıl. Lehetıség a PVM-processzek egymás közti kommunikációjára. PVM-processzek úgynevezett PVM-processzcsoportokba kapcsolására. Biztosított egy-egy ilyen csoport összes tagja részére az üzenetküldés is. Egy-egy csoportba új tag felvétele és tagok törlése a csoportból. 17 18 PVM üzenetek A PVM kommunikáció egysége az üzenet. A kommunikáció menete: Az üzenet elıször mindig a küldı taszk pvmd folyamatához kerül, A pvmd fogja továbbítani azt a címzett pvmd folyamatához, amely végül eljuttatja a címzetthez. A két pvmd közötti kommunikáció minden esetben UDP protokollon keresztül történik. elınye, hogy egyetlen kapcsolódási végpont segítségével lebonyolítható az összes partnerrel a kommunikáció. TCP protokoll N gépbıl álló virtuális gép esetén minden egyes gépen N-1 darab kapcsolódási végpontot igényelne. PVM üzenetek UDP protokoll miatt a PVM-nek kell gondoskodnia a csomagok veszteségmentes és sorrendhelyes célba juttatását. A taszkok és a lokális pvmd közötti kommunikációhoz TCP-t vagy UNIX domain socketeket használ. Az üzenetek küldése és fogadása aszinkron módon történik. Az újabb PVM verziókban lehetıség van az egyes taszkok közötti közvetlen kommunikációra is ehhez a PVM a TCP protokollt használja. 19 20 5

PVM üzenetek Üzenet küldés: pvm_send hívás. Azonnal visszatér mihelyt az üzenetet tároló pufferbıl az üzenet rendszerpufferbe másolása befejezıdött. Üzenetek fogadás: pvm_recv hívás. A lokális pvmd-tıl próbálja átvenni az üzenetet. Az üzenetekhez ún. üzenetcímkét (message tag) rendelhet a küldı taszk. A fogadó taszk pedig a küldı taszk azonosítója illetve az üzenetcímke alapján szelektálhat, hogy éppen milyen üzenetet szeretne fogadni. PVM indítása A PVM virtuális gép felélesztéséhez el kell indítanunk az ehhez szükséges programot: PVM-démont: pvmd3 PVM konzol: pvm interaktívan kapcsolhatunk és törölhetünk gépeket a virtuális gépbıl, interaktívan indíthatunk (és lıhetünk le) PVM-processzeket. halt: lelövi az összes futó PVM-processzünket, és kilép a PVMbıl, leállítja a PVM démont. spawn: új PVM-processzt indít. kill: egy futó PVM-processzt lelı. reset: lelövi az összes futó PVM-processzt a konzol kivételével, a PVM-démonokat pedig nem bántja. 21 22 A PVM processzek kezelése További függvények Minden PVM-processz rendelkezik egy egész típusú processz-azonosítóval (tid). Hasonló a Unix pid szerepéhez, de nincs köze hozzá. Új processz létrehozása (pvm_spawn): numt = pvm_spawn( "progi1", NULL, PvmTaskHost, "macska", 1, &tids[0]); Elindít a macska nevő hoston egy új PVM-processzt a progi1 nevő programból. pvm_exit: Egy PVM-processz a pvm_exit eljárás végrehajtásával léphet ki a PVM felügyelete alól. int pvm_spawn(char *task, char **argv, int flag, char *where, int ntask, int *tids); task: az elindítandó PVM-processzt tartalmazó végrehajtható fájl neve. argv: az átadandó program-argumentumok. flag: speciális igények jelzése az új PVM-processz elindításával kapcsolatban. where: hol akarjuk a programunkat elindítani. ntask: hány példányban akarjuk a PVM-processzt elindítani. tids: az elindított PVM-processzek azonosítói (tid-ek). Visszatérési érték az elindított taszkok száma. 23 pvm_mytid: a saját tid lekérdezése. A függvény visszatérési értéke az új PVM-processz tid-je. Nincs paramétere. pvm_parent: Egy PVM-processz a szülıjének a tid-jét kérdezheti le. Visszatérési értéke a szülıjének a tid-je. Nincs paramétere. pvm_kill: Lelövi azt a PVM-processzt, amelynek a tid-jét megadtuk az argumentumában. 24 6

A PVM kommunikáció Kommunikáció: primitív, UNIX signal-okat használó kommunikációs eljárások összetettebb adatszerkezetek/adatterületek processzek közötti mozgatására is eszközök. pvm_sendsig: A függvény segítségével egy adott signalt (UNIX signalt) küldhetünk valamelyik PVM-processznek. pvm_notify: int pvm_notify(int about, int msgtag, int ntask, int *tids); Az about argumentumban specifikált esemény bekövetkeztekor egy üzenetet küld a tids vektorban megadott tid-del azonosított PVM-processzeknek. mstag az üzenet azonosítója. Puffer allokálás/deallokálás Üzenetküldés céljából több üzenet-puffert is allokálhatunk: kijelölhetjük, hogy melyik legyen az aktív küldési illetve aktív fogadási puffer. Küldési: adatok berakása függvényekkel, küldés céljából. Fogadási: adatok olvasása egy megkapott üzenetbıl. Ezek akár meg is egyezhetnek. 25 26 Puffer allokálás/deallokálás új üzenet-puffer létrehozása: pvm_mkbuf Argumentuma egy egész szám: a puffer tartalmának az összeállítási módját értelmezését/reprezentációját írja le. Visszatérési értéke a létrehozott buffer azonosítója. Buffer felszabadítása: pvm_freebuf Argumentuma az eldobandó üzenet-puffer egyedi azonosítója. Küldési buffer lekérése: pvm_getsbuf Nincs argumentuma. Visszatérési értéke az aktuális (aktív) küldési puffer azonosítója. Fogadási buffer lekérése: pvm_getrbuf Nincs argumentuma. Visszatérési értéke az aktuális (aktív) fogadási puffer azonosítója. Puffer allokálás/deallokálás Aktív küldési puffer megváltoztatása: pvm_setsbuf: Argumentuma megadja az új aktív küldési puffer egyedi azonosítóját. Visszaadja a korábban aktív küldési puffer azonosítóját. Az aktív fogadási puffer megváltoztatása: pvm_setrbuf: Argumentuma megadja az új aktív fogadási puffer egyedi azonosítóját Visszaadja a korábban aktív fogadási puffer azonosítóját. 27 28 7

Processz csoportok A PVM rendszer lehetıséget nyújt processz-csoportok szervezésére. Egy PVM processz bármikor beléphet egy csoportba - ezzel csoporttaggá válik - illetve bármikor kiléphet egy csoportból. A csoportoknak név adható. ASCII karakterekbıl. Mőveletek: Üzenet küldése az összes csoporttag számára. az üzenet küldıje nem kell, hogy tagja legyen a csoportnak. A csoporttagok állapotának szinkronizálása. Processz csoport műveletek pvm_joingroup: egy processz csoportaggá válik. visszatérési értéke egy csoporton belüli azonosító szám. pvm_lvgroup: kilépés a csoportból. Argumentuma a csoport neve. pvm_gsize: egyetlen argumentuma a csoport neve. pvm_bcast: üzenetküldés a csoport összes tagjának. elsı argumentum a csoport neve; a második argumentum az üzenet típusának az azonosítója. pvm_barrier: csoport szinkronizációja elsı argumentum a csoportnév; a második argumentum pedig egy szám (count). a hívó PVM-processz blokkolni fog egészen addig, amíg (count) darab csoporttag meg nem hívja e függvényt. 29 30 A PVM célja: Összefoglalás egy egységes felületet biztosítása a párhuzamos programok fejlesztésére valóban párhuzamos architektúrákon, illetve hálózatba kapcsolt számítógépeken. Szinte minden párhuzamosságot igénylı feladat megoldható több-kevesebb ráfordítással. dinamikus folyamat kezelése miatt kliens/szerver alkalmazások írására is alkalmas lehet. csak programok párhuzamosságát támogatja Nincsenek benne eszközök adat párhuzamosság, illetve folyamat-szál, utasítás szintő párhuzamosság támogatására. Csak aszinkron, pufferelt üzenetküldés a kommunikációra. az üzenetküldés szimmetrikus, és sorrendtartó. 31 32 8

Az MPI MPI = rutinkönyvtár szabvány. üzeneteken alapuló kommunikáció szintaxisát és szemantikáját definiálja. Története: 1992-ben megalakult MPI Forum, amelynek számos nagy hardvergyártó cég a tagja lett. 1994 a szabvány elsı változata: MPI-1, majd MPI-2. Kifejlesztésének célja: Egy széles körben használható, hordozható szabványt készítsenek üzenetek küldésére. Az MPI A rutinkönyvtár implementációi két csoportba oszthatók: 1) A hardvergyártók által készített, az általuk gyártott hardverre erısen optimalizált változatok. 2) Olyan fejlesztések, ahol elsıdleges cél a lehetı legtöbb architektúra támogatása egy függvénykönyvtárban. A különbözı implementációival készített MPI programok egymással kommunikálni nem képesek. A programok csak forrásszinten hordozhatók. 33 34 Erősségek/hiányosságok Erısségek: A kommunikációs primitívek nagy száma. Erısen típusos üzenetküldés és a kollektív kommunikációs lehetıségek. Hiányosságok: a szabvány nem definiál eljárásokat folyamatok indítására, illetve dinamikus kezelésére. Az MPI-2 (1997) ezt pótolja nagyrészt, de ennek máig kevés implementációja van. ezek is csak adott hardverre optimalizált változatok. Hibatőrés támogatása is csak az MPI-2 tıl. MPI-1 szabvány elıírja a C és Fortran nyelvek támogatását, ehhez az MPI-2 szabvány a C++ nyelv támogatását is hozzávette. Áttekintés A rutinkönyvtárral a következı feladatokat lehet megoldani: Pont-pont közötti kommunikáció Üzenetekben lévı típusok megadása Kollektív kommunikáció Csoportok, környezetek kezelése Folyamatok topológiába rendezése Néhány kiegészítı rutin a program környezetéhez Segítség a teszteléshez 35 36 9

Áttekintés Az MPI nem definiál eljárásokat folyamatok indítására, illetve dinamikus kezelésére. A folyamatok általában önálló programok, melyeket egyszerre indítanak el. A programok nem feltétlenül azonosak, tehát MIMD stílusban is lehet párhuzamos programokat írni ezzel a könyvtárral. A programok belsı szerkezetét sem definiálja az MPI, tehát lehetnek szekvenciálisak, de akár többszálúak is, az MPI mégis egy önálló folyamatnak tekinti. Többszálúságra nincs semmilyen támogatás, de az implementációk általában ügyelnek rá, hogy a rutinok ne okozzanak bajt ilyen környezetben sem. Implementációk Sok párhuzamos számítógépgyártó elkészítette a saját eszközére optimalizált változatot. ezek mind kereskedelmi termékek. Publikus változatok: Argonne National Laboratory / Missipi State University: MPICH Edinburgh Parallel Computer Centre: CHIMP Ohio Supercomputer Center: LAM Missisipi State University: UNIFY ez csak a szabvány egy részét valósítja meg a PVM-re építve. University of Nebraska at Omaha: WinMPI 37 38 Felhasználói felület A felületben lévı rutinokra a következı fogalmak használatosak: lokális egy eljárás, ha csak egy folyamat belsı adataitól függ, és befejezéséhez nem igényel kommunikációt más programokkal. nem-lokális egy eljárás, ha a benne lévı mővelet más folyamatokkal való kommunikációt is igényel. kollektív típusú egy rutin, ha egy csoportban minden folyamatnak meg kell ıt hívni, hogy befejezıdhessen. Felhasználói felület A szabvány a nyelvek közötti átjárhatóság biztosítása érdekében törekedett az egységes felület kialakítására, ezért nem használják ki mindig az adott nyelv által biztosított lehetıségeket maximálisan. A szabványban leírt rutinok alakjai: C nyelvben, ahol a visszatérési érték a rutin lefutásáról ad információt: int MPI_Xxxxxxxx(... ); 39 40 10

Kezdet és vég Az MPI függvények használata elıtt meg kell meghívni az MPI könyvtár inicializálását: MPI_Init: parancssori argumentumokkal is foglalkozik, át kell adni neki. A program normális befejezése: MPI_Finalize A lefoglalt erıforrások felszabadítása. Hiba esetén a párhuzamos program futása megszakítható az MPI_Abort eljárással. nem csak az adott folyamat, hanem a hozzá tartozó folyamatok is leállíthatók. Paramétere: comm - egy kommunikációs közeget ír le. #include mpi.h Példaprogram void main(int argc, char *argv[]) { MPI_Init(&argc, &argv); /* a program utasításai ide kerülnek */ MPI_Finalize(); } 41 42 Pont-pont kommunikáció Mindig két taszk vesz részt benne. Az egyik küldi a másik pedig fogadja az üzenetet. A pont-pont kommunikációk mindig megırzik az üzenetek sorrendjét. A legegyszerőbb küldı rutin az MPI_Send Az MPI könyvtárban definiált típusú adatvektor elküldésére alkalmas. Címzés: a fogadó sorszáma, az üzenet típusa, és az üzenet továbbítására szolgáló kommunikátor. Ez egy blokkoló rutin. Pont-pont kommunikáció Egy üzenet adattípusa: MPI_Datatype Új típusok is kialakíthatók struktúrák, illetve tömbrészletek leírására. Egy üzenetben mindig benne van, hogy melyik folyamat küldte, mi az üzenet típusa, ki a címzett és mi a kommunikátor. Üzenet fogadása: MPI_Recv Blokkoló vétel. Az üzenet forrása és típusa elıírható, az MPI_ANY_SOURCE, illetve az MPI_ANY_TAG használatával bárkitıl bármilyen üzenetet is lehet fogadni. 43 44 11

Pont-pont kommunikáció MPI-ban a vett adatok egyszerő adattípusának meg kell egyeznie a küldött adatok egyszerő adattípusával. egy bonyolult struktúra, vagy tömb vétele a küldésnél felsorolt típusokra lebontva történik. két { int, char } struktúra vehetı egyetlen { int,char,int,char } struktúraként. Az MPI nem gondoskodik típuskonverzióról - int típusú adatot nem lehet double-ként venni. Az eljárásnak a használt kommunikátort is specifikálni kell. A kommunikátorból megállapítható, hogy a folyamatok azonos architektúrákon futnak-e. Pont-pont kommunikáció Típusai: Pufferelt vagy nem Pufferelt üzenetküldés: lokális eljárás, mert az üzenet továbbítása nélkül is véget érhet, hiszen egy helyi tárolóban még megırzıdhet annak tartalma. Szinkron vagy aszinkron: Szinkron kommunikáció nem lokális; csak akkor fejezıdhet be, ha az üzenetet ténylegesen vették egy MPI_Recv rutinnal. A kommunikáció az MPI_Recv elıtt is elkezdıdhet. Ready: Ez a kommunikáció, csak akkor sikeres, ha az üzenet küldést a másik oldal már várja, azaz végrehajtott már egy MPI_Recv függvényhívást. Ha a vevı oldal ezt nem tette meg akkor a mővelet eredménye definiálatlan. ha nem, automatikus konverzió. 45 46 Pont-pont kommunikáció A pufferelt, ready és szinkron üzenetküldések alakja csak a nevében tér el a MPI_Send-tıl: MPI_Bsend - pufferelt. MPI_Ssend - szinkron. MPI_Rsend ready. Nem blokkoló rutinok A rutinoknak vannak nem blokkoló változataik. Ekkor a mővelet két részre bontható: egy kezdeti inicializáló rész, a mővelet befejezıdését vizsgáló részre. Az ilyen felbontásnak akkor van értelme ha egy mővelet hosszú ideig tart és a várakozás helyett lehet hasznos számításokat is végezni. A nem blokkoló rutinok mind egy MPI_Request típusú kérelmet használnak a háttérben futó mővelet jellemzıinek tárolására. 47 48 12

Nem blokkoló üzenet küldése Nem blokkoló üzenetküldés: MPI_Isend Paraméterek egyeznek a blokkolóval kivéve az utolsót. Az eljárás lefutása során inicializálja az utolsó paraméterként megadott MPI_Request típusú struktúrát. Ez tárolja a függıben lévı, vagy háttérben futó eljárás jellemzıit. Ennek vizsgálatával megállapítható, hogy az üzenetküldés befejezıdött-e, vagy elıkerült-e valamilyen hiba. Az inicializálás után visszatér, és az üzenetküldés folyamata a program további futásával párhuzamosan fog megtörténni. A küldendı adatokat a mővelet befejezéséig nem illik bántani nem definiált, hogy mikor olvassa ki azokat a rendszer. MPI_Ibsend, MPI_Issend, MPI_Irsend Háttérben futó eljárás vizsgálata Az MPI számos lehetıséget biztosít. Pl.: A mővelet végének megvárása, blokkolva a programot: MPI_Wait Az MPI_Test eljárással meg lehet vizsgálni egy mőveletet. Nem blokkol. MPI_Request_free szolgál a háttérben futó mővelethez tartozó jellemzıket leíró struktúra felszabadítására. Ha egy programban több nem blokkoló mővelet is van, akkor ezeket egyszerre is lehet vizsgálni: bármelyik befejezıdését meg lehet várni az MPI_Waitany eljárással, illetve bármelyik lefutását lehet vizsgálni az MPI_Testany rutinnal. Csak egyetlen nem blokkoló mővelet befejezıdését figyelik. Összes mővelet megvárása: MPI_Waitall. 49 50 Az üzenetekben lévő típusok Az üzenetek csak az MPI által ismert adattípusokat tartalmazhatják. A rendszer csak alaptípusokat tartalmaz. Ha többre van szükség, akkor típuskonstrukciós mőveletekre van szükség. Új MPI adattípus létrehozása: MPI_Datatype átlátszatlan típusból. A létrehozás után a típust engedélyeztetni kell az MPI_Type_commit eljárással. Elismerteti a rendszerben az új típust. Az új típus bárhol használható az eddigi egyszerő típusok helyett, akár egy újabb típus létrehozására is. MPI adattípus Egy egyszerő típusokból álló típus térkép: Leírja, hogy egymás után milyen egyszerő adattípusok vannak, és az egyes elemek milyen eltolással vannak eltárolva. Egy adott adattípussal küldött MPI üzenet csak olyan MPI adattípussal vehetı, amiben az egyszerő adattípusok sorrendje és száma megegyezik a küldött MPI típuséval. Az MPI számos függvény biztosít az adatok menedzselésére: Pl.: MPI_Type_contiguous, MPI_Type_vector, MPI_Type_struct, MPI_Type_free, stb 51 52 13

Üzenet összeállítása Egy üzenet összeállítására az MPI_Pack eljárást lehet használni. Ez a rutin lényegében az MPI_Send-hez hasonló formában megadott adatokat másol be a felhasználó által elıre lefoglalt puffer területre. Többször meghívva tetszıleges adatokat lehet berakni egy üzenetbe. Az így elıkészített üzenet puffert a szokásos MPI_Send rutinnal lehet elküldeni, csak MPI_PACKED paramétert kell megadni az üzenet adattípusaként. Az MPI_Unpack eljárással egy MPI_PACKED típussal vett üzenetbıl lehet kipakolni az adatokat. Szintaxisa a bepakolásra hasonlít. A pakolt üzenetek küldésének kétségtelen elınye, hogy több lépésben is össze lehet állítani az üzenetet, de így az MPI semmilyen típusellenırzést nem tud végezni a küldött üzenetben. Kollektív kommunikáció Kiemelt hangsúly a kommunikációs eszközökre. A PVM-hez hasonló szolgáltatások, függvények. Több folyamat szinkronizációja: MPI_Barrier. A rutin addig vár, ameddig az összes folyamat meg nem hívja ugyanezt az eljárást. Eljárás adatok lemásolása: MPI_Bcast. Egy kijelölt folyamat adatterülete lemásolódik a mőveletben résztvevı összes folyamat adatterületére. közösen használt változók, paraméterek elterjesztésére szolgálhat. Adatdarabkák összegyőjtése: MPI_Gather. Minden folyamat egy adott mennyiségő adatot küld el, ami egy kijelölt folyamatban összegyőlik. 53 54 Csoportok, környezetek kezelése Csoportok, környezetek kezelése Az MPI lehetıséget biztosít folyamat csoportok, illetve kommunikációs környezetek kialakítására. Kommunikációs környezetek: Arra szolgálnak, hogy egymástól független kommunikációs rétegeket lehessen kialakítani egy programon belül, akár azonos folyamatok között. Ez a megosztás nem vertikális - mint a csoportosítás -, hanem horizontális. Üzeneteket csak egy kommunikációs környezetben belül lehet küldeni más környezet számára nem látható és annak mőködését nem zavarja. Folyamatok csoportba rendezésével egyes problémák egyszerőbben leírhatók. A csoportba rendezés emellett lehetıséget biztosít a rendszer számára magasabb szintő optimalizációra. 55 MPI-ban a csoportok és a környezetek összefogására szolgálnak a kommunikátorok. 56 14

Csoportok Az MPI-ban folyamatokat csoportokba lehet összefogni, hogy ezeket együttesen lehessen kezelni a program hátralévı részében. A csoportok folyamatok rendezett halmazai, melyben minden folyamatnak egy sorszáma van. Csoportok leírása: MPI_Group átlátszatlan típussal. A csoportok kialakítására szolgáló mőveletek mind lokálisak. Nem igényelnek kommunikációt más folyamatokkal. Az így létrehozott csoportok folyamatonként eltérıek lehetnek. Halmazműveletek A csoportokra többféle halmazmőveletet támogat az MPI. Egyéb mőveletek: Csoportok összehasonlítása:mpi_group_compare Mérete: MPI_Group_size A nem használt csoportokat a MPI_Group_free mővelettel lehet felszabadítani. 57 58 Kommunikátorok A kommunikátorok a csoportok és a környezetek összefogására szolgálnak. Minden kommunikációban meg kell adni egy ilyen kommunikátort. Új kommunikátort létrehozása egy csoportból: MPI_Comm_create. Az új kommunikátor létrejöttekor a benne lévı folyamatok egy kollektív mővelet során kialakítanak egy új kommunikációs környezetet is ezért az új kommunikátorban küldött üzenetek nem keveredhetnek a korábbiakkal. Kommunikátorok MPI_Comm_dup: Egy régi kommunikátor lemásolása. Hatására a régi kommunikátor folyamat csoportja megmarad, de létrejön egy új kommunikációs környezet. MPI_Comm_split: egy kommunikátor részekre bontása. A résztvevı folyamat megmondhatja, hogy az új kommunikátorok közül melyikben szeretne benne lenni. Egy kommunikátort az MPI_Comm_free eljárással lehet felszabadítani. 59 60 15

Összefoglalás MPI szabvány Jól látszik, hogy egy jól átgondolt és sok szakértı közremőködésével létrehozott rendszer. Az üzenetküldés területen szinte minden fontos gondolatot ötvöztek benne. A rendszerrel szinte mindenféle feladat megoldható. A könyvtár kifejezetten párhuzamos folyamatok közötti kommunikáció támogatására íródott, nem tartalmaz elemeket adat párhuzamosság kezelésére. 61 16