Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar Bevezetés Motiváció Soros és párhuzamos végrehajtás, soros és párhuzamos programozás Miért? Alapfogalmak Párhuzamosság, egyidejűség, kvázipárhuzamosság, kváziegyidejűség Implicit és explicit párhuzamosság Program, feladat, folyamat, szál, végrehajtási egység, feldolgozóegység Korlátok Függőségek és típusaik Szinkronizáció miklos.arpad@nik.uni-obuda.hu
Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. miklos.arpad@nik.uni-obuda.hu 2
Soros végrehajtás és programozás A Neumann-architektúrára épülő számítógépek a programokat sorosan hajtják végre Ezen az architektúrán a gépi kódú programok tényleges futtatása az órajel ütemére sorban egymás után, utasításról utasításra történik. A programokon belül bekövetkező egyes események szigorú időbeli sorrendisége következtében az állapotátmenetek elvben előre kiszámíthatóak. Minden mai, általánosan elérhető számítógéparchitektúra a Neumannarchitektúrára épül.* Adat/utasítás Vezérlés Memória Bemenet Kimenet ALU Vezérlés miklos.arpad@nik.uni-obuda.hu 3
Párhuzamos végrehajtás és programozás A párhuzamos végrehajtást megvalósító architektúrákkal a jelen tárgy csak érintőlegesen foglalkozik Ezt a területet teljes részletességében a Párhuzamos rendszerek architektúrája c. tárgy fedi le. Párhuzamos programozás fogalma A párhuzamos programozás azt a lehetőséget takarja, hogy szoftvereinket olyan programozási nyelven fejlesszük ki, amely explicit (kifejezett) lehetőséget ad a számítási feladatok egymással egyidőben végrehajtandó részfeladatainak és a számítás módjának megadására. Mint később látni fogjuk, ez a módszer új lehetőségek és problémák egész tárházát nyitja fel, és nagyságrenddel nehezebbé teszi jól működő szoftverek fejlesztését. miklos.arpad@nik.uni-obuda.hu 4
...de miért is kellene változtatnunk? A soros (egyprocesszoros) végrehajtás megközelítette határait A mai technológiákkal az egy processzoron elérhető végrehajtási teljesítmény növelésének a fizika határokat szab, melyeket már az implicit párhuzamos végrehajtás lehetőségeinek teljes kimerítése ellenére is megközelítettünk. A komplex vezérlőegységek órajele reálisan legfeljebb kb. 5*10 9 Hz (5 GHz) A processzorok belsejében lévő adatutak maximális hossza elég nagy ahhoz, hogy az órajel további lényegi növelése esetén még fénysebességgel terjedő impulzusok se érjenek át időben a processzor egyik oldaláról a másikra A csíkszélesség további csökkentésével drasztikusan nő a hődisszipáció A mai (2010) processzorok például néhány mm 2 felületen 125-175 W teljesítményt disszipálnak, így hűtésük egyre nagyobb problémát okoz. Sőt, a processzorok egyes területei a változó terheléstől függően nem egyformán melegszenek, ami nagy hőingadozások esetén mechanikai sérüléseket is okozhat. Sajnos a fizikai határok mellett számításelméleti korlátokkal is számolni kell. A hagyományos programokban rejlő belső párhuzamosítási lehetőségeket a mai processzorok már kihasználták Egy általános programban elméletileg legfeljebb kb. 4-6, a gyakorlatban kb. 2-3 utasítás hajtható végre egyidejűleg. Ezt a lehetőséget a három-, illetve négyutas szuperskalár processzorok (pl. IBM Power 3, Intel Pentium III, AMD Athlon) és közvetlen utódaik már a 2000-es évek elejére szinte teljes mértékben kiaknázták. miklos.arpad@nik.uni-obuda.hu 5
...de miért kellene változtatnunk? A teljesítmény növelésének igénye nagyobb, mint valaha Végrehajtási idő minimalizálása = költségcsökkentés A teraflop (10 12 lebegőpontos utasítás / másodperc) sebességkategóriába soros végrehajtással már nem lehet belépni A memóriák sebességének növekedése sokkal lassabb, mint a processzoroké, párhuzamos architektúrák segítségével viszont jobban kiaknázható a teljesítményük (csökkenhetők a szűk keresztmetszetek) A hálózatok döntő jelentőségűvé váltak Az elosztott számítási kapacitás kihasználásával új típusú alkalmazások válnak lehetővé SETI@home, Folding@home A hálózatokon és az interneten tárolt adatok mennyisége olyan nagy, hogy nagyobb feladatoknál az adatok mozgatása (pl. egy, a számításokat elvégző központi számítógép felé) lehetetlen A számítási műveleteket a hálózaton keresztül kell megvalósítani, párhuzamos programozási technikákkal miklos.arpad@nik.uni-obuda.hu 6
...de miért kellene változtatnunk? A soros programozás korszaka tehát fokozatosan letűnik A Neumann-architektúra logikai alapjaiba ágyazott soros programozási megoldások sorra elveszítik előnyeiket (egyszerű fejlesztés, hatékony hibakeresés, kiszámíthatóság), hátrányaik (teljesítmény skálázódásának hiánya, összetett és elosztott programok fejlesztésének nehézsége) pedig egyre kínzóbbak. miklos.arpad@nik.uni-obuda.hu 7
A párhuzamos programozás alapfogalmai Soros (vagy szekvenciális) végrehajtás Fizikailag egyidőben kizárólag egy művelet végrehajtásának lehetősége. Párhuzamos (valódi párhuzamos) végrehajtás Fizikailag egyidőben egynél több művelet végrehajtásának lehetősége. Kvázipárhuzamos végrehajtás Látszólagos párhuzamosság időosztásos technika felhasználásával. Egyidejűség (valódi egyidejűség) Valódi párhuzamos végrehajtás esetén kettő vagy több művelet fizikailag időben egymást átfedő végrehajtása. Kváziegyidejűség Kvázipárhuzamos végrehajtás esetén kettő vagy több művelet logikailag időben egymást átfedő végrehajtása. miklos.arpad@nik.uni-obuda.hu 8
A párhuzamos programozás alapfogalmai Program Feladat Utasítások és adatok önálló egységet képező halmaza. A program elemeinek önhordó és önállóan végrehajtható halmaza vagy részhalmaza. A programok feladatokra bonthatók (de fordítva nem). Folyamat Szál A program végrehajtása, illetve a végrehajtás alatt álló program (adataival, erőforrásaival és belső állapotával együtt). A folyamaton belüli kisebb egység, amely végrehajtható műveletek sorát tartalmazza. Egy folyamaton belül több szál is létezhet (de fordítva nem). Végrehajtási egység Egy adott feladat (folyamat vagy szál) legkisebb végrehajtható részhalmaza. Feldolgozóegység, végrehajtóegység A végrehajtási egységet feldolgozó hardverelem (pl. processzormag, ALU). miklos.arpad@nik.uni-obuda.hu 9
A párhuzamos programozás korlátai Függőségek A függőség olyan kapcsolatot vagy egymásrautaltsági viszonyt jelöl két művelet (feladat) között, amely megakadályozza ezek egyidejű (párhuzamos) végrehajtását. A függőségek alaptípusai: Adatfüggőség (flow dependency): egy művelet eredményét egy másik művelet bemeneti adatként kívánja felhasználni (ez az ún. valódi függőség egy példája) Léteznek ún. áladatfüggőségek is, amelyek nem szükségszerű, ok-okozati jellegűek, hanem az alkalmazott architektúra jellemzői miatt lépnek fel. Ezek megfelelő áttervezéssel, új technikai megoldásokkal kiküszöbölhetők, tehát jelentőségük csekély és időleges. Elágazási függőség (branch dependency): egy művelet eredménye dönti el, hogy egy másik műveletet végre kell-e hajtani, illetve hogy mely művelet kerülön sorra Erőforrásfüggőség (resource dependency): egy művelet végrehajtásához olyan erőforrásra (pl. végrehajtóegységre) van szükség, amely éppen egy másik művelet végrehajtásával foglalkozik, így meg kell várni a másik művelet befejeződését (ez az ún. álfüggőség egy példája) miklos.arpad@nik.uni-obuda.hu 10
A párhuzamos programozás korlátai Szinkronizáció A szinkronizáció olyan tetszőleges mechanizmus, amely két párhuzamos feladat végrehajtása között megbízható, előre megjósolható, determinisztikus kapcsolatot teremt. Szinkronizáció nélkül előfordulhat, hogy bizonyos műveletek párhuzamos végrehajtás esetén bizonyos konkrét körülmények között helytelen eredményeket szolgáltatnak, pedig maguk a műveletek algoritmikus szempontból helyesek, illetve akár a program látszólagos leállását vagy két állapot közötti végtelen váltakozását eredményezhetik. Amennyiben két feladat között nincs szükség szinkronizációra, ezeket aszinkron feladatoknak nevezzük, ezzel szemben az egymással szorosan összefüggő műveleteket szinkron feladatoknak nevezzük. (A valóságban a feladatok e két véglet között egy folytonos spektrumon helyezkednek el.) miklos.arpad@nik.uni-obuda.hu 11
Felhasznált és javasolt irodalom [1] A. Grama, A. Gupta, G. Karypis, V. Kumar Introduction to Parallel Computing Addison-Wesley, ISBN 0-201-64865-2, 2003, 2nd ed., angol, 636 o. [2] B. Wilkinson, M. Allen Parallel Programming Prentice Hall, ISBN 978-0131405639, 2004, 2nd ed., angol, 496 o. [3] S. Akhter, J. Roberts Multi-Core Programming (Increasing Performance through Software Multi-threading) Intel Press, ISBN 0-9764832-4-6, 2006, angol, 340 o. [4] Iványi A. Párhuzamos algoritmusok ELTE Eötvös Kiadó, ISBN 963-463-590-3, Budapest, 2003, magyar, 334 o. [5] J. Albahari Threading in C# [online: 2011. 04. 30.] http://www.albahari.com/threading/ miklos.arpad@nik.uni-obuda.hu 12
miklos.arpad@nik.uni-obuda.hu
miklos.arpad@nik.uni-obuda.hu