Párhuzamos számítástechnika

programozási paradigma, amelyben a számításokat vagy a folyamatokat egyidejűleg hajtják végre

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]

Az IBM Blue Gene/P masszívan párhuzamos szuperszámítógépe

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 az előbbiek bármelyikének kombinációi.[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árakra 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 felbontású, durva felbontá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 felbontású párhuzamosságot mutat, ha részfeladatainak másodpercenként sokszor kell kommunikálniuk; durva felbontá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.

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 attól függően osztályozta a programokat és a számítógépeket, 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.”[30]

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

Bitszintű párhuzamosság szerkesztés

 
Taiwania 3, egy párhuzamos szuperszámítógép, amely csatlakozott a Covid19-kutatáshoz

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.[31] 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 össze kell adnia a 8 alacsonyabb rendű bitet mindkettő egészből a szokásos összeadási utasítás felhasználásával, majd össze kell adnia a 8 magasabb rendű bitet egy add-with-carry utasítás segítségével és az á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 szubskalár 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 szubskalár 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.[32]

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

Minden modern processzor többfokozatú 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 fokozatú futószalaggal rendelkező processzornak legfeljebb N különféle utasítása lehet a teljesítés különböző szakaszaiban, így ciklusonként egy utasítást adhat ki (IPC = 1). Ezek a processzorok skalár 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 fokozatú futószalagja volt.[33]

 
Szabványos processzor két végrehajtóegységgel és ötfokozatú futószalaggal. A legjobb esetben két utasítás teljesítéhez egy ciklus szükséges, így a processzor szuperskalár 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, így ciklusonként egynél több utasítást adhatnak ki (IPC > 1). Ezeket a processzorokat szuperskalár processzoroknak nevezzük. A szuperskalár processzorok abban különböznek a többmagos processzoroktól, hogy a több végrehajtóegység nem teljes processzor (azaz feldolgozóegység). 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.[34] 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.[35]

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.[36]

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).[37] 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épekben 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 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 címtárban lévő processzorok kevesebb késleltetéssel férhetnek hozzá a címtár memóriájához, mint a többi címtá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.[37]

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ár 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ár is lehet, azaz ciklusonként minden egyes mag több utasítást adhat ki egy szálból.

A szimultán többszálú végrehajtás (amelyek közül az Intel Hyper-Threading a legismertebb) a pseudo-multi-coreism korai formája volt. A szimultán többszálú végrehajtásra képes processzorok több végrehajtóegységet tartalmaznak ugyanabban a feldolgozóegységben – azaz szuperskalár architektúrával rendelkeznek –, és ciklusonként több utasítást adhatnak ki több szálból. Az időosztásos többszálú vé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.[38]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.[39] 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.[38]

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.[40] Ugyanaz a rendszer jellemezhető párhuzamos és elosztott formában is; egy tipikus elosztott rendszerben a processzorok párhuzamosan futnak.[41]

Számítógépfürtök szerkesztés
 
Egy Beowulf cluster

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.[42] 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.[43] 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.[44] A fennmaradók masszívan 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.[45] 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.

Masszívan párhuzamos számítástechnika szerkesztés
 
Egy szekrény az IBM Blue Gene/L masszívan párhuzamos szuperszámítógépéből

A masszívan 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.[46] 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.[47]

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.[48]

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[49] vagy a Verilog.[50] 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á.[51] 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.”[51]

Általános célú számítástechnika grafikus feldolgozóegységeken (GPGPU) szerkesztés
 
Az Nvidia Tesla GPGPU kártyája

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.[52] 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.[53][54][55]

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.[56] (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.[51] 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.[57] Ezek szorosan kapcsolódnak Flynn SIMD besorolásához.[57]

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.[58] 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.[59]

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 masszívan párhuzamos rendszerek nagyszámú processzort használnak.[60]

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:[61]

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.[62] 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”[63]

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.[64][65][66]

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.[67] 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.[68] 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.[69] 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.[68] 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.[68] 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.[65]

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.[70] 1964-ben Slotnick javaslatot tett egy masszívan párhuzamos számítógép felépítésére a Lawrence Livermore Nemzeti Laboratórium számára.[68] 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.[68] 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.[63] 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 masszívan 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 masszívan 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.[71] 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.[72]

Hasonló modelleket (amelyek ugyancsak a biológiai agyat masszívan 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 Archiválva 2015. július 30-i dátummal a Wayback Machine-ben.) (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. [2013. június 29-i dátummal az eredetiből archiválva]. (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”, New York Times , 2004. május 8. (Hozzáférés: 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 (Hozzáférés: 2018. május 10.)
  22. Krauss, Kirk J: Thread Safety for Performance. Develop for Performance , 2018 [2018. május 13-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. május 10.)
  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. (Hozzáférés: 2018. május 10.)
  25. Preshing, Jeff: An Introduction to Lock-Free Programming. Preshing on Programming , 2012. június 8. (Hozzáférés: 2018. május 10.)
  26. What's the opposite of “embarrassingly parallel”?. StackOverflow . (Hozzáférés: 2018. május 10.)
  27. Schwartz, David: What is thread contention?. StackOverflow , 2011. augusztus 15. (Hozzáférés: 2018. május 10.)
  28. Kukanov, Alexey: Why a simple test can get parallel slowdown, 2008. március 4. (Hozzáférés: 2015. február 15.)
  29. Krauss, Kirk J: Threading for Performance. Develop for Performance , 2018 [2018. május 13-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. május 10.)
  30. Patterson and Hennessy, p. 748.
  31. Singh, David Culler; J.P.. Parallel computer architecture, [Nachdr.], San Francisco: Morgan Kaufmann Publ., 15. o. (1997). ISBN 978-1-55860-343-1 
  32. Culler et al. p. 15.
  33. 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.
  34. Culler et al. p. 124.
  35. Culler et al. p. 125.
  36. Samuel Larsen: Exploiting Superword Level Parallelism with Multimedia Instruction Sets. [2017. augusztus 12-i dátummal az eredetiből archiválva]. (Hozzáférés: 2020. július 7.)
  37. a b Patterson and Hennessy, p. 713.
  38. a b Hennessy and Patterson, p. 549.
  39. Patterson and Hennessy, p. 714.
  40. Ghosh (2007), p. 10. Keidar (2008).
  41. Lynch (1996), p. xix, 1–2. Peleg (2000), p. 1.
  42. What is clustering? Webopedia computer dictionary. Retrieved on November 7, 2007.
  43. Beowulf definition. Archiválva 2012. október 10-i dátummal a Wayback Machine-ben PC Magazine. Retrieved on November 7, 2007.
  44. List Statistics | TOP500 Supercomputer Sites (angol nyelven). www.top500.org . (Hozzáférés: 2018. augusztus 5.)
  45. „Interconnect” Archiválva 2015. január 28-i dátummal a Wayback Machine-ben.
  46. Hennessy and Patterson, p. 537.
  47. MPP Definition. Archiválva 2013. május 11-i dátummal a Wayback Machine-ben PC Magazine. Retrieved on November 7, 2007.
  48. Kirkpatrick, Scott (2003). „COMPUTER SCIENCE: Rough Times Ahead”. Science 299 (5607), 668–669. o. DOI:10.1126/science.1081623. PMID 12560537.  
  49. (2019. június 20.) „Construction of Residue Number System Using Hardware Efficient Diagonal Function” (angol nyelven). Electronics 8 (6), 694. o. DOI:10.3390/electronics8060694. ISSN 2079-9292. „All simulated circuits were described in very high speed integrated circuit (VHSIC) hardware description language (VHDL). Hardware modeling was performed on Xilinx FPGA Artix 7 xc7a200tfbg484-2.” 
  50. (2020. május 1.) „Hardware Design of Approximate Matrix Multiplier based on FPGA in Verilog”. 2020 4th International Conference on Intelligent Computing and Control Systems (ICICCS), Madurai, India, 496–498. o, Kiadó: IEEE. DOI:10.1109/ICICCS48265.2020.9121004.  
  51. 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.
  52. 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.
  53. 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.
  54. 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.  
  55. 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.  
  56. 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.”
  57. a b Patterson and Hennessy, p. 751.
  58. 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”
  59. 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).” 
  60. Encyclopedia of Parallel Computing, Volume 4 by David Padua 2011 ISBN 0387097651 page 265
  61. 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.
  62. 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
  63. 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.”
  64. 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.”
  65. a b Patterson and Hennessy, p. 753.
  66. 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.”
  67. „Parallel Programming”, S. Gill, The Computer Journal Vol. 1 #1, pp2-10, British Computer Society, April 1958.
  68. 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.)
  69. 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.)
  70. Patterson and Hennessy, p. 749.
  71. Minsky, Marvin. The Society of Mind. New York: Simon & Schuster, 17. o. (1986. április 25.). ISBN 978-0-671-60740-1 
  72. Minsky, Marvin. The Society of Mind. New York: Simon & Schuster, 29. o. (1986. április 25.). ISBN 978-0-671-60740-1 
  73. Blakeslee, Thomas. Beyond the Conscious Mind. Unlocking the Secrets of the Self, 6–7. o. (1996. április 25.) 
  74. The Integrated Mind, 132–161. o. (1978. április 25.) 
  75. Gazzaniga, Michael. The Social Brain. Discovering the Networks of the Mind, 77–79. o. (1985. április 25.) 
  76. Ornstein, Robert. Evolution of Consciousness: The Origins of the Way We Think, 2. o. (1992. április 25.) 
  77. Hilgard, Ernest. Divided consciousness: multiple controls in human thought and action. New York: Wiley (1977. április 25.). ISBN 978-0-471-39602-4 
  78. Hilgard, Ernest. Divided consciousness: multiple controls in human thought and action (expanded edition). New York: Wiley (1986. április 25.). ISBN 978-0-471-80572-4 
  79. Kaku, Michio. The Future of the Mind (2014. április 25.) 
  80. Ouspenskii, Pyotr. Chapter 3, In Search of the Miraculous. Fragments of an Unknown Teaching, 72–83. o. (1992. április 25.) 
  81. Official Neurocluster Brain Model site. (Hozzáférés: 2017. július 22.)

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. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

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