PÁRHUZAMOS SZÁMÍTÁSTECHNIKA MODUL AZ ÚJ TECHNOLÓGIÁKHOZ KAPCSOLÓDÓ MEGKÖZELÍTÉSBEN PARALLEL COMPUTING MODULE BASED ON THE NEW TECHNOLOGIES Vámossy Zoltán 1, Sima Dezső 2, Szénási Sándor 3, Rövid András 4, Kárász Péter 5, Miklós Árpád 6, Sergyán Szabolcs 7 és Tóth Ákos 8 Összefoglaló: A számítástechnikai eszközök többmagossá, illetve többszálassá váltak. Ennek megfelelően a párhuzamos számítástechnika megváltozott és megújult formában ismét meghatározó tényező lett, és az informatikus képzettségű hallgatóktól elvárt igény ezen terület alapos ismerete. Ezt az igényt terveztük kielégíteni, amikor kidolgoztunk egy olyan modult, amelynek középpontjában a párhuzamos számítástechnika elméleti háttere mellett a gyakorlatra, az új technikák alkalmazásának elsajátítására helyeződött a hangsúly. A bevezető alapozást, mely összefoglalja a párhuzamos architekturális és operációs rendszer szintű hátteret, valamint a párhuzamos programozás alaptechnikáit, a többszálas programozás gyakorlati elsajátítása követi a jelenleg használatos környezetekben, amelyekbe a többmagos processzorok ugyanúgy beletartoznak, mint a GPGPU-k adta lehetőségek. A gyakorlati kompetenciákat biztosító laboratóriumi feladatok és projektek elvégzése/megoldása mellett egy választható tárgy keretében a kidolgozott modult választó hallgatók egy olyan alkalmazási területtel is megismerkednek, ahol az elsajátított technikák alkalmazásának jelentős szerepe van. Kulcsszavak: párhuzamos számítástechnika, operációs rendszerek, programozás, GPGPU Abstract: The computing became multi-threaded and multi-cored. Accordingly, parallel computing has changed and in modified new form became dominant again, and there is a growing demand from students with IT skills: the deep expected knowledge of this area. That is why we planned to answer this need with a set of courses (parallel computing module) that we have developed and that focuses on the parallel computing theory and practice also, but mainly the novel techniques are emphasized in the courses. After the introductory foundation, which summarizes the parallel architecture and operating system-level background, the basic techniques of parallel and multi-threaded programming, practical learning is followed by the currently used environments in which both the multi-core processors and GPGPU-s are included. Using the knowledge of the practical laboratory tasks and projects the students could choose an elective course (computer graphics) where the learned parallel techniques play an important role also. Keywords: parallel computing, operating systems, programming, GPGPU 1 Óbudai Egyetem, Neumann János Informatikai Kar, vamossy.zoltan@nik.uni-obuda.hu 2 Óbudai Egyetem, Neumann János Informatikai Kar, sima@uni-obuda.hu 3 Óbudai Egyetem, Neumann János Informatikai Kar, szenasi.sandor@nik.uni-obuda.hu 4 Óbudai Egyetem, Neumann János Informatikai Kar, rovid.andras@nik.uni-obuda.hu 5 Óbudai Egyetem, Neumann János Informatikai Kar, karasz.peter@nik.uni-obuda.hu 6 Óbudai Egyetem, Neumann János Informatikai Kar, miklos.arpad@nik.uni-obuda.hu 7 Óbudai Egyetem, Neumann János Informatikai Kar, sergyan.szabolcs@nik.uni-obuda.hu 8 Óbudai Egyetem, Neumann János Informatikai Kar, toth.akos@bgk.uni-obuda.hu
1. Bevezetés A számítástechnikai technológiai fejlődés szempontjából az egyik nyilvánvalóan kiemelendő trend a számítástechnikai eszközök alapját képező processzorok többmagossá/többszálúvá válása, és ezzel összefüggésben a szekvenciális programozással szemben a párhuzamos többmagos/többszálas programozás meghatározó szerepének megjelenése. A szakemberek hiánya a többmagos/többszálas processzorok és programozásuk területén már ma is a gazdaság fejlődésének korlátjává vált különösen a biztosítók, bankok, pénzügyi szolgáltatók körében. Karunk kiterjedt vállalati kapcsolatrendszerén keresztül pontos képet kapunk e terület munkaerő-igényéről, amely folyamatosan növekvő tendenciát mutat. Ezt az igényt terveztük kielégíteni, amikor 2010/2011-ben TÁMOP pályázati támogatással kidolgoztunk egy olyan modult, amelynek középpontjában a párhuzamos számítástechnika elméleti háttere mellett a gyakorlatra, az új technikák alkalmazásának elsajátítására helyeződött a hangsúly. A bevezető alapozást, mely összefoglalja a párhuzamos architekturális és operációs rendszer szintű hátteret, valamint a párhuzamos programozás alaptechnikáit, a többszálas programozás gyakorlati elsajátítása követi a jelenleg használatos környezetekben, amelyekbe a többmagos processzorok ugyanúgy beletartoznak, mint a GPGPU-k (általános célú grafikai feldolgozó egységek) adta lehetőségek. A gyakorlati kompetenciákat biztosító laboratóriumi feladatok és projektek elvégzése/megoldása mellett egy választható tárgy keretében a kidolgozott modult választó hallgatók egy olyan alkalmazási területtel is megismerkednek, ahol az elsajátított technikák alkalmazásának jelentős szerepe van. A modulhoz tartozó tárgyak az alábbiak: Párhuzamos rendszerek architektúrája Párhuzamos operációs rendszerek Többszálú/többmagos processzorarchitektúrák és programozásuk Masszívan párhuzamos programozás GPGPU-k alkalmazásával Algoritmusok optimális megvalósítása párhuzamos környezetben Projektlabor Valósidejű háromdimenziós grafika és képfeldolgozás. 2. A kidolgozott tantárgyak bemutatása 2.1. Párhuzamos rendszerek architektúrája A tantárgy keretei között a hallgatók megismerkednek a párhuzamos és elosztott rendszerek, és ezen belül a szerverek, a tároló hálózatok sajátosságaival, felépítésével, az alkalmazási környezet által támasztott teljesítmény-, megbízhatósági-, és biztonsági elvárásokkal, valamint adott elvárásoknak eleget tevő szerver rendszerek kialakításának szempontjaival, módjával. Az előadásokon hangsúlyt kapnak a különböző virtualizáló megoldások, amelyek megértését gyakorlati bemutatók is segítik. A tárgy szemléletmódja a tervezési tér koncepcióra épít, és előtérbe helyezi a konkrét megvalósítási példák és trendek bemutatását. A tantárgy főbb tématerületei: Tároló rendszerek. A hálózati tárolás szabványosítása (SNIA), a hálózati tárolás technológiái (DAS, SAN, NAS), eszközei, protokolljai, szoftverei, konkrét megvalósításai, termékei, megbízhatósága, biztonsági kérdései, menedzsmentje. Tároló rendszerek a gyakorlatban Az iscsi hálózati tárolás gyakorlati megvalósításának bemutatása. Többmagos/sokmagos processzorok. Főbb osztályaik, homogén többmagos, homogén sokmagos processzorok, heterogén mester-szolga és csatolt többmagos processzorok, reprezentatív megvalósítások.
Két és négy processzoros szerver architektúrák. Intel/AMD két és négy processzoros szervercsaládjai, két és négy processzoros szerverek rendszerarchitektúrájának fejlődése, jellemző megvalósítások. Penge szerverek rendszerarchitektúrája. Alternatívák, jellemző megvalósítások, alkalmazások. Szerver rendszerarchitektúrák adatbiztonsági, megbízhatósági kérdései. A rendszerelemek (processzor, memória, háttértár, tápegység, stb.) rendelkezésre állására, megbízhatóságára vonatkozó elvárások, megvalósítási technikák (ECC, chipkill, RAID, stb.). 2.2. Párhuzamos operációs rendszerek A tantárgy keretei között a hallgatók megismerkednek a többmagos környezetben működő operációs rendszerek sajátosságaival, az egyes operációs rendszeri funkciók elemzésén és tervezési terének bemutatásán túl elterjedt szerver operációs rendszerekből származó példákon keresztül megtörténik a megvalósítás lehetőségeinek áttekintése is. A tárgy az Operációs Rendszerek BSc tárgy keretei között elhangzó ismeretekre épít, célja az általános (az operációs rendszerek mindegyikét felölelő) ismeretek mélyítése a szerver megoldások témakörére fókuszálva. A tantárgy előadásainak tartalma: Párhuzamos és elosztott környezetet támogató operációs rendszerek struktúrája, szerver operációs rendszerek felépítésével kapcsolatos elvárások, megvalósítás lehetőségei, kernel funkciók hatékony működésének megvalósítása többprocesszoros szorosan csatolt (SMP) architektúrákon. Párhuzamos és elosztott feldolgozást támogató rendszerek mechanizmusai, Folyamatok és szálak kezelése többprocesszoros környezetben. Szálak kezelése multithreading, hyperthreading technológiákat támogató processzorok esetében, processzorok ütemezése. Memória menedzsment, Hatékony és megbízható memóriakezelés kialakítása, különböző implementációk összehasonlító elemzése, kernel memória dinamikus kezelése. I/O kezelés; Fájlrendszerek és állományok kezelése, Fájlrendszerrel szemben megfogalmazott elvárások ismertetése, a fájlrendszerek tervezési terének áttekintése, szerepek szerinti erőforrás hozzáférés (RBAC), teljesítmény (fájlrendszerek struktúrája), flexibilitás (egységes interfészek, a Vnode/Vfs architektúra). Virtualizáció operációs rendszeri szinten. Virtualizációs technikák ismertetése, hatékony és megbízható működéshez szükséges operációs rendszeri szolgáltatások áttekintése, főbb megvalósítások áttekintése, virtualizáció processzor szintű támogatása; Elosztott rendszerek OR szintű támogatása, Elosztott rendszerek tervezési tere, elosztott rendszerek operációs rendszer szintű támogatásának ismertetése. A gyakorlati anyagrész: Windows Management Instrumentation (WMI) alkalmazásának bemutatása, példákon keresztüli gyakorlás. WMI lehetőségeinek bemutatása többmagos processzorokra fókuszálva. Windows 2008 Server és Windows XP kernel debuggolásának ismertetése. Kernel debuggolás haladó technikái. A párhuzamos architektúrák lehetőségeit támogató korszerű programozási eszközök bemutatása (Nvidia CUDA). 2.3. Többszálú/többmagos processzorarchitektúrák és programozásuk A tárgy keretében a hallgatók elmélyítik az alapképzésben szerzett a párhuzamos rendszerekkel kapcsolatos tervezési és programozási ismereteiket. A hallgatók megismerik és elsajátítják a párhuzamos programozás technikáit, a folyamat- és szálkezelést, a szálak közti kommunikáció módozatait és a szinkronizáció módszereit. A tantárgy kitekintést nyújt az elosztott rendszerek programozásának különböző változatairól.
A tananyag fő elemei: A párhuzamos rendszerek áttekintése, és programozásuk kiemelt kérdései. Párhuzamos programozás alapjai. Folyamatok. Szálkezelés. Szinkronizáció. Hibakeresés, nyomkövetés párhuzamos környezetben. Elosztott szoftver-architektúrák. Párhuzamos programozási algoritmusok. Diszkrét optimalizálás. Dinamikus programozás. Képfeldolgozás párhuzamosított technikával. Kitekintés a masszívan párhuzamos programozásra, GPGPU. MPI programozás alapok. 2.4. Masszívan párhuzamos programozás GPGPU-k alkalmazásával A processzor architektúrák elmúlt években bekövetkezett fejlődésének egyik szignifikáns eredménye az általános célú grafikai kártyák (GPGPU-k) és az alkalmazásukhoz szükséges szoftver programozási környezetek megjelenése. A tárgy keretében a hallgatók megismerkednek a GPGPU-k általános felépítésével, a legfontosabb reprezentáns architektúrákkal, programozási környezetekkel. Ezt követően gyakorlati ismereteket szereznek az adatpárhuzamos programozási modellen keresztül történő feladatmegoldásban, a számításigényes feladatok futásának gyorsításában GPGPU-k alkalmazásával. A tantárgy előadásának tartalma: GPGPU architektúrák felépítése. OpenCL specifikáció. CUDA programozási környezet alapok. Hagyományos és adatpárhuzamos algoritmusok áttekintése. Rendezések. Véletlenszám generálás. Kriptográfia. Képmanipuláció. A gyakorlatok anyaga: C/C++ nyelvi alapok áttekintése/átismétlése. CUDA programozási környezet alapok. Egyszerű mátrix műveletek. Gridek, atomi műveletek. Egyszerű adatpárhuzamos algoritmusok implementálása. Programozási tételek, mátrixműveletek. Adatpárhuzamos rendezési algoritmusok implementálása. Radix, hatékonysági vizsgálat. Párhuzamos véletlenszám generáló algoritmusok implementálása. Statisztikai feladatok. Kriptográfiai algoritmusok implementálása. Kódolások. Dekódolások, brute force-os feltörési módszerek.
2.5. Algoritmusok optimális megvalósítása párhuzamos környezetben A tárgy keretében a hallgatók megismerkednek a különböző összetett és gyakran alkalmazott algoritmusok és adatszerkezetek elemzésének és elosztott számítógépes környezetekben való hatékony implementálásának módszereivel. A tárgy célja a korábbi félévek elméleti és gyakorlati tárgyai során megszerzett algoritmus- és adatszerkezet-ismeretekre építve komplexebb gyakorlati problémák optimális megoldásának megismerése, az algoritmusok implementálásának gyakorlása elosztott környezetekben. A tantárgy részletes tartalma: Elosztott algoritmusok elemzési módszerei. Rendezések, keresések és kiválasztások elosztott környezetben. Adatszerkezetek elosztott megvalósításai. Tömbök, listák, fák, gráfok. Elosztott rekurzió, numerikus módszerek. Egyenletrendszerek megoldása, approximáció és interpoláció. Gráfalgoritmusok elosztott környezetben. Bejárások, útkeresések, tranzitív lezárt, topologikus rendezés, erősen összefüggő komponensek. Adattömörítés a kommunikációban. Huffman-kód, aritmetikai tömörítés, LZ77, LZ78, LZW algoritmus, Burrows-Wheeler transzformáció. Kriptográfiai algoritmusok alkalmazása a kommunikációban. Szimmetrikus algoritmusok, aszimmetrikus algoritmusok. 2.6. Projektlabor A tárgy keretén belül a hallgatók megismerik a kutatás és fejlesztés módszertanát, betekintést kapnak különböző kutatási és fejlesztési feladatok megvalósításának egyes fázisaiba. A tananyag elemei: Irodalomkutatás: Milyen irodalomra célszerű rákeresni és milyen tudományos weboldalak, publikus tudományos adatbázisok állnak rendelkezésre. Projekt munkaterv kidolgozásának fázisai, az egyes fázisok részletezése. Miket tartalmazzon a munkaterv (tartalmi és formai követelmények). Eredmények publikálása és prezentálása. Az eredmények tudományos folyóiratokban, ill. konferenciákon való prezentálásához szükséges tudnivalók. Hogyan nézzen ki a prezentációs anyag, miket tartalmazzon. Latex szövegszerkesztő használatának ismertetése. Hol és hogyan publikáljuk eredményeinket (folyóiratok, konferenciák, stb.). Impakt faktor (mit fejez ki, milyen szerepet játszik a bírálati folyamatokban). Nem független, független hivatkozások és önhivatkozások (ezek jelentősége). Pályázatok írása. Milyen típusú kutatási, fejlesztési pályázatok fordulnak elő. Hogyan adjunk be pályázatot (általános tartalmi és formai követelmények). Részjelentés, zárójelentés készítése (mit kell tartalmaznia egy jelentésnek). 2.7. Valósidejű háromdimenziós grafika és képfeldolgozás A kurzus célja, hogy a hallgatók gyakorlati tapasztalatot szereznek korszerű, valósidejű háromdimenziós grafikus alkalmazások fejlesztésében. A tantárgy anyaga a következő: Bevezetés. A számítógépes grafika és a 3D alkalmazások történeti áttekintése. Képalkotási módok (sugárkövetés, globális illumináció, képszintézis). A valós idejű megjelenítés és animáció fogalma. A 3D képszintézis alapelvei és lépései. Modellezés, tesszelláció, transzformációk szükségessége, vágás, takarási feladat, árnyalás. Grafikai szabványok áttekintése. OpenGL, Direct3D és összehasonlításuk. Direct3D komponensei, felépítése, főbb jellemzői. Direct3D alapú alkalmazások szerkezete + wrapperek. Példaprogram: Direct3D inicializálása C# alkalmazásban.
A fix funkciós futószalag (FFP) bemutatása és működése. Az FFP által nyújtott lehetőségek és korlátok. Primitívek definiálása, vertex attribútumok és vertex formátumok, megjelenítési állapotok állítása. Példaprogram: ismerkedés a transzformációkkal, egyszerű primitívek definiálása és animálása (FFP segítségével). A fix funkciós futószalag további lehetőségei. Vertex pufferek, megvilágítás, textúrázás, átlátszóság, köd. Objektumtárolási lehetőségek: listák, színtér gráfok (fák), térparticionálás. Példaprogram: több objektum megjelenítése különböző technikákkal (átlátszó, textúrázott, megvilágított, stb.). További megjelenítési lehetőségek. Indexelt geometria használata (előnyei, működése). Speciális textúrák (1D textúrák, 2D textúrák, 3D textúrák, kocka textúrák). Rajzolási célfelületek (render targets), rajzolás textúrákra. Élsimítás. Tükröződés. Példaprogram: példaprogram indexelt geometria támogatására, kocka textúrák használata (skybox). A programozható futószalag (PP) bemutatása és működése. A PP által nyújtott lehetőségek. Ismerkedés a HLSL magas szintű shader programozási nyelvvel. A programozható futószalag lehetőségei. Ismerkedés egyszerű HLSL shaderekkel (az eddig ismert megjelenítési technikák HLSL-lel megvalósított változatai). Példaprogram: Gouraud és Phong árnyalást megvalósító shaderek. Komplexebb megjelenítési technikák. Csontváz és kulcskocka animáció, részecske rendszerek, vízfelszín szimuláció, terep megjelenítés, égbolt megjelenítés, progresszív testhálók, stb. Példaprogram: egyszerű részecske rendszer implementáció. Utófeldolgozási technikák. Bevezetés a képfeldolgozás alapjaiba. A képszintézis utófeldolgozási lépésének működése. A GPU alapú képfeldolgozás lehetőségei, előnyei, és korlátai. HLSL pixel árnyaló vs. C# kódok áttekintése (invertálás, világosítás, kontraszt állítás, gamma állítás, képek deriválása, aluláteresztő szűrők (Gauss, átlagolás)). Példaprogram: invertálás, kontraszt, gamma, és Gauss szűrők kipróbálása HLSL kóddal. 3. Összegzés A tantárgyak anyagainak tesztelése és pontosítása céljából több kurzust indítottunk már Párhuzamos rendszerek architektúrája, a Párhuzamos operációs rendszerek, a Többszálú/többmagos processzorarchitektúrák és programozásuk, a Masszívan párhuzamos programozás GPGPU-k alkalmazásával és az Algoritmusok optimális megvalósítása párhuzamos környezetben témákban jelenleg még csak különálló választható tantárgyanként. A hallgatói visszajelzések a gyakorlatorientált szemlélet és a kidolgozott, számos megoldásmintát pozitívan értékelték. 4. Köszönetnyilvánítás A modul kifejlesztéséhez segítséget nyújtott a TÁMOP - 4.1.2-08/2/A KMR Tananyagfejlesztés és tartalomfejlesztés különös tekintettel a matematikai, természettudományi, műszaki és informatikai (MTMI) képzésekre pályázat forrása, melyet ezúton is köszönünk. A tantárgyakban felhasznált irodalmak jegyzéke Watts D., Davis R., Kroutov I. (2008) IBM BladeCenter, Products and Technology, RedBooks Orenstein G. (2003) IP Storage Networking: Straight to the Core, Addison Wesley Singhal R., Saquib Z. (2008) Continuous Available Commodity Storage, SNIA Education Clark T. (2005) Storage Virtualization, Technologies for Simplifying Data Storage and Management, Addison-Wesley Russinovich, Solomon (2009) Microsoft Windows Internals, 5th edition, Microsoft Press, USA Tanenbaum, Steen (2004) Elosztott rendszerek, Alapelvek és paradigmák, Panem Tanenbaum, Andrew S. (2008) Modern Operating Systems: International Edition, ISBN 9780138134594, Prentice Hall
Grama A., Gupta A., Karypis G., Kumar V. (2003) Introduction to Parallel Computing, 2nd edition Addison-Wesley, ISBN 0-201-64865-2 Wilkinson B., Allen M. (2005) Parallel Programming, 2nd edition, Prentice Hall Iványi A. (2005) Párhuzamos algoritmusok, ELTE Eötvös Kiadó, Budapest, http://elek.inf.elte.hu/parhuzamos online Akhter S., Roberts J. (2006): Multi-Core Programming (Increasing Performance through Software Multi-threading), Intel Press Albahari J. (2010) Threading in C#, http://www.albahari.com/threading/ Cormen T. H., Leiserson C. E., Rivest R. L., Stein C. (2003) Új algoritmusok, Scolar Kiadó, Budapest Eco U. (1994): Hogyan írjunk szakdolgozatot?, Gondolat Popper K. R. (1997) A tudományos kutatás logikája, Európa Majoros, P. (1997) Kutatásmódszertan, Budapest Szirmay-Kalos L., Antal Gy., Csonka F. (2003) Háromdimenziós grafika, animáció és játékfejlesztés, Computerbooks Nyisztor K. (2009) Shaderprogramozás grafika és játékfejlesztés DirectX-szel, SZAK kiadó Gonzales, Woods (2008) Digital Image Processing, 3rd edition. Prentice Hall