Párhuzamos számítástechnika

A Wikipédiából, a szabad enciklopédiából
Ugrás a navigációhoz Ugrás a kereséshez

A párhuzamos számítástechnika a számítástechnika egy típusa, ahol a számításokat vagy folyamatokat egyidejűleg hajtják végre.[1] A nagy problémákat gyakran fel lehet osztani kisebbekre, melyeket párhuzamosan lehet megoldani. A párhuzamos számítástechnikának többféle formája létezik: bitszintű, utasításszintű, adat- és feladat-párhuzamosság. A párhuzamosságot már régóta alkalmazzák a nagy teljesítményű számítástechnika területén, de szélesebb körű érdeklődést váltott ki a frekvenciaskálázás fizikai korlátai miatt.[2] Mivel a számítógépek energiafogyasztása (és ennek következtében a hőtermelés) az utóbbi években aggodalomra ad okot,[3] a párhuzamos számítástechnika a számítógép-architektúra meghatározó paradigmájává vált, főleg a többmagos processzorok formájában.[4]

A párhuzamos számítástechnika szorosan kapcsolódik az egyidejű számítástechnikához – gyakran használják együtt és gyakran egymással felcserélve, bár a kettő különbözik egymástól: párhuzamosság létezhet egyidejűség nélkül (például bitszintű párhuzamosság), és egyidejűség létezhet párhuzamosság nélkül (például többfeladatosság egy egymagos processzoron az időosztás által).[5][6] A párhuzamos számítástechnika során a számítási feladat jellemzően több, gyakran sok, nagyon hasonló alfeladatra bontható, amelyeket egymástól függetlenül lehet feldolgozni, és amelyek eredményeit a teljesítés után később egyesítik. Ezzel szemben az egyidejű számítástechnikában a különféle folyamatok gyakran nem foglalkoznak a kapcsolódó feladatokkal; az elosztott számítástechnikában az egyes feladatok változatos természetűek lehetnek és a végrehajtás során gyakran bizonyos folyamatok közötti kommunikációt igényelnek.

A párhuzamos számítógépeket nagyjából osztályozni lehet annak a szintnek az alapján, amelyen a hardver a párhuzamosságot támogatja: a többmagos és a többprocesszoros számítógépek esetében egyazon gépen több feldolgozóelem van, míg a fürtök, MPP-k és rácsszámítások több számítógépet használnak ugyanazon feladat elvégzéséhez. Speciális párhuzamos számítógép-architektúrákat alkalmaznak a hagyományos processzorok mellett bizonyos feladatok felgyorsítására.

Bizonyos esetekben a párhuzamosság átlátható a programozó számára, mint például a bitszintű vagy utasításszintű párhuzamosság, de kifejezetten a párhuzamos algoritmusok közül különösen azokat, amelyek egyidejűséget használnak, nehezebb megírni, mint szekvenciális társaikat,[7] mivel az egyidejűség számos új potenciális szoftverhibát rejt, amelyek közül a versenyhelyzetek a leggyakoribbak. A különböző alfeladatok közötti kommunikáció és szinkronizálás általában a legnagyobb akadály az optimális párhuzamos programteljesítmény elérésében.

Egyetlen program gyorsulásának elméleti felső határát a párhuzamosítás eredményeként Amdahl törvénye adja meg.

Háttér[szerkesztés]

Hagyományosan a számítógépes szoftvereket soros számításra írták. Egy probléma megoldásához egy algoritmust állítanak össze és valósítanak meg soros utasításfolyamként. Ezeket az utasításokat egy számítógép központi feldolgozóegységén hajtják végre. Egyszerre csak egy utasítás hajtható végre – az utasítás befejezése után a következő kerül végrehajtásra.[8]

A párhuzamos számítástechnika viszont több feldolgozóelemet használ egyszerre egy probléma megoldásához. Ezt úgy lehet elérni, hogy a problémát független részekre bontjuk, és mindegyik feldolgozóelem az algoritmus egy részét a többivel egyidejűleg hajtja végre. A feldolgozóelemek változatosak lehetnek, és tartalmazhatnak olyan erőforrásokat, mint egy számítógép több processzorral, több hálózati számítógép, speciális hardver vagy a fentiek bármelyikének kombinációja.[8] A történelem során a párhuzamos számítástechnikát alkalmazták tudományos számításhoz és tudományos problémák szimulálásához, különösen a természettudomány és a műszaki tudományok, például a meteorológia területén. Ez a párhuzamos hardver és szoftver, valamint a nagy teljesítményű számítástechnika megtervezéséhez vezetett.[9]

A frekvenciaskálázás volt a meghatározó oka a számítógépes teljesítmény javulásának az 1980-as évek közepétől 2004-ig. A program futási ideje megegyezik az utasítások számával szorozva az utasításonkénti átlagos idővel. Ha az órajelen kívül minden más állandó, akkor annak növelése csökkenti az egy utasítás végrehajtásához szükséges átlagos időt. A frekvencia növelése tehát csökkenti az összes processzorigényes program futási idejét.[10] Ugyanakkor a processzor által adott energiafogyasztást a egyenlet adja meg, ahol a kapacitás ciklusonként kapcsolva (arányos azon tranzisztorok számával, amelyek bemenete változik), a feszültség és a processzor frekvenciája (másodpercenkénti ciklusok száma).[11] A frekvencia növelése növeli a processzorban felhasznált energiamennyiséget. A processzorok növekvő energiafogyasztása végül az Intel 2004. május 8-i Tejas és Jayhawk processzorainak megszüntetéséhez vezetett, amelyeket általában a frekvenciaskálázás végének tekintenek, és az uralkodó számítógép-architektúra paradigmájának neveznek.[12]

Az energiafogyasztás és a túlmelegedés problémájának kezelése érdekében a processzorgyártók elkezdték a többmagos, energiahatékony processzorok gyártását. A mag a processzor számítási egysége, a többmagos processzorokban minden mag független, és ugyanahhoz a memóriához egyidejűleg fér hozzá. A többmagos processzorok párhuzamos számítástechnikát hoztak az asztali számítógépekbe. Így a soros programok párhuzamosítása vált a fő programozási feladattá. 2012-ben a négymagos processzorok szabványossá váltak az asztali számítógépekben, míg a szerverek 10 és 12 magos processzorokkal rendelkeztek. Moore törvénye kimondja, hogy a processzoronkénti magok száma 18–24 hónaponként megduplázódik. Ez azt jelentheti, hogy 2020 után egy tipikus processzor tucatnyi vagy száz maggal rendelkezik.[13]

Az operációs rendszer biztosítja, hogy a különféle feladatok és felhasználói programok párhuzamosan fussanak a rendelkezésre álló magokon. Ahhoz azonban, hogy egy soros program teljes mértékben kihasználhassa a többmagos architektúrát, a programozónak kell átszerkesztenie és párhuzamosítania a kódot. Az alkalmazások futtatásának gyorsítását már nem lehet frekvenciaskálázással elérni, hanem a programozóknak kell párhuzamosítaniuk a szoftverkódjukat, hogy kihasználhassák a többmagos architektúrák növekvő számítási teljesítményét.[14]

Amdahl törvénye és Gustafson törvénye[szerkesztés]

Amdahl törvényének grafikus ábrázolása. A program párhuzamosítástól való felgyorsítását korlátozza az, hogy a program mekkora részét lehet párhuzamosítani. Például ha a program 90%-a párhuzamosítható, akkor az elméleti maximális sebesség a párhuzamos számítás használatával tízszeres lesz, függetlenül attól, hogy hány processzort használunk.
Tegyük fel, hogy egy feladatnak két független része van: A és B. A B rész a teljes számítás idejének körülbelül 25%-át veszi igénybe. Nagyon kemény munkával előfordulhat, hogy ez a rész ötször gyorsabb lesz, de ez csak kicsit csökkenti a teljes számításhoz szükséges időt. Ezzel szemben lehet, kevesebb munkát kell elvégezni, hogy az A rész kétszer gyorsabb legyen. Ez sokkal gyorsabbá teszi a számítást mint a B rész optimalizálása, annak ellenére, hogy a B rész gyorsulása aránylag nagyobb (ötszörös a kétszeressel szemben).

Optimális esetben a párhuzamosítástól való gyorsulás lineáris lenne – a feldolgozóelemek számának megkétszerezésével a futási időt a felére, második alkalommal történő megkétszerezésére pedig ismét a felére kellene csökkenteni. Azonban nagyon kevés párhuzamos algoritmus éri el az optimális gyorsulást. Legtöbbjüknél csaknem lineáris sebességnövekedés tapasztalható kisszámú feldolgozóelem esetében, amely állandó értékké válik nagyszámú feldolgozóelem esetén.

Az algoritmus várható gyorsulását egy párhuzamos számítási platformon Amdahl törvénye adja meg:[15]

ahol

  • a végrehajtás késleltetésének lehetséges gyorsulása az egész feladat esetében;
  • a végrehajtás késleltetésének lehetséges gyorsulása a feladat párhuzamosítható része esetében;
  • a feladat párhuzamosítható részének végrehajtási ideje a párhuzamosítás előtt a teljes feladat végrehajtási idejének százalékában.

Mivel az , ezért a program egy kis része, amely nem párhuzamosítható, korlátozza a párhuzamosítástól elérhető teljes gyorsulást. Egy nagy matematikai vagy mérnöki feladatot megoldó program általában több párhuzamosítható és több nem párhuzamosítható (soros) részből áll. Ha a program nem párhuzamosítható része a futási idő 10%-át teszi ki , legfeljebb tízszeres gyorsulást érhetünk el, függetlenül attól, hogy hány processzort használunk. Ez felső korlátot jelent a párhuzamos végrehajtóegységek hozzáadásának hasznosságára. „Ha egy feladat nem osztható szét szekvenciális korlátozások miatt, a feldolgozási teljesítmény növelése nem befolyásolja annak végrehajtási idejét. Az emberi terhesség kilenc hónapig tart, függetlenül attól, hogy hány nőt jelölünk ki.”[16]

Gustafson törvényének grafikus ábrázolása

Amdahl törvénye csak azokra az esetekre vonatkozik, amikor a probléma nagysága rögzítve van. A gyakorlatban, mivel egyre több számítási erőforrás válik elérhetővé, hajlamosak nagyobb problémákhoz (nagyobb adatkészletekhez) szokni, és a párhuzamosítható részben eltöltött idő gyakran sokkal gyorsabban növekszik mint a benne rejlő sorozatmunka.[17] Ebben az esetben Gustafson törvénye kevésbé pesszimista, és reálisabb értékelést ad a párhuzamos teljesítményről:[18]

Mind Amdahl, mind Gustafson törvénye feltételezi, hogy a program soros részének futási ideje független a processzorok számától. Amdahl törvénye azt feltételezi, hogy a teljes probléma rögzített méretű, tehát a párhuzamosan elvégzendő munka független a processzorok számától, míg Gustafson törvénye azt, hogy a párhuzamosan elvégzendő munka arányosan változik a processzorok számával.

Függőségek[szerkesztés]

Az adatfüggőségek megértése alapvető fontosságú a párhuzamos algoritmusok megvalósításában. Egyik program sem futhat gyorsabban mint a függő számítások leghosszabb lánca (úgynevezett kritikus út), mivel a számításokat, amelyek függnek a lánc előzetes számításától, sorrendben kell végrehajtani. A legtöbb algoritmus azonban nem csupán egy hosszú függő számítási láncból áll; általában vannak lehetőségek független számítások párhuzamos végrehajtására.

Legyen és két programszegmens. Bernstein feltételei[19] leírják, mikor a kettő független és párhuzamosan végrehajtható. számára legyen az összes bemeneti és a kimeneti változó, és ugyanígy a esetében. és függetlenek, ha teljesülnek a következők:

Az első feltétel megsértése valódi függőséget eredményez, ahol az első szegmens által adott eredményt a második szegmens felhasznál. A második feltétel hamis függőséget képvisel, amikor a második szegmens az első szegmenshez szükséges változót állít elő. A harmadik, egyben utolsó feltétel egy kimeneti függőséget képvisel: amikor két szegmens ír ugyanarra a helyre, akkor az eredmény a logikailag utoljára végrehajtott szegmenstől származik.[20]

Nézzük meg a következő függvényeket, amelyek többféle függőséget mutatnak:

1: function Dep(a, b)
2: c := a * b
3: d := 3 * c
4: end function

Ebben a példában a 3. utasítás nem hajtható végre a 2. utasítás előtt (vagy akár azzal párhuzamosan), mert a 3. utasítás a 2. utasítás eredményét használja. Ez megsérti az 1. feltételt, és így valódi függőséget okoz.

1: function NoDep(a, b)
2: c := a * b
3: d := 3 * b
4: e := a + b
5: end function

Ebben a példában nincs függőség az utasítások között, tehát mindegyik párhuzamosan futtatható.

Bernstein feltételei nem teszik lehetővé a memória megosztását a különböző folyamatok között. Ehhez szükség van az utasítás hozzáférések közötti érvényesítésére, például szemaforokra, akadályokra vagy más szinkronizálási módszerre.

Versenyhelyzetek, kölcsönös kizárás, szinkronizálás és párhuzamos lassulás[szerkesztés]

A párhuzamos programok alfeladatait gyakran szálaknak hívják. Néhány párhuzamos számítógép-architektúra a szálak kisebb, könnyű verzióit, rostokat, míg mások nagyobb, folyamatoknak nevezett verziókat használnak. A „szálakat” azonban elfogadják az alfeladatok általános kifejezésének.[21] A szálaknak gyakran szinkronizált hozzáférésre van szükségük egy objektumhoz vagy más erőforráshoz, például amikor frissíteniük kell egy köztük megosztott változót. Szinkronizálás nélkül a két szál közötti utasítások tetszőleges sorrendben összeilleszthetők. Vegyük például a következő programot:

A szál B szál
1A: olvassa be a V változót 1B: olvassa be a V változót
2A: adjon hozzá 1-et a V változóhoz 2B: adjon hozzá 1-et a V változóhoz
3A: írja vissza a V változót 3B: írja vissza a V változót

Ha az 1B utasítást az 1A és a 3A között hajtják végre, vagy ha az 1A utasítást az 1B és a 3B között hajtják végre, akkor a program hibás adatokat fog előállítani. Ezt versenyhelyzetnek nevezik. A programozónak zárat kell használnia, hogy a kölcsönös kizárást érvényesítse. A zár egy programozási nyelvi konstrukció, amely lehetővé teszi, hogy az egyik szál átvegye az irányítást egy változó felett és megakadályozza, hogy más szálak olvassák vagy írják azt, amíg a változó fel nem oldódik. A zárat tartó szál szabadon végrehajthatja annak kritikus szakaszát (egy olyan programszakaszát, amely kizárólagos hozzáférést igényel valamilyen változóhoz) és az adat feloldását, amikor kész. Ezért a program helyes végrehajtásának garantálása érdekében a fenti program átírható zárak használatához:

A szál B szál
1A: zárolja a V változót 1B: zárolja a V változót
2A: olvassa be a V változót 2B: olvassa be a V változót
3A: adjon hozzá 1-et a V változóhoz 3B: adjon hozzá 1-et a V változóhoz
4A: írja vissza a V változót 4B: írja vissza a V változót
5A: oldja fel a V változót 5B: oldja fel a V változót

Az egyik szál sikeresen zárolja a V változót, míg a másik szál befejezi a végrehajtást, és nem folytatja addig, amíg a V változó újra fel nem oldódik. Ez garantálja a program helyes végrehajtását. Lehetséges, hogy zárolásokra van szükség a program helyes végrehajtásának biztosításához, amikor a szálaknak sorba kell állniuk az erőforrásokhoz való hozzáféréshez, de ezek használata jelentősen lelassíthatja a programot, és befolyásolhatja annak megbízhatóságát.[22]

Több változó lezárása nem atomi zárakkal bevezeti a program holtpontjának lehetőségét. Egy atomi zár több változót zárol le egyszerre. Ha nem tudja lezárni mindet, akkor egyiket sem zárja le. Ha két szálnak ugyanazt a két változót kell zárolnia nem atomi zárral, akkor lehetséges, hogy az egyik szál lezárja az egyik, a másik szál pedig a másik változót. Ebben az esetben egyik szál sem fejeződik be, és holtpont lesz az eredmény.[23]

Sok párhuzamos program megköveteli, hogy a részfeladatai szinkronban működjenek. Ehhez akadály használata szükséges. Az akadályokat jellemzően zár vagy szemafor segítségével valósítják meg.[24] Az algoritmusok egyik osztálya, az úgynevezett zárolás és várakozás nélküli algoritmusok összességében elkerülik a zárak és az akadályok használatát. Ezt a megközelítést azonban általában nehéz végrehajtani, és helyesen megtervezett adatszerkezeteket igényel.[25]

Nem minden párhuzamosítás eredményez gyorsulást. Általánosságban elmondható, hogy mivel a feladat egyre több szálon oszlik meg, ezek a szálak idejük egyre növekvő részét egymással kommunikálva vagy egymásra várva töltik, hogy hozzáférjenek az erőforrásokhoz.[26][27] Ha az erőforrásért való konfliktus vagy a kommunikációból származó költségek uralják az egyéb számításra fordított időt, akkor a további párhuzamosítás (azaz a munkaterhelés felosztása még több szálra) növeli, nem pedig csökkenti a befejezéshez szükséges időt. Ez a probléma párhuzamos lassulás néven ismert,[28] és bizonyos esetekben javítható szoftverelemzéssel és újratervezéssel.[29]

Finom szemcsés, durva szemcsés és zavarba ejtő párhuzamosság[szerkesztés]

Az alkalmazásokat gyakran annak alapján osztályozzák, hogy az alfeladatoknak milyen gyakran kell szinkronizálniuk vagy kommunikálniuk egymással. Az alkalmazás finom szemcsés párhuzamosságot mutat, ha részfeladatainak másodpercenként sokszor kell kommunikálniuk; durva szemcsés párhuzamosságot mutat, ha másodpercenként nem sokszor kommunikálnak, és zavarba ejtő párhuzamosságot mutat, ha ritkán vagy soha nem kell kommunikálniuk. A zavarba ejtően párhuzamos alkalmazásokat lehet a legkönnyebben párhuzamosítani.

Konzisztenciamodellek[szerkesztés]

A párhuzamos programozási nyelveknek és a párhuzamos számítógépeknek rendelkezniük kell konzisztenciamodellel (más néven memóriamodellel). A konzisztenciamodell meghatározza a számítógépes memóriában végrehajtott műveleteket és az eredmények előállításának szabályait.

Az egyik első konzisztenciamodell Leslie Lamport szekvenciális konzisztenciamodellje volt. A szekvenciális konzisztencia egy párhuzamos program olyan tulajdonsága, hogy annak párhuzamos végrehajtása ugyanazokat az eredményeket adja mint a szekvenciális végrehajtása. Pontosabban, egy program szekvenciálisan konzisztens, ha „bármely végrehajtás eredménye megegyezik, amennyiben az összes processzor műveletei tetszőleges sorrendben kerülnek végrehajtásra, és az egyes processzorok műveletei ebben a sorrendben jelennek meg a program által meghatározott sorrendben”.[30]

A tranzakciós memória a konzisztenciamodell általános típusa. A tranzakciós memória kölcsönveszi az adatbázis-elméletből az atomi tranzakciók fogalmát, és alkalmazza azokat a memóriaelérésekre.

Matematikailag ezek a modellek többféle módon bemutathatók. Az 1962-ben bevezetett Petri-hálók korai kísérlet volt a konzisztenciamodellek szabályainak rögzítésére. Az adatáramlás-elmélet később ezekre épült, és az adatfolyam-architektúrákat az adatáramlás-elmélet ötleteinek fizikai megvalósításához hozták létre. Először az 1970-es évek végén a folyamatkalkulusokat, mint például a kommunikációs rendszerek kalkulusát és a szekvenciális folyamatok kommunikálását, arra fejlesztették ki, hogy lehetővé tegyék az algebrai érvelést olyan rendszerekről, amelyek egymással kölcsönhatásba lépő komponensekből állnak. A folyamatkalkulusok családjának újabb kiegészítései, mint például a π-kalkulus, képesek voltak megindokolni a dinamikus topológiákat. A logikai, mint a TLA+, és az olyan matematikai modelleket, mint például a trace és az actor event diagram, szintén kifejlesztették az egyidejű rendszerek viselkedésének leírására.

Flynn-féle osztályozás[szerkesztés]

Michael J. Flynn létrehozta az egyik legkorábbi osztályozási rendszert a párhuzamos (és szekvenciális) számítógépek és programok számára, amit ma Flynn-féle osztályozásnak hívnak. Flynn osztályozta a programokat és a számítógépeket attól függően, hogy egy vagy több utasítást és hogy ezek az utasítások egy vagy több adatkészletet használnak-e, vagy sem.

Az „egy utasítás-, egy adatfolyam” (SISD) osztályozás egyenértékű egy teljesen szekvenciális programmal. Az „egy utasítás-, több adatfolyam” (SIMD) osztályozás megegyezik azzal, hogy ugyanazt a műveletet ismételten végezzük el egy nagy adatkészleten. Ezt általában jelfeldolgozó alkalmazásokban használják. A „több utasítás-, egy adatfolyam” (MISD) egy ritkán használt osztályozás. Miközben kidolgozták az ennek kezelésére szolgáló számítógép-architektúrákat (például a szisztolés tömbök), kevés ilyen, ebbe az osztályba tartozó alkalmazás valósult meg. A „több utasítás-, több adatfolyam” (MIMD) programok messze a leggyakoribb típusai a párhuzamos programoknak.

David A. Patterson és John L. Hennessy szerint „Néhány gép természetesen ezeknek a kategóriáknak a hibridjei (keverékei), de ez a klasszikus modell fennmaradt, mert egyszerű, könnyen érthető, és jó első megközelítést ad. Ugyancsak – talán érthetősége miatt – a legszélesebb körben alkalmazott minta.”[31]

A párhuzamosság típusai[szerkesztés]

Bitszintű párhuzamosság[szerkesztés]

A VLSI (Very Large Scale Integration) számítógépes chipgyártási technológiának az 1970-es években történő megjelenéséig, mintegy 1986-ig a számítógép-architektúra felgyorsítását a számítógépes szó méretének megduplázása vezette – az az információmennyiség, amelyet a processzor ciklusonként módosíthat.[32] A szóméret növelése csökkenti a processzor által végrehajtott műveletek számát olyan változók módosításakor, amelyek mérete meghaladja a szó hosszát. Például ha egy 8 bites processzornak két 16 bites egész számot kell összeadnia, akkor a processzornak először hozzá kell adnia 8 alacsonyabb rendű bitet minden egyes egészből a szokásos összeadási utasítás felhasználásával, majd hozzá kell adnia 8 magasabb rendű bitet egy add-with-carry utasítás segítségével és a átvitelbitet az alacsonyabb rendű összeadásból; így egy 8 bites processzornak két utasításra van szüksége egyetlen művelet végrehajtásához, amire egy 16 bites processzor egyetlen utasítással is képes lenne.

A 4 bites mikroprocesszorokról történelmileg 8, 16, majd 32 bites mikroprocesszorokra váltottak. Ez a tendencia általánosságban véget ért a 32 bites processzorok bevezetésével, amely két évtizede az általános célú számítástechnika szabványa. Csak a 2000-es évek elején, az x86-64-es architektúrák megjelenésével váltak a 64 bites processzorok köznapivá.

Utasításszintű párhuzamosság[szerkesztés]

Szabványos processzor futószalag nélkül. Egy utasítás elvégzéséhez öt ciklus szükséges, és így a processzor szubkaláris teljesítményt adhat (IPC = 0,2 < 1).

A számítógépes program lényegében egy processzor által végrehajtott utasítások folyamja. Utasításszintű párhuzamosság nélkül a processzor csak egynél kevesebb utasítást adhat ki ciklusonként (IPC < 1). Ezeket a processzorokat szubkaláris processzoroknak nevezzük. Ezek az utasítások újrarendelhetők és csoportokba rendezhetők, amelyeket ezután párhuzamosan hajtanak végre a program eredményének megváltoztatása nélkül. Ezt úgy hívják, hogy utasításszintű párhuzamosság. Az utasításszintű párhuzamosság előretörése az 1980-as évek közepétől az 1990-es évek közepéig uralta a számítógép-architektúrát.[33]

Szabványos processzor ötszintes futószalaggal. A legjobb esetben egy utasítás teljesítéséhez egy ciklus szükséges, így a processzor skaláris teljesítményt adhat (IPC = 1).

Minden modern processzor többszintes utasítás-futószalagot kínál. A futószalag egyes szintjei eltérő műveletnek felelnek meg, amelyet a processzor az adott utasításban hajt végre; egy N szintes futószalaggal rendelkező processzornak legfeljebb N különféle utasítása lehet a teljesítés különböző szakaszaiban, és így ciklusonként egy utasítást adhat ki (IPC = 1). Ezek a processzorok skaláris processzorok. A futószalagos processzor szabványos példája egy RISC processzor, amely öt szintből áll: utasításlekérés (IF), utasításdekódolás (ID), végrehajtás (EX), memória-hozzáférés (MEM) és regiszter-visszaírás (WB). A Pentium 4 processzornak 35 szintes futószalagja volt.[34]

Szabványos szuperskaláris processzor ötszintes futószalaggal. A legjobb esetben két utasítás teljesítéhez egy ciklus szükséges, és így a processzor szuperskaláris teljesítményt adhat (IPC = 2 > 1).

A legtöbb modern processzornak több végrehajtóegysége is van. Általában ezt a szolgáltatást kombinálják a futószalaggal, és így ciklusonként egynél több utasítást adhatnak ki (IPC > 1). Ezeket a processzorokat szuperskaláris processzoroknak nevezzük. Az utasításokat csak akkor lehet csoportosítani, ha nincs adatfüggőség közöttük. A scoreboarding és a Tomasulo-algoritmus (amely hasonló az scoreboardinghoz, de a regiszterek átnevezését használja) a két leggyakoribb módszer a soron kívüli végrehajtás és az utasításszintű párhuzamosság megvalósításához.

Feladat-párhuzamosság[szerkesztés]

A feladat-párhuzamosság egy párhuzamos program azon jellemzője, hogy „teljesen eltérő számítások végezhetők ugyanazon vagy különböző adatkészleteken”.[35] Ez ellentétben áll az adat-párhuzamossággal, amikor ugyanazt a számítást hajtják végre ugyanazon vagy különböző adatkészleteken. A feladat-párhuzamosság magában foglalja egy feladat alfeladatokra bontását, majd az egyes alfeladatok kiosztását egy processzor számára végrehajtás céljából. A processzorok ezután ezeket az alfeladatokat egyidejűleg és gyakran együttműködve hajtják végre. A feladat-párhuzamosság általában nem egyezik meg a probléma méretével.[36]

Szuperszószintű párhuzamosság[szerkesztés]

A szuperszószintű párhuzamosság egy vektorizálási technika, amely cikluskifejtésen és alapvető blokkvektorizáláson alapul. Ez abban különbözik a ciklusvektorizációs algoritmusoktól, hogy ki tudja használni a soros kód párhuzamosságát, például a koordináták, a színcsatornák vagy a kézzel kifejtett ciklusok kezelését.[37]

Hardver[szerkesztés]

Memória és kommunikáció[szerkesztés]

A párhuzamos számítógép főmemóriája vagy közös memória (az összes feldolgozóelem között megosztva egyetlen címtérben), vagy elosztott memória (amelyben minden feldolgozóelemnek megvan a saját helyi címtere).[38] Az elosztott memória arra a tényre utal, hogy a memória logikailag van elosztva, de gyakran azt jelenti, hogy fizikailag is eloszlik. Az osztott közös memória és a memóriavirtualizáció kombinálja a két megközelítést, ahol a feldolgozóelemnek saját helyi memóriája van, és a memóriahoz nem helyi processzorok férhetnek hozzá. A helyi memória elérése általában gyorsabb mint a nem helyi memória elérése. A szuperszámítógépeken az osztott közös memóriaterület a programozási modell segítségével, például osztott globális címtér használatával valósítható meg. Ez a modell lehetővé teszi az egyik számítási csomóponton lévő folyamatok számára, hogy átlátható módon hozzáférjenek egy másik számítási csomópont távoli memóriájához. Az összes számítási csomópont nagy sebességű összeköttetésen keresztül, például az InfiniBand segítségével egy külső közösmemória-rendszerhez is csatlakozik. Ezt a külső közösmemória-rendszert burst puffernek nevezik, amely általában nem felejtő memória tömbjeiből épül fel, fizikailag elosztva több bemeneti/kimeneti csomópont között.

A nem egységes memória-hozzáférésű (NUMA) architektúra logikai nézete. Az egyik könyvtárban lévő processzorok kevesebb késleltetéssel férhetnek hozzá a könyvtár memóriájához mint a másik könyvtár memóriájához.

Azokat a számítógép-architektúrákat, amelyekben a főmemória minden eleméhez azonos késleltetéssel és sávszélességgel lehet hozzáférni, egységes memória-hozzáférésű (UMA) rendszereknek nevezzük. Általában ezt csak egy közösmemória-rendszerrel lehet elérni, amelyben a memória fizikailag nincs elosztva. Azt a rendszert, amely nem rendelkezik ezzel a tulajdonsággal, nem egységes memória-hozzáférésű (NUMA) architektúrának nevezik. Az elosztottmemória-rendszerek nem egységes memória-hozzáféréssel rendelkeznek.

A számítógépes rendszerek gyorsítótárakat használnak – a processzor közelében található kis és gyors memóriákat, amelyek ideiglenes memóriaértékeket tárolnak (fizikai és logikai értelemben is egyaránt közel vannak). A párhuzamos számítógépes rendszereknek nehézségeik vannak olyan gyorsítótárakkal, amelyek ugyanazt az értéket egynél több helyen tárolhatják, a program helytelen végrehajtásának lehetőségével. Ezeknek a számítógépeknek gyorsítótárkoherencia-rendszerre van szükségük, amely nyomon követi a gyorsítótárazott értékeket, és stratégiailag megtisztítja azokat, garantálva ezzel a program helyes végrehajtását. A buszfigyelés az egyik leggyakoribb módszer annak nyomon követésére, hogy mely értékekhez férnek hozzá (és ezért meg kell tisztítani). Nagy teljesítményű gyorsítótárkoherencia-rendszerek tervezése nagyon nehéz probléma a számítógép-architektúrában. Ennek eredményeként a közös memória számítógép-architektúrái nem olyan nagy léptékűek mint az elosztottmemória-rendszerek.[38]

A processzor–processzor és a processzor–memória kommunikációt sokféle módon megvalósíthatjuk a hardverben, többek között közös (multiportált vagy multiplexelt) memória, keresztkapcsoló, megosztott busz vagy összekapcsolt hálózat révén számos topológiával, beleértve a csillagot, gyűrűt, fát, hiperkockát, kövér hiperkockát (egy csomóponton egynél több processzort tartalmazó hiperkocka) vagy n dimenziós hálót.

Az összekapcsolt hálózatokon alapuló párhuzamos számítógépeknek valamilyen útválasztással kell rendelkezniük, hogy lehetővé tegyék az üzenetek továbbítását a közvetlenül nem csatlakozó csomópontok között. A processzorok közötti kommunikációhoz használt közeg valószínűleg hierarchikus lesz a nagy többprocesszoros gépekben.

A párhuzamos számítógépek osztályai[szerkesztés]

A párhuzamos számítógépeket nagyjából osztályozhatjuk azon szint alapján, amelyen a hardver a párhuzamosságot támogatja. Ez a besorolás nagyjából hasonló az alapvető számítási csomópontok közötti távolsággal. Ezek nem zárják ki egymást; például a szimmetrikus többprocesszoros rendszerekből álló fürtök viszonylag gyakoriak.

Többmagos számítástechnika[szerkesztés]

A többmagos processzor több feldolgozóegységet (úgynevezett „magokat”) foglal magában ugyanazon a chipen. Ezek a processzorok különböznek a szuperskaláris processzoroktól, amelyek több végrehajtóegységet tartalmaznak, és ciklusonként több utasítást adhatnak ki egy utasításfolyamból (szálból); ezzel szemben a többmagos processzorok ciklusonként több utasítást adhatnak ki több utasításfolyamból. Az IBM Cell mikroprocesszorát a Sony PlayStation 3-ban való használatra tervezték, egy kiemelkedő többmagos processzorként. A többmagos processzorok minden magja potenciálisan szuperskaláris is lehet, azaz ciklusonként minden egyes mag több utasítást adhat ki egy szálból.

Az egyidejű többszálú utasításvégrehajtás (amelyek közül az Intel Hyper-Threading a legismertebb) a pseudo-multi-coreism korai formája volt. Az egyidejű többszálú utasításvégrehajtásra képes processzorok több végrehajtóegységet tartalmaznak ugyanabban a feldolgozóegységben – azaz szuperskaláris architektúrával rendelkeznek –, és ciklusonként több utasítást adhatnak ki több szálból. Az időszakos többszálú utasításvégrehajtás ugyanakkor egyetlen végrehajtóegységet foglal magában ugyanabban a feldolgozóegységben, és egyszerre egy utasítást adhat ki több szálból.

Szimmetrikus többprocesszoros feldolgozás[szerkesztés]

A szimmetrikus többprocesszoros rendszer (SMP) több azonos processzorral rendelkezik, amelyek megosztják a memóriát, és buszon keresztül csatlakoznak.[39]buszviszály megakadályozza a buszarchitektúrák méretezését. Ennek eredményeként az SMP-k általában legfeljebb 32 processzort tartalmaznak.[40] A processzorok kis mérete és a nagy gyorsítótárak révén a buszsávszélességre vonatkozó követelmények jelentős csökkenése miatt az ilyen szimmetrikus többprocesszoros rendszerek rendkívül költséghatékonyak, feltéve, hogy elegendő mennyiségű memória-sávszélességgel rendelkeznek.[39]

Elosztott számítástechnika[szerkesztés]

Az elosztott számítógép elosztott memóriával rendelkező számítógépes rendszer, amelyben a feldolgozóelemek hálózattal vannak összekötve. Az elosztott számítógépek nagymértékben bővíthetők. Az „egyidejű számítástechnika”, a „párhuzamos számítástechnika” és az „elosztott számítástechnika” kifejezések nagymértékben átfedik egymást, és közöttük nincs világos különbségtétel.[41] Ugyanaz a rendszer jellemezhető „párhuzamos” és „elosztott” formában is; egy tipikus elosztott rendszerben a processzorok párhuzamosan futnak.[42]

Számítógépfürtök[szerkesztés]

A fürt lazán kapcsolt számítógépek olyan csoportja, amelyek szorosan együttműködnek egymással, így bizonyos szempontból egyetlen számítógépnek tekinthetők.[43] A fürtök több önálló gépből állnak, amelyeket egy hálózat csatlakoztat. A fürtökben lévő gépeknek nem kell szimmetrikusnak lenniük, azonban a terheléselosztás sokkal nehezebb, ha nem azok. A leggyakoribb fürttípus a Beowulf cluster, amely egy TCP/IP Ethernet helyi hálózathoz csatlakoztatott, több azonos kereskedelmi forgalomban kapható számítógépen valósul meg.[44] A Beowulf technológiát eredetileg Thomas Sterling és Donald Becker fejlesztette ki. A TOP500 rangsor szuperszámítógépei közül 87% fürt.[45] A fennmaradók tömegesen párhuzamos processzorok, amelyeket az alábbiakban ismertetünk.

Mivel a rácsszámítási rendszerek (alább leírtak) könnyen kezelhetik a zavarba ejtően párhuzamos problémákat, a modern fürtöket általában a nehezebb problémák kezelésére tervezték – olyan problémák, amelyek megkövetelik a csomópontoknak, hogy gyakrabban osszák meg a közbenső eredményeket. Ehhez nagy sávszélességre van szükség, és ami még fontosabb, egy alacsony késleltetésű összekapcsolási hálózatra. Számos történelmi és jelenlegi szuperszámítógép, például a Cray Gemini hálózat, kifejezetten a fürtszámításhoz tervezett, nagy teljesítményű hálózati hardvert használ.[46] 2014-től a legtöbb jelenlegi szuperszámítógép néhány szabványos hálózati hardvert használ, gyakran Myrinet, InfiniBand vagy Gigabit Ethernet eszközt.

Tömegesen párhuzamos számítástechnika[szerkesztés]
Egy szekrény az IBM Blue Gene/L tömegesen párhuzamos szuperszámítógépéből

A tömegesen párhuzamos processzor (MPP) egyetlen számítógép sok hálózati processzorral. Az MPP-k ugyanolyan tulajdonságokkal rendelkeznek mint a fürtök, de speciális összekapcsolási hálózatokkal rendelkeznek (míg a fürtök kereskedelmi forgalomban kapható hardvert használnak a hálózathoz). Az MPP-k általában nagyobbak is mint a fürtök, jellemzően „sokkal több” mint 100 processzor.[47] Egy MPP-ben „minden processzor tartalmazza a saját memóriáját, valamint az operációs rendszer és az alkalmazás másolatát. Minden alrendszer nagysebességű összeköttetésen keresztül kommunikál a többiekkel.”[48]

A TOP500 rangsor szerint 2009 júniusában a világon az ötödik leggyorsabb szuperszámítógép az IBM Blue Gene/L volt, mely egy MPP.

Rácsszámítások[szerkesztés]

A rácsszámítás a párhuzamos számítástechnika legelterjedtebb formája. Az interneten keresztül kommunikáló számítógépeket használ egy adott probléma megoldására. Az interneten elérhető alacsony sávszélesség és rendkívül magas késleltetés miatt az elosztott számítástechnika általában csak zavarba ejtően párhuzamos problémákkal foglalkozik. Számos elosztott számítástechnikai alkalmazást hoztak létre, amelyek közül a legismertebbek a SETI@home és a Folding@home.[49]

A legtöbb rácsszámító alkalmazás köztes szoftvert használ (olyan szoftvert, amely az operációs rendszer és az alkalmazás között helyezkedik el a hálózati erőforrások kezelésére és a szoftver interfészének szabványosítására). A leggyakoribb elosztott számítástechnikai köztes szoftver a Berkeley Open Infrastructure for Network Computing (BOINC). Az elosztott számítástechnikai szoftverek gyakran „tartalék ciklusokat” használnak, és számításokat végeznek olyankor, amikor a számítógép tétlen.

Speciális párhuzamos számítógépek[szerkesztés]

A párhuzamos számítástechnikán belül vannak olyan speciális párhuzamos eszközök, amelyek továbbra is érdekes területeken maradnak. Noha nem szakterület-specifikusak, hajlamosak a párhuzamos problémák csak néhány osztályára alkalmazni.

Újrakonfigurálható számítás a felhasználás helyén programozható logikai kapumátrixokkal[szerkesztés]

Az újrakonfigurálható számítás egy felhasználás helyén programozható logikai kapumátrix (FPGA) felhasználása mint egy általános célú számítógép társprocesszora. Az FPGA lényegében egy számítógépes chip, amely képes újratervezni magát egy adott feladatra.

Az FPGA-k programozhatók olyan hardverleíró nyelvekkel mint a VHDL vagy a Verilog. Ezeken a nyelveken történő programozás azonban unalmas lehet. Számos gyártó hozott létre C to HDL nyelveket, amelyek megkísérelik a C programozási nyelv szintaxisát és szemantikáját utánozni, amelyeket a legtöbb programozó ismer. A legismertebb C to HDL nyelvek a Mitrion-C, az Impulse C, a DIME-C és a Handel-C. Erre a célra a SystemC C++ alapú meghatározott részhalmazai is használhatók.

Az AMD azon döntése, hogy HyperTransport technológiáját más gyártók számára megnyitja, vált a nagy teljesítményű, újrakonfigurálható számítástechnikát lehetővé tévő technológiává.[50] Michael R. D’Amour, a DRC Computer Corporation vezérigazgató-helyettese szerint: „amikor először sétáltunk be az AMD-hez »foglalatlopóknak« hívtak minket. Most partnereinknek hívnak minket.”[50]

Általános célú számítástechnika grafikus feldolgozóegységeken (GPGPU)[szerkesztés]

Az általános célú számítástechnika grafikus feldolgozóegységeken (GPGPU) meglehetősen új tendencia a számítógépes mérnöki kutatásokban. A GPU-k olyan társprocesszorok, amelyeket erősen optimalizáltak a számítógépes grafika feldolgozására.[51] A számítógépes grafikus feldolgozás olyan terület, amelyben az adatpárhuzamos műveletek dominálnak – különösen a lineáris algebrai mátrixműveletek.

A kezdeti napokban a GPGPU programok a szokásos grafikus API-kat használták a programok végrehajtására. Ugyanakkor számos új programozási nyelv és platform épült általános célú számítások elvégzéséhez GPU-n mind az Nvidia, mind az AMD által kiadott programozási környezetekkel, a CUDA és a Stream SDK segítségével. Egyéb GPU programozási nyelvek a BrookGPU, a PeakStream és a RapidMind. Az Nvidia a Tesla sorozatban is kiadott speciális termékeket számításhoz. A Khronos Group technológiai konzorcium kiadta az OpenCL specifikációt, amely keretrendszer olyan programok írására, amelyeket CPU-kból és GPU-kból álló platformon keresztül hajtanak végre. Az AMD, az Apple, az Intel, az Nvidia és még mások is támogatják az OpenCL-t.

Alkalmazásspecifikus integrált áramkörök[szerkesztés]

Számos alkalmazásspecifikus integrált áramköri (ASIC) megközelítést dolgoztak ki a párhuzamos alkalmazások kezelésére.[52][53][54]

Mivel az ASIC (definíció szerint) egy adott alkalmazásra jellemző, ezért teljes mértékben optimalizálható az adott alkalmazás számára. Ennek eredményeként egy adott alkalmazás esetén az ASIC általában jobb mint egy általános célú számítógép. Az ASIC-eket azonban UV fotolitográfia hozza létre. Ehhez a folyamathoz maszkkészlet szükséges, amely rendkívül költséges lehet. Egy maszkkészlet több mint egymillió dollárba kerülhet.[55] (Minél kisebbek a chiphez szükséges tranzisztorok, annál drágább lesz a maszk.) Eközben az általános célú számítástechnika teljesítményének növekedése az idő múlásával (ahogyan azt Moore törvénye leírja) hajlamos arra, hogy ezeket az előnyöket csak egy vagy két chipgeneráció alatt törölje el.[50] A magas kezdeti költség és a Moore törvénye által vezérelt általános célú számítástechnika túllépésének tendenciája az ASIC-eket a legtöbb párhuzamos számítástechnikai alkalmazás számára megvalósíthatatlanná tette. Néhányat azonban építettek. Példa erre a PFLOPS RIKEN MDGRAPE-3 gépe, amely egyedi ASIC-eket használ molekuláris dinamikai szimulációhoz.

Vektorprocesszorok[szerkesztés]
A Cray-1 vektorprocesszor

A vektorprocesszor egy processzor vagy számítógépes rendszer, amely ugyanazt az utasítást képes végrehajtani nagy adatsorokon. A vektorprocesszorok magas szintű műveleteket végeznek, amelyek számok vagy vektorok lineáris tömbjein működnek. Példa vektorműveletre az , ahol , és mindegyike 64 bites lebegőpontos számok 64 elemű vektorja.[56] Ezek szorosan kapcsolódnak Flynn SIMD besorolásához.[56]

A Cray számítógépek az 1970-es és 1980-as években váltak híressé vektorfeldolgozó számítógépeikkel. Ugyanakkor a vektorprocesszorok – mind processzorként, mind pedig teljes számítógépes rendszerként – általánosságban eltűntek. A modern processzor-utasításkészletek tartalmaznak néhány vektorfeldolgozási utasítást, például a Freescale Semiconductor AltiVec és az Intel Streaming SIMD Extensions (SSE).

Szoftver[szerkesztés]

Párhuzamos programozási nyelvek[szerkesztés]

Egyidejű programozási nyelvek, könyvtárak, API-k és párhuzamos programozási modellek (például algoritmikus vázlatok) készültek a párhuzamos számítógépek programozására. Ezeket általában osztályokra lehet bontani az alapul szolgáló memóriaarchitektúrára vonatkozó feltételezések alapján – közös memória, elosztott memória vagy osztott közös memória. A közös memória programozási nyelvei a közös memória változóinak manipulálásával kommunikálnak. Az elosztott memória az üzenettovábbítást használja. A POSIX Threads és az OpenMP a legszélesebb körben használt közös memória API-k, míg a Message Passing Interface (MPI) a legszélesebb körben használt üzenettovábbító rendszer API.[57] A párhuzamos programok programozásában alkalmazott egyik koncepció a jövőbeli koncepció, ahol a program egyik része ígéretet tesz arra, hogy a szükséges adatot egy későbbi időpontban a program egy másik részéhez továbbítja.

A CAPS entreprise és a Pathscale szintén összehangolják azon törekvéseiket, hogy a hibrid többmagos párhuzamos programozási (HMPP) irányelveket OpenHMPP néven hozzák létre. Az OpenHMPP irányelvalapú programozási modell szintaxist kínál a számítások hatékony eltávolításához a hardveres gyorsítókon, és optimalizálja az adatok mozgását a hardveres memóriából/memóriába. Az OpenHMPP irányelvek távoli eljáráshívást (RPC) írnak le egy gyorsítóeszközön (pl. GPU) vagy általánosságban egy magkészletnél. Az irányelvek C vagy Fortran kódot használnak a funkcionalitások két csoportjának leírására: az eljárások (codeletek) távoli eszközre történő letöltése, és az adatátvitel optimalizálása a processzor főmemóriája és a gyorsítómemória között.

A fogyasztói GPU-k növekedése a compute kernelek támogatásához vezetett, akár a grafikai API-kban (más néven compute shaderek), dedikált API-kban (például OpenCL) vagy más nyelvbővítményekben.

Automatikus párhuzamosítás[szerkesztés]

Egy szekvenciális program automatikus párhuzamosítása egy fordító által a párhuzamos számítástechnika „szent grálja”, különösen a processzor frekvenciájának fent említett korlátja mellett. A kutatók évtizedes munkája ellenére az automatikus párhuzamosítás csak korlátozott sikerrel járt.[58]

A gyakori párhuzamos programozási nyelvek kifejezetten párhuzamosak vagy (legjobb esetben) részben rejtetten párhuzamosak maradnak, amelyben a programozó megadja a fordító irányelveit a párhuzamosításhoz. Néhány teljesen rejtett párhuzamos programozási nyelv létezik – SISAL, Parallel Haskell, SequenceL, SystemC (FPGA-k számára), Mitrion-C, VHDL és Verilog.

Ellenőrzőpont-képzés alkalmazásokban[szerkesztés]

Ahogy egy számítógépes rendszer bonyolultabbá válik, a hibák közötti átlagos idő általában csökken. Az ellenőrzőpont-képzés egy olyan módszer, amellyel a számítógépes rendszer az alkalmazás „pillanatfelvételét” készíti el – az összes aktuális erőforrás-elosztásról és a változó állapotokról, hasonlóan a memóriaképhez –; ezek az információk felhasználhatók a program visszaállítására, ha a számítógép meghibásodik. Az ellenőrzőpont-képzés azt jelenti, hogy a programnak a kezdeti helyett csak az utolsó ellenőrzési pontról kell újraindulnia. Noha az ellenőrzőpont-képzés a különféle helyzetekben előnyöket nyújt, különösen hasznos a nagy teljesítményű számítástechnikában, ahol a tömegesen párhuzamos rendszerek nagyszámú processzort használnak.[59]

Algoritmikus módszerek[szerkesztés]

Ahogy a párhuzamos számítógépek egyre nagyobbá és gyorsabbá válnak, most már képesek vagyunk megoldani azokat a problémákat, amelyek futása korábban túl sokáig tartott. Az olyan változatos területek mint a bioinformatika (fehérjehajtogatás és szekvenciaelemzés) és a közgazdaságtan (a pénzügyi matematika szempontjából) kihasználták a párhuzamos számítástechnika lehetőségeit. A párhuzamos számítástechnikai alkalmazások általános problémái a következők:[60]

Hibatűrés[szerkesztés]

A párhuzamos számítástechnika alkalmazható hibatűrő számítógépes rendszerek tervezésére is, különösen az azonos műveletet párhuzamosan végrehajtó lockstep rendszerek segítségével. Ez redundanciát biztosít az egyik összetevő meghibásodása esetén, és lehetővé teszi az automatikus hibaészlelést és hibajavítást, ha az eredmények eltérnek. Ezek a módszerek felhasználhatók az átmeneti hibák által okozott egyszeri események megelőzésére.[61] Bár kiegészítő intézkedésekre lehet szükség a beágyazott vagy speciális rendszerekben, ez a módszer költséghatékony megközelítést jelenthet az n-moduláris redundancia elérése érdekében a kereskedelemben kapható rendszerekben.

Előzmények[szerkesztés]

ILLIAC IV, „a szuperszámítógépek leghírhedtebbike”[62]

Az igazi (MIMD) párhuzamosság eredete visszamegy Luigi Federico Menabrea és a Sketch of the Analytical Engine Invented by Charles Babbage (Charles Babbage által feltalált analitikus gép vázlata) című könyvéhez.[63][64][65]

1958 áprilisában Stanley Gill (Ferranti) megvitatta a párhuzamos programozást, valamint az elágazás és a várakozás szükségességét.[66] 1958-ban az IBM kutatói, John Cocke és Daniel Slotnick is először tárgyalták a párhuzamosság alkalmazását a numerikus számításokban.[67] A Burroughs Corporation 1962-ben mutatta be a D825-öt, egy négyprocesszoros számítógépet, amely keresztkapcsolón keresztül akár 16 memóriamodult is elérhet.[68] 1967-ben Amdahl és Slotnick vitát tett közzé a párhuzamos feldolgozás megvalósíthatóságáról az Információs Feldolgozó Társaságok Amerikai Szövetsége konferencián.[67] E vita során fogalmazta meg Amdahl törvényét, hogy meghatározza a párhuzamosság miatti sebességhatárt.

1969-ben a Honeywell bemutatta első Multics rendszerét, egy szimmetrikus többprocesszoros rendszert, amely képes akár nyolc processzor párhuzamos futtatására.[67] A C.mmp a 70-es években a Carnegie Mellon Egyetemen működő többprocesszoros projekt egyike volt az első többprocesszoros rendszernek, több mint néhány processzorral. Az első busszal kapcsolt többprocesszoros rendszer figyelt gyorsítótárakkal a Synapse N+1 volt 1984-ben.[64]

A SIMD párhuzamos számítógépek az 1970-es évekre vezethetők vissza. A korai SIMD számítógépek mögött a motiváció az volt, hogy a processzor vezérlőegységének kapukésését több utasítás felett csökkentsék.[69] 1964-ben Slotnick javaslatot tett egy tömegesen párhuzamos számítógép felépítésére a Lawrence Livermore Nemzeti Laboratórium számára.[67] Tervezését az amerikai légierő támogatta, amely a legkorábbi SIMD párhuzamos számítástechnikai erőfeszítés volt, ILLIAC IV néven.[67] A tervezés kulcsa egy meglehetősen nagy párhuzamosság volt, akár 256 processzorral, amely lehetővé tette a gép számára, hogy nagy adatkészleteken dolgozzon, amit később vektorfeldolgozásnak neveznek. Az ILLIAC IV-et azonban „a szuperszámítógépek leghírhedtebbikének” nevezték, mivel a projekt csak egynegyede fejeződött be, de 11 évig tartott, és az eredeti becslés majdnem négyszeresébe került.[62] Amikor 1976-ban végre készen állt az első valódi alkalmazás futtatására, azt a meglévő kereskedelmi szuperszámítógépek, mint például a Cray-1, felülmúlták.

Biológiai agy mint tömegesen párhuzamos számítógép[szerkesztés]

Az 1970-es években, az MIT Számítástudományi és Mesterséges Intelligencia Laboratóriumban Marvin Minsky és Seymour Papert fejlődésnek indította a Society of Mind elméletet, amely a biológiai agyat mint tömegesen párhuzamos számítógép látja. Minsky 1986-ban publikálta a The Society of Mind című könyvét, amely azt állítja, hogy „az elme sok kis ágensből áll, amelyek önmagukban értelmetlenek”.[70] Az elmélet megkísérli megmagyarázni, hogy amit intelligenciának nevezünk, miként lehet nem intelligens részek kölcsönhatásának a terméke. Minsky elmondja, hogy az elmélettel kapcsolatos ötletek legnagyobb forrása az a munkája volt, hogy megpróbált olyan gépet létrehozni, amely robotkar, videókamera és számítógép segítségével építkezik építőkockákból.[71]

Hasonló modelleket (amelyek ugyancsak a biológiai agyat tömegesen párhuzamos számítógépnek tekintik, azaz az agy független vagy részben független ágensekből áll) írnak le:

Jegyzetek[szerkesztés]

  1. Gottlieb, Allan. Highly parallel computing. Redwood City, Calif.: Benjamin/Cummings (1989). ISBN 978-0-8053-0177-9 
  2. S.V. Adve et al. (November 2008). „Parallel Computing Research at Illinois: The UPCRC Agenda” Archiválva 2018. január 11-i dátummal a Wayback Machine-ben. (PDF). Parallel@Illinois, University of Illinois at Urbana-Champaign. „A teljesítmény előnyeinek fő technikái – a megnövekedett órajel és az intelligensebb, de egyre összetettebb architektúrák – most az úgynevezett erőfalon vannak. A számítógépes ipar elfogadta, hogy a jövőbeli teljesítménynövekedésnek nagyrészt a processzorok (vagy magok) számának növelésén kell alapulnia, ahelyett, hogy egyetlen mag válna gyorsabbá.”
  3. Asanovic et al. „Régi [hagyományos bölcsesség]: Az áram ingyenes, de a tranzisztorok drágák. Az új [hagyományos bölcsesség] az, hogy az áram drága, de a tranzisztorok »ingyenesek«.”
  4. Asanovic, Krste et al. (December 18, 2006). „The Landscape of Parallel Computing Research: A View from Berkeley” (PDF). University of California, Berkeley. Technical Report No. UCB/EECS-2006-183. „Régi [hagyományos bölcsesség]: A processzor teljesítmény javításának elsődleges módja az órajel növelése. Új [hagyományos bölcsesség]: A növekvő párhuzamosság az elsődleges módszer a processzor teljesítményének javítására… Még az Intel, »a nagyobb órajel jobb« pozícióval társult vállalat képviselői is figyelmeztettek arra, hogy a teljesítmény maximalizálása a hagyományos megközelítésekkel, vagyis az órajel növelésével, elérte a határát.”
  5. „Concurrency is not Parallelism”, Waza conference Jan 11, 2012, Rob Pike (slides) (video)
  6. Parallelism vs. Concurrency. Haskell Wiki
  7. Hennessy, John L.. Computer organization and design: the hardware/software interface, 2. ed., 3rd print., San Francisco: Kaufmann (1999). ISBN 978-1-55860-428-5 
  8. a b Barney, Blaise: Introduction to Parallel Computing. Lawrence Livermore National Laboratory. (Hozzáférés: 2007. november 9.)
  9. Thomas Rauber. Parallel Programming: for Multicore and Cluster Systems. Springer Science & Business Media, 1. o. (2013). ISBN 9783642378010 
  10. Hennessy, John L.. Computer architecture / a quantitative approach., 3rd, San Francisco, Calif.: International Thomson, 43. o. (2002). ISBN 978-1-55860-724-8 
  11. Rabaey, Jan M.. Digital integrated circuits: a design perspective. Upper Saddle River, N.J.: Prentice-Hall, 235. o. (1996). ISBN 978-0-13-178609-7 
  12. Flynn, Laurie J.. „Intel Halts Development Of 2 New Microprocessors”, 2004. május 8. (Hozzáférés ideje: 2012. június 5.) 
  13. Thomas Rauber. Parallel Programming: for Multicore and Cluster Systems. Springer Science & Business Media, 2. o. (2013). ISBN 9783642378010 
  14. Thomas Rauber. Parallel Programming: for Multicore and Cluster Systems. Springer Science & Business Media, 3. o. (2013). ISBN 9783642378010 
  15. Amdahl, Gene M. (1967). „Validity of the single processor approach to achieving large scale computing capabilities”. Proceeding AFIPS '67 (Spring) Proceedings of the April 18–20, 1967, Spring Joint Computer Conference, 483–485. o. DOI:10.1145/1465482.1465560.  
  16. Brooks, Frederick P.. The mythical man month essays on software engineering, Anniversary ed., repr. with corr., 5. [Dr.], Reading, Mass. [u.a.]: Addison-Wesley (1996). ISBN 978-0-201-83595-3 
  17. Structured Parallel Programming: Patterns for Efficient Computation. Elsevier, 61. o. (2013) 
  18. Gustafson, John L. (1988. május 1.). „Reevaluating Amdahl's law”. Communications of the ACM 31 (5), 532–533. o. [2007. szeptember 27-i dátummal az eredetiből archiválva]. DOI:10.1145/42411.42415.  
  19. Bernstein, A. J. (1966. október 1.). „Analysis of Programs for Parallel Processing”. IEEE Transactions on Electronic Computers EC-15 (5), 757–763. o. DOI:10.1109/PGEC.1966.264565.  
  20. Roosta, Seyed H.. Parallel processing and parallel algorithms: theory and computation. New York, NY [u.a.]: Springer, 114. o. (2000). ISBN 978-0-387-98716-3 
  21. Processes and Threads. Microsoft Developer Network . Microsoft Corp., 2018
  22. Krauss, Kirk J: Thread Safety for Performance. Develop for Performance , 2018
  23. Tanenbaum, Andrew S.. Introduction to Operating System Deadlocks. Pearson Education, Informit (2002. február 1.) 
  24. Cecil, David: Synchronization internals – the semaphore. Embedded . AspenCore, 2015. november 3.
  25. Preshing, Jeff: An Introduction to Lock-Free Programming. Preshing on Programming , 2012. június 8.
  26. What's the opposite of “embarrassingly parallel”?. StackOverflow
  27. Schwartz, David: What is thread contention?. StackOverflow , 2011. augusztus 15.
  28. Kukanov, Alexey: Why a simple test can get parallel slowdown, 2008. március 4.
  29. Krauss, Kirk J: Threading for Performance. Develop for Performance , 2018
  30. Lamport, Leslie (1979. szeptember 1.). „How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs”. IEEE Transactions on Computers C-28 (9), 690–691. o. DOI:10.1109/TC.1979.1675439.  
  31. Patterson and Hennessy, p. 748.
  32. Singh, David Culler; J.P.. Parallel computer architecture, [Nachdr.], San Francisco: Morgan Kaufmann Publ., 15. o. (1997). ISBN 978-1-55860-343-1 
  33. Culler et al. p. 15.
  34. Yale Patt (April 2004). The Microprocessor Ten Years From Now: What Are The Challenges, How Do We Meet Them? Archiválva 2008. április 14-i dátummal a Wayback Machine-ben. (wmv). Distinguished Lecturer talk at Carnegie Mellon University. Retrieved on November 7, 2007.
  35. Culler et al. p. 124.
  36. Culler et al. p. 125.
  37. Samuel Larsen: Exploiting Superword Level Parallelism with Multimedia Instruction Sets
  38. a b Patterson and Hennessy, p. 713.
  39. a b Hennessy and Patterson, p. 549.
  40. Patterson and Hennessy, p. 714.
  41. Ghosh (2007), p. 10. Keidar (2008).
  42. Lynch (1996), p. xix, 1–2. Peleg (2000), p. 1.
  43. What is clustering? Webopedia computer dictionary. Retrieved on November 7, 2007.
  44. Beowulf definition. PC Magazine. Retrieved on November 7, 2007.
  45. List Statistics | TOP500 Supercomputer Sites (angol nyelven). www.top500.org
  46. „Interconnect” Archiválva 2015. január 28-i dátummal a Wayback Machine-ben.
  47. Hennessy and Patterson, p. 537.
  48. MPP Definition. PC Magazine. Retrieved on November 7, 2007.
  49. Kirkpatrick, Scott (2003). „COMPUTER SCIENCE: Rough Times Ahead”. Science 299 (5607), 668–669. o. DOI:10.1126/science.1081623. PMID 12560537.  
  50. a b c D’Amour, Michael R., Chief Operating Officer, DRC Computer Corporation. „Standard Reconfigurable Computing”. Invited speaker at the University of Delaware, February 28, 2007.
  51. Boggan, Sha'Kia and Daniel M. Pressel (August 2007). GPUs: An Emerging Platform for General-Purpose Computation Archiválva 2016. december 25-i dátummal a Wayback Machine-ben. (PDF). ARL-SR-154, U.S. Army Research Lab. Retrieved on November 7, 2007.
  52. Maslennikov, Oleg (2002). „Systematic Generation of Executing Programs for Processor Elements in Parallel ASIC or FPGA-Based Systems and Their Transformation into VHDL-Descriptions of Processor Element Control Units” Lecture Notes in Computer Science, 2328/2002: p. 272.
  53. Shimokawa, Y. (18–21 November 1991). „A parallel ASIC VLSI neurocomputer for a large number of neurons and billion connections per second speed”. International Joint Conference on Neural Networks 3, 2162–2167. o. DOI:10.1109/IJCNN.1991.170708.  
  54. Acken, Kevin P. (1998. július 1.). „A Parallel ASIC Architecture for Efficient Fractal Image Coding”. The Journal of VLSI Signal Processing 19 (2), 97–113. o. DOI:10.1023/A:1008005616596.  
  55. Kahng, Andrew B. (June 21, 2004) Scoping the Problem of DFM in the Semiconductor Industry Archiválva 2008. január 31-i dátummal a Wayback Machine-ben. University of California, San Diego. „A gyártás jövőbeli tervezésének (DFM) csökkentenie kell a tervezési költséget [nem megtérülő költség], és közvetlenül foglalkoznia kell a gyártás – a maszkkészlet és a szondakártya – költségeivel [nem megtérülő költségek], amely jóval meghaladja az egymillió dollárt 90 nm esetén és jelentős gátat szab a félvezető-alapú innovációnak.”
  56. a b Patterson and Hennessy, p. 751.
  57. The Sidney Fernbach Award given to MPI inventor Bill Gropp Archiválva 2011. július 25-i dátummal a Wayback Machine-ben. refers to MPI as „the dominant HPC communications interface”
  58. Shen, John Paul. Modern processor design: fundamentals of superscalar processors, 1st, Dubuque, Iowa: McGraw-Hill, 561. o. (2004). ISBN 978-0-07-057064-1 „Ezen kutatás »szent gráljának« – a soros programok automatizált párhuzamosításának – még nincs megvalósulása. Noha bizonyították az algoritmusok bizonyos osztályainak automatikus párhuzamosítását, az ilyen siker nagyrészt a kiszámítható áramlásszabályozással (például beágyazott ciklusszerkezetek statikusan meghatározott iterációs számlálással) és statikusan analizálható memória-hozzáférési mintákkal korlátozódott tudományos és numerikus alkalmazásokon (például végigmenni lebegőpontos adatok nagy, többdimenziós tömbjein).” 
  59. Encyclopedia of Parallel Computing, Volume 4 by David Padua 2011 ISBN 0387097651 page 265
  60. Asanovic, Krste, et al. (December 18, 2006). „The Landscape of Parallel Computing Research: A View from Berkeley” (PDF). University of California, Berkeley. Technical Report No. UCB/EECS-2006-183. See table on pages 17–19.
  61. Dobel, B., Hartig, H., & Engel, M. (2012) „Operating system support for redundant multithreading”. Proceedings of the Tenth ACM International Conference on Embedded Software, 83–92. doi:10.1145/2380356.2380375
  62. a b Patterson and Hennessy, pp. 749–50: „Noha az ILLIAC IV sikeresen alkalmazta a későbbi projektekben hasznos technológiákat, az ILLIAC IV számítógépes hibaként jelent meg. A költségek az 1966-ban becsült 8 millió dollárról 1972-re 31 millió dollárra növekedtek, annak ellenére, hogy a tervezett gép mindössze egynegyedét építették meg. Ez talán a szuperszámítógépek leghírhedtebbike volt. A projekt 1965-ben indult, és első valódi alkalmazását 1976-ban futatta.”
  63. Menabrea, L. F. (1842). Sketch of the Analytic Engine Invented by Charles Babbage. Bibliothèque Universelle de Genève. Retrieved on November 7, 2007. idézet: „amikor azonos számítások hosszú sorát kell elvégezni, például a szorzótáblák kialakításához szükségeseket, akkor a gépet el lehet indítani úgy, hogy több eredményt adjon egyszerre, ami nagymértékben csökkenti a folyamatok mennyiségét.”
  64. a b Patterson and Hennessy, p. 753.
  65. R.W. Hockney, C.R. Jesshope. Parallel Computers 2: Architecture, Programming and Algorithms, Volume 2. 1988. p. 8 idézet: „Úgy gondolják, hogy a számítógépes tervezésben a párhuzamosság legkorábbi hivatkozása O. F. Menabrea tábornok 1842-ben kiadott kiadványában található, melynek címe: Sketch of the Analytical Engine Invented by Charles Babbage.”
  66. „Parallel Programming”, S. Gill, The Computer Journal Vol. 1 #1, pp2-10, British Computer Society, April 1958.
  67. a b c d e Wilson, Gregory V.: The History of the Development of Parallel Computing. Virginia Tech/Norfolk State University, Interactive Learning with a Digital Library in Computer Science, 1994. (Hozzáférés: 2008. január 8.)
  68. Anthes, Gry: The Power of Parallelism. Computerworld, 2001. november 19. [2008. január 31-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. január 8.)
  69. Patterson and Hennessy, p. 749.
  70. Minsky, Marvin. The Society of Mind. New York: Simon & Schuster, 17. o. (1986. október 23.). ISBN 978-0-671-60740-1 
  71. Minsky, Marvin. The Society of Mind. New York: Simon & Schuster, 29. o. (1986. október 23.). ISBN 978-0-671-60740-1 
  72. Blakeslee, Thomas. Beyond the Conscious Mind. Unlocking the Secrets of the Self, 6–7. o. (1996. október 23.) 
  73. The Integrated Mind, 132–161. o. (1978. október 23.) 
  74. Gazzaniga, Michael. The Social Brain. Discovering the Networks of the Mind, 77–79. o. (1985. október 23.) 
  75. Ornstein, Robert. Evolution of Consciousness: The Origins of the Way We Think, 2. o. (1992. október 23.) 
  76. Hilgard, Ernest. Divided consciousness: multiple controls in human thought and action. New York: Wiley (1977. október 23.). ISBN 978-0-471-39602-4 
  77. Hilgard, Ernest. Divided consciousness: multiple controls in human thought and action (expanded edition). New York: Wiley (1986. október 23.). ISBN 978-0-471-80572-4 
  78. Kaku, Michio. The Future of the Mind (2014. október 23.) 
  79. Ouspenskii, Pyotr. Chapter 3, In Search of the Miraculous. Fragments of an Unknown Teaching, 72–83. o. (1992. október 23.) 
  80. Official Neurocluster Brain Model site

Fordítás[szerkesztés]

  • Ez a szócikk részben vagy egészben a Parallel computing című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.

További információk[szerkesztés]

  • (2008. augusztus 29.) „Asynchronous team algorithms for Boolean Satisfiability”. Bio-Inspired Models of Network, Information and Computing Systems, 2007. Bionetics 2007. 2nd, 66–69. o. DOI:10.1109/BIMNICS.2007.4610083.  
  • Sechin, A.; Parallel Computing in Photogrammetry. GIM International. #1, 2016, pp. 21–23.

Külső hivatkozások[szerkesztés]

Kapcsolódó szócikkek[szerkesztés]