Dr. Visegrády Tamás
Források: Chip magazin, 2000. március 107.-109.
Chip magazin, 2000. május 113.-115.
Chip magazin, 2000. június 97.-99.
Chip magazin, 2000. november 105.-107.

Régi informatikai folyóiratokat böngészve döbbenek csak rá, ez az iparág bizonyos szempontból milyen gyorsan változik. 5-10 éves magazinokban lévő tesztek, ismertetők, de még ismeretterjesztő írások is teljesen érdektelenné válnak. Kevés kivételtől eltekintve ma már senkit nem érdekel egy 10 éves videokártya-teszt vagy egy 8 évvel ezelőtt megjelent kommersz tintasugaras nyomtató bemutatása. A kevés cikk közül, ami még ma is érdeklődésre tarthat számot, itt egy, a nagygépes számítástechinkát bemutató cikksorozatot gyűjtöttem össze. Sajnos én nem vagyok tájékozott ezen a téren, de ez érdekes bepillantást nyújthat ebbe a világba még akkor is, ha a benne felsorolt tények ma már nem mind állják meg a helyüket, ezért is került a "Történelem" kategóriába.

Számítógép-architektúrák

Az egyre komolyabb teljesítményre képes PC-k fejlesztése során a tervezők álladóan olyan feladatokba ütköznek, amelyeket a számítástechnikai piac más szereplői már régóta ismernek vagy sikeresen meg is oldottak.

Most induló sorozatunkban a speciális számítógéptípusokat (mainframe, MPP, SMP, gépfürtök) bemutatva adunk rövid összefoglalást arról, hogy milyen "újdonságokat" mutathatnak be a közel- vagy távoli jövőben a PC-gyártók. Elsőként egy, a PC-s környezettől sok mindenben teljesen eltérő világba, az MPP (masszívan párhuzamosan feldolgozó) számítógépek területére teszünk rövid kitérőt, azaz a száz vagy ezer processzorig bővíthető gépek főbb tulajdonságait tekintjük át. Fontos megjegyezni, hogy a processzorokhoz hasonlóan a többprocesszoros architektúrák területén is elmosódnak a határok az eltérő meg-oldások között. Ennek megfelelően nem "tiszta" megoldásokat mutatunk be, hanem inkább a bevált ötletek egy-egy célterületen alkalmazott kombinációit. Az MPP a szuperszámítógép-kategóriájú, egyszerre akár több száz vagy ezer processzoron kódot futtató, egyedi tervezésű, nagy sebességű összeköttetéshálózat köré épített egyszerű számítási csomópontok összefoglaló neve. A megoldás sokkal kisebb méretekben, és egyedi alkatrészek nélkül jól ismert és gyakran alkalmazott módszer: munkaállomás-fürt (Cluster-of-Workstations) elnevezéssel illeti az irodalom. Az eltérő árkategória és szolgáltatások kivételével a két architektúra számos hasonló problémát vet fel, így az MPP-k elemzése a gépfürtök felhasználói számára is hasznos lehet.

Processzorok, összeköttetések

Az MPP-k központi egységei leggyakrabban általános célú, gyors RISC processzorok. A mainframe-rendszerekkel ellentétben egy-egy MPP számítógépben akár több ezer processzor is üzemelhet, sőt gyakorlati példák akadnak tízezerhez közeli processzorszámra is. A világ szuperszámítógépeinek ötszázas teljesítménylistáján az első három helyezett sorban 9632, 5808 illetve 6144 mikroprocesszort tartalmaz. Az MPP csomópontokhoz közvetlenül kapcsolódik mind a memória, mind az I/O eszközök, így a rendszer teljes memóriája és 1/0 átviteli képessége viszonylag egyszerűen (csupán újabb csomópontok beillesztésével) növelhető. Sok MPP egy-egy csomóponton belül szimmetrikus többprocesszoros (SMP) rendszerben több mikroprocesszort tartalmaz: ez a kialakítás azonos számítási teljesítmény mellett lényegesen csökkentheti a csomópontok közti összeköttetések bonyolultságát. Ez az "SMP-kből felépített MPP" kiváló példa arra, hogy a bevált ötleteket (SMP) hogyan veheti át egy eltérő architektúra (MPP). A komponensek nagy száma miatt egy MPP csomópontjai nem kapcsolhatók össze a néhányszor tíz processzorig méretezhető, egységes cím-tartománnyal rendelkező klasszikus SMP-s szerverekben alkalmazott módszerekkel. (A processzorszám növelésével szükségszerűen szűk keresztmetszetté váló egységes, közös "busz" a "tisztán" SMP-jellegű bővítés egyik fő korlátja. Éppen ezen a területen a sokprocesszoros SMP-k hasznosíthatják az MPP-kben már megbízhatónak minősített megoldásokat). Az MPP-összeköttetések egyedi tervezésű, gyors, rövid kapcsolási időt - latenciát - nyújtó hálózatok. Az ilyen kapcsolóhálózatok tervezésénél fontos szempont, hogy a rend-szer több száz (ezer), processzorokkal és lokális I/0-val felszerelt csomópont csatlakoztatására is alkalmas legyen, illetve bővíthető maradjon. Hasonlóan alapvető a kapcsolási idő minimális értéken tartása, mivel ez az érték a csomópontok közötti kommunikációban korlátként jelenik meg, Az MPP-k a gyártók saját fejlesztésű szoftverkönyvtáraival támogatják a gyors összeköttetések hatékony kihasználását. A támogató szoftvermodulok képesek arra is, hogy "eltüntessék" a különbséget a lokális és a távoli erőforrások elérése között. Noha az MPP-összeköttetések általában nem alkotnak teljes gráfot (nincs minden csomópontpár között közvetlen kapcsolat), szoftveres segítséggel ez orvosolható: a hiányzó kapcsolatokat a rendszer topológiáját ismerő kapcsolati rutinok "felépíthetik" a programozó számára észrevehetetlen módon. Ilyen támogatás nélkül a programozók feladata maradna a rendszer felépítésének leképezése az adatok elosztására.

asci1
Az ASCI Red, a világ jelenleg leggyorsabb MPP-s szuperszámítógépe

Memória

A több száz processzor mellett lokálisan elhelyezett memóriamodulokat egy MPP-architektúrájú számítógépben nem kötelező közös címtartományban megjeleníteni. Ha a processzorok saját memóriáját egy másik processzor csak üzeneteken keresztül érheti el, a rendszert távoli memóriaelérés nélkülinek nevezik (No Remote Memory Access, NORMA) - természetesen itt is írható és olvasható más processzorok címtartománya, de nem memóriaműveleteken keresztül. Ilyen rendszerekben a programozásnál figyelembe kell venni az aktuálisan kezelt adatok cím-tartománybeli elhelyezkedését, és címtartománytól függően közvetlenül vagy szoftveren keresztül végrehajtani az írást vagy olvasást. A NORMA felépítés előnye, hogy nem igényel semmilyen hardveres támogatást a memóriakonzisztencia megőrzésére. Az esetleges versenyhelyzetek megelőzése hardvertámogatás nélkül, az alkalmazások által meghatározott módon zajlik, így nem kell megvalósítani a több fél által írható megosztott memória elérését szabályozó protokollokat. Egyes MPP-k (például az Alpha processzorokból felépített Cray T3E) a csomópontok memóriáját elosztott, közös cím-tartományban helyezik el, így lehetőség nyílik a processzorok közti kommunikációra memóriaműveleteken keresztül is. Ilyen esetekben a processzorok címtartományában nem csak lokális memóriájuk jelenik meg, azonban az idegen memóriatartományok elérési ideje nem egyezik meg a lokális memóriáéval (Non-Uniform Memory Access, NUMA). Az ilyen NUMA rendszerek programozásánál nincs szükség a memóriakezelés megosztására, csupán figyelembe kell venni a távoli adatok hosszabb elérési idejét. Az elosztott memóriás MPP-knél problémát jelenthet, hogy a teljes memória mérete meghaladhatja a mikroprocesszorok által megcímezhető fizikai címtartományt. (Az egyedi tervezésű processzorokkal felszerelt szuperszámítógépeknél nem lép fel ez a probléma, de az MPP-knél költségokokból általános célú mikroprocesszorokat alkalmaznak). A NUMA rendszerek között vannak hardveres hozzáférés-védelmet megvalósító (cachekoherens, CC-NUMA) és a konzisztenciát teljesen szoftver-re bízó (nem cache-koherens, NCC-NUMA) megoldások is. Utóbbi megoldás a hardverigény csökkentése árán növeli az elérhető rendszerteljesítményt, hiszen a koherenciavizsgálat csak akkor lassítja a rendszert, ha arra ténylegesen szükség is van.

Példa MPP-re: Cray T3E-1200

A világhírű szuperszámítógép-gyártó Cray jelenleg legnagyobb MPP rendszere, a T3E-1200 600 MHz-es Alpha processzorokat tartalmaz. A legfeljebb 2048 processzort egyen-ként maximum 2 Gbyte lokális memóriával lehet ellátni. 128 processzor felett a rendszert kizárólag folyadékhűtéssel lehet üzemeltetni, alatta megfelel a közönséges ipari léghűtés is. A T3E-1200 egyedi tervezésű alkatrészei közül figyelemreméltó a vektorizációt szimuláló STREAM pufferek rendszere, amelyekkel a hétköznapi Alpha processzorokkal is (korlátozottan) szimulálható a numerikus alkalmazásokra tervezett vektorprocesszorok néhány gyorsító megoldása. Ennek kedvező halása például a vektor-szuperszámítógépekről átültetett nagy teljesítményű kódok végrehajtásánál jelentkezhet. A Cray T3E-k a gyártó által kínált szoftvermodulokkal felhasználhatók NCC-NUMA üzemmódban vagy megosztott memóriatartomány nélkül. A NORMA programozáshoz a Cray adja a szükséges könyvtárakat (PVM, MPI), és támogatja a párhuzamosított Fortrant (HPF).

Operációs rendszer

Mivel egy MPP minden csomópontja egy minimális kiépítésű, önálló számítógépet tartalmaz, minden csomópontnak van saját operációs rendszere. Ez az általában szigorúan moduláris mikrokernel csak az alapvető feladatokat látja el, és feladatköre sokkal inkább emlékeztet a beágyazott rendszerekben megszokottra, mint egy klasszikus számítógépes operációs rendszerére. Egyes MPP-kben a spártai, minimális szolgáltatásszintet megvalósító csomóponti operációs rendszerek egy központi (host) csomópont vezérlése alatt csak lokális feladatokkal (például közvetlen üzenettovábbítás) foglalkoznak. Ilyen esetben az MPP-hez kívülről a hoston keresztül juttathatók el a számítási feladatok, és a kiemelt csomópont gondoskodik a feladat szétosztásáról. A gyakorlatban a ki-emelt csomópont lehet önálló "munkaállomás" is, például a régebbi Cray T3D esetében - igaz, ez a "munkaállomás" korábban maga is szuperszámítógép-kategóriájúnak minősült. Más rendszerekben az önmagukban egyszerű mikrokernelek elosztott rendszerként együtt már bonyolult feladatokat valósítanak meg host nélkül. A Cray T3E-k 64 bites Unix operációs rendszere, a UNICOS így épül fel. A UNICOS szerver- és felhasználó-csomópontokat különböztet meg a rendszerben, ahol a felhasználói csomópontok végeznek számításokat, a szerverek pedig adminisztrációs feladatokat látnak el.

asci2
Az ASCI Red belső kapcsolódásai
asci3
Az MPP rendszerek teljesítményének várható növekedése

Programozási modell

Az MPP-k egyszerűen bővíthető struktúrája általában nem teszi lehetővé a párhuzamos programok egységes címtartományban való futtatását. Mivel egy MPP rendszer minden processzorának saját, fizikailag is elszigetelt memóriája van, a párhuzamos alkalmazások más processzorhoz csak szoftveres üzenetváltással (például PVM vagy MPI) vagy az MPP-összeköttetéseken keresztül fordulhatnak. Mindkét megoldás alapvető jellemzője, hogy több nagyságrenddel gyorsabb a lokális adatok elérése, amit a programok finomhangolásánál figyelembe kell venni. Ezzel ellentétben például egy SMP rendszer hardverben, a memóriaillesztő áramkörökben valósíthatja meg a processzorok közti szinkronizációt. Az MPP-k esetében a csomópontok jelentősen egyszerűsödnek azzal, hogy nincs szükség minden csomópontban ilyen kiegészítőkre. A processzorok között megosztott memória hiánya előnyös lehet a programok tesztelése szempontjából. Mivel a processzorok kizárólag jól definiált üzeneteken keresztül érik el egymást, az osztott memóriás rend-szerekre jellemző szinkronizációs problémák itt ritkák. A nehezen megismételhető és felderíthető sorrendi problémákat MPP-s rendszerekben magasabb absztrakciós szinten és sokkal kedvezőbb körülmények között lehet megfigyelni, mint a közös címterületen keresztül kommunikáló többprocesszoros architektúrákban. Mivel az MPP-kben a távoli memória-elérés minden esetben lassú (vagy inkább nagyon lassú) művelet, a hatékony MPP-programozás feltételezi, hogy a megoldandó feladat feldarabolása nem tér el lényegesen az MPP felépítésétől. Olyan esetekben, amikor a felosztás nem felel meg az adott MPP-nek, vagy minden csomópont sokat kénytelen távoli memóriaeléréssel foglalkozni (például ez nem ritka a mátrixokon végzett műveleteknél), a rendszer hasznos számítási teljesítménye a megnövekedett I/0-szükséglet miatt jelentősen csökkenhet. A gyakorlatban használt MPP-s fejlesztőeszközök lehetővé teszik az architektúra és a feladat egymáshoz illesztését. Kiváló példa erre a numerikus számításokban még mindig népszerű Fortran, amelynek nagy teljesítményú változata (HPF) a Fortran kódon kívül annak lehetséges párhuzamosítására vonatkozó további információkat is elfogad.

asci4
A szuperszámítógépek Top 500-as listájának eleje

PC-s kapcsolat

Mint arról korábban többször beszámoltunk, a közepes teljesítményű MPP-s rendszerekkel összemérhető tudású gépfürtök építhetők fel a PC-s árszinthez közelebb álló munka-állomásokból vagy gyors PC-kből (Cluster of Workstations, COW). E számítógéprendszerek az MPP-kre hasonlító struktúrában, de sokkal lassabb csomó-pontközi kommunikációs hálózatokkal mű-ködnek. Jól particionált feladatoknál nem a processzorok közti kommunikáció dominál a megoldási idő-tartamban, így a lassabb hálózat okozta teljesítménycsökkenés még elfogadható. Mivel a COW-k processzorokat összekötő hálózata közönséges PC-s alkatrészekből áll, azonos összprocesszor-teljesítmény mellett a teljes rendszer összköltsége töredéke lehet egy MPP-ének. Szinte minden ilyen számítógépcsoport valamilyen Unix-jellegű operációs rendszert futtat csomópontjain. A forráskódban is elérhető vagy moduláris kernellel ellátott Unix-változatoknál akár saját hálózati protokoll is alkalmazható az üzenetek továbbítására (például az SBP). Extrém méretű, gyakorlatilag elszigetelt csomópontokat feltételezve a COW elfajuló eseteként adódnak az Interneten futó elosztott számítási feladatok.

Linkek

Mint minden számítástechnikai témában, az MPP-k tanulmányozásában is sokat segíthet a WWW, népszerű nevén a World Wide Wait. [A cikk írásakor még a betárcsázós modemes internetkapcsolat volt az általános - A szerk.] A világ szuperszámítógépeinek ötszázas listája jó kiindulási alap lehet, ha valaki áttekintést keres a legsikeresebb számítási architektúrákról. Mivel a felhasználások igen széles körűek, és nagyon sok résztvevő szereti reklámozni, mire használja saját szupergépét, a Top 500 linkjeinek böngészése során sok érdekes, színes apróságra akadhatunk. Kívételt képeznek a katonai célokra használt szupergépek, amelyeknek jellemző felhasználása többnyire "Classified", azaz nem kötik az orrunkra. Az IEEE számítógépes társaságának szuperszámítógépekkel foglalkozó lapja kiváló kezdőpont a téma alaposabb megismeréséhez. A gond főleg a mennyiséggel kapcsolatos: az IEEE által mutatott összes anyag végigolvasása és megértése után az olvasó a legjobban értesült kutatókkal összemérhető tudásra tehet szert - legfeljebb tucatnyi év elteltével. (Ha gyorsan olvas.) Az amerikai Sandia laboratórium, mint a szuperszámítógépes kapacitás nagyfelhasználója, élen jár a kiemelkedő számítási teljesítményű technológiákkal kapcsolatos információk felhalmozásában is.

Gyönyörű szimmetria

Számítógép-architektúrákat bemutató sorozatunkban most az általános célú, szimmetrikus multiprocesszoros (SMP) rendszerek kerülnek sorra. Emellett a felhasználható processzorszám növelését szolgáló néhány kiegészítő megoldást is bemutatunk.

A több száz vagy ezer processzorú MPP-s (masszívan párhuzamos) rendszereknél kisebb, többprocesszoros SMP-k kettőtől néhányszor tíz CPU-t tartalmazó kiépítésben használatosak. Ezek a napjainkra a PC-k körében is elterjedt szimmetrikus többprocesszoros architektúrák szinte a legkönnyebben leírható (de nem a legegyszerűbben megvalósítható) párhuzamos számítási rendszerek.

Az SMP-s számítógépekben több, egymástól nem megkülönböztetett processzor osztozik egy bármelyikük által címezhető, közösen írt és olvasott memóriaterületen. A processzorok azonos operációs rendszert futtatnak, és a memórián kívül az I/O eszközöket is egységesen kezelik. Az SMP-k éppen a szinte teljes szimmetria miatt nagyon egyszerűen programozhatók, bár több processzor a megosztott erőforrásokat csak megfelelő szinkronizálás mellett kezelheti hatékonyan. Sok processzor esetén éppen a közös erőforrások miatt olyan problémák is fellépnek, amelyekkel a néhány processzorig bővíthető PC-s SMP-k nem is találkozhatnak.

Memóriakezelés

A szimmetrikus többprocesszoros rendszerek egyik fő előnye, hogy a teljes memóriatartalom közös címtartományban helyezkedik el. Az egységes, processzorok által közvetlenül címezhető memória ennek megfelelően további segédeszközök (célhardver vagy üzenetkezelő modulok) közbeiktatása nélkül érhető el. Mivel minden processzor minden memóriaterületet elérhet, az SMP-s alkalmazások a processzorközi kommunikációra szinte kivétel nélkül osztott memóriaterületeket használnak. A közösen használt memóriaterületek szoftveres szinkronizálásán kívül hardveres támogatásra is szükség van a cache-helyesség biztosítására. A különálló mikroprocesszoros gyorsítótárak és a rendszermemória közötti adatátvitelt ugyanis szinkronizálni kell, hogy az egyes processzorok cache-e által leírt memóriaállapot valóban mindig megegyezzen a közös rendszermemória pillanatnyi tartalmával. Bevált módszer az elosztott gyorsítótárak konzisztenciájának biztosítására a buszfigyeléses cache-kialakítás (bus snooping), ahol a processzorok cache-vezérlője minden buszforgalmat figyel. Amennyiben egy buszművelet az adott cache által tartalmazott memóriatartalomra vonatkozik, a területtel kapcsolatos cache-sorok állapota megváltozik (érvénytelenné válik vagy automatikusan frissül). Az egyik legnépszerűbb leírási módszert MESI-nek nevezik, itt minden cache-sor négyféle állapotban létezhet (lásd a keretes szövegrészt).

mesi
A MESI protokolldiagram részlete (Brian Boysen disszertációja, Clemson University)

Az Amdahl-törvény

Az alkalmazások párhuzamosításának korlátja a megoldandó feladat csak sorosan elvégezhető, azaz párhuzamos feldolgozásra alkalmatlan részének aránya. Ha a számítások N-ed része csak sorosan végezhető el, a fennmaradó (N-1)/N-ed része pedig elméletileg korlátozás nélkül osztható szét több processzor között, végtelen sok processzort felhasználva is csak a párhuzamosítható szakasz megoldási idejét sikerült közel nullára csökkenteni. Ebben az esetben a feladat megoldásának ideje N-ed részére csökkent. A gyakorlatban természetesen ritkán áll egyidejűleg rendelkezésre tetszőlegesen sok processzor, így az ilyen mértékű csökkenés főleg elméleti lehetőség.

Gyakorlati példák az Amdahl-törvényre azok a napjainkra egyre népszerűbb faktorizációs (prímtényezőkre bontási) algoritmusok, ahol a lehetséges megoldások ellenőrzésének első része tetszőlegesen párhuzamosítható, de az eredmények összegzése lineáris egyenletrendszerek megoldását igényli. A lineáris egyenletrendszerek megoldása alig párhuzamosítható (gyakorlatilag alkalmatlan elosztott rendszereken való futtatásra). Az Amdahl-törvény nem igaz korlátozás nélkül minden rendszerre. Olyan esetekben, amikor a feladat méretének függvényében változik a nem párhuzamosítható részfeladat mérete, a tényleges futásidő nem becsülhető elég hatékonyan.

Méretezhetőség

Az SMP-k nagy előnye lehet, hogy a teljes rendszer számítási teljesítménye a processzorszámmal egyenes arányban növekedhet (ésszerű processzorszám-határig), ha ezt a feladat jellege lehetővé teszi. A lineáris teljesítménynövelés nem minden feladatnál érhető el, hiszen a megoldandó feladatok nem párhuzamosíthatók korlátlanul. A párhuzamos feldolgozás okozta teljesítménynövekedést a csak sorosan megoldható programrészek feladaton belüli aránya korlátozza (Amdahl-törvény). Amennyiben a feladat jól párhuzamosítható, az SMP-k kiváló lehetőséget kínálnak a minimális erőfeszítés árán való gyorsításra. Mivel újabb processzorok beépítése során az SMP-k felépítése elvileg nem módosul (ellentétben a sokkal jobban széttagolt MPP rendszerekkel), az SMP-re felkészített alkalmazások így akár változtatás vagy újrafordítás nélkül is gyorsabbá válhatnak. Olyan rendszerekben, ahol az elemszám növelése a felépítést is megváltoztathatja – például MPP-k vagy gépfürtök (clusterek) esetén –, a megoldást is célszerű áttervezni a hardver változtatásakor.

asus1 asus2
Szívet melengető látvány: több processzorhely egy PC-s alaplapon (ASUS p2b és p2bd2)

Egyes feladatoknál előfordulhat a lineárist meghaladó mértékű (szuperlineáris) teljesítményjavulás is, azaz a számítási idő gyorsabban csökken, mint azt a rendszerben elhelyezett processzorok száma indokolná. E meglepő jelenségre általában akkor kerül sor, ha a megoldandó feladat aktívan használt memóriamérete összemérhető a processzorok másodszintű (L2) gyorsítótárának méretével. Amint a processzorhalmaz összes L2 cache-memóriája elegendően naggyá válik, a program által használt tárterület gyakorlatilag az L2 cache-ből, azaz a rendszermemóriánál lényegesen gyorsabban elérhetővé válik. A szuperlineáris skálázódásra jó példa lehet például a rögzített méretű végeselem-szimuláció, amely lényegesen felgyorsul, ha a processzorok által cache-be töltött adatmennyiség lefedi a teljes szimulációs teret. (Rögzített méret mellett a szimuláció egy-egy lépésében mozgatott adatmennyiség közel állandó, és ez az adatmozgatás nagyobb processzorszám mellett már tisztán a rendszer L2 cache-én belül is maradhat.)

Processzorszám

A közös memóriaterület és a közösen használt buszok egyre nagyobb gondot jelentenek az SMP-be épített processzorok számának növelése esetén. Mivel minden processzor állandó versenyben áll az osztott erőforrásokért, a rendszerbusz szűk keresztmetszetté válik. Néhányszor tíz processzor esetén a memóriaelérést már célszerű több buszra elosztani. Ilyen például a Sun Starfire szervezése, ahol négy, egymástól teljesen elválasztott címbuszon keresztül érhető el a rendszermemória. Ehhez hasonló megoldásokkal akár 64 vagy 128 csomópontos SMP-k is kialakíthatók, de ez a mai technológiai adottságok mellett már közel van az ésszerűen megvalósítható maximumhoz.

enterprise
Sun Enterprise alaplap egy processzorral és a következő helyével

A gyakorlatban néhány tucat processzornál többet igénylő feladatokra a "tiszta" SMP-k helyett gépfürtöket vagy MPP-ket célszerű használni. Nem ritkák a hibrid megoldások sem, például az SMP-csomópontokból felépített MPP vagy fürtözött rendszerek. Ilyen jellegű például az IBM SP-k architektúrája. Ezekben a gépekben az "MPP" számítógép SMP rendszerű csomópontjainak teljesítménye egy határig közel lineárisan növelhető. Ha a feladat alkalmas MPP-s feldolgozásra (azaz jól particionálható, CPU-teljesítmény által korlátozott), az SMP csomópontok teljesítménynövekedése gyakorlatilag változatlanul jelentkezhet a rendszer összteljesítményében. Csomópontok közötti kommunikáció által dominált (I/O-korlátozott) feladatoknál az MPP teljesítményét főleg a kommunikáció költsége korlátozza, ezért ilyen esetekben a nagyobb teljesítményű SMP csomópontok nem növelik arányosan a rendszer hasznos teljesítményét.

Kommunikáció

Mivel az SMP-k processzorai közös címtartományt kezelnek, a memóriaelérés más párhuzamos rendszerekhez képest gyors és egyszerű. A futtatott programok a processzorok saját memóriakezelő utasításait kiadva olvashatják és írhatják a memóriacímeket azok fizikai elhelyezkedésétől függetlenül. Az ehhez szükséges hardveres támogatás így kiváltja az elosztott memóriás (például MPP vagy fürtözött) architektúrák távoli, azaz más processzorhoz tartozó memóriatartományának eléréséhez szükséges függvényhívásokat. Mivel a memóriakezelés lényegében nem igényel hardveres vagy szoftveres támogatást, az MPP-kkel és a vektor-szuperszámítógépekkel ellentétben az SMP-k programozására nem csak a gyártó által szállított vagy külön átfordított eszközök használhatók.

modul
Sun processzormodul

Mivel az SMP-k memóriamodellje a fent leírtaknak megfelelően szimmetrikus és – a processzorok közötti versenyhelyzeteket leszámítva – alig tér el az egyprocesszoros rendszerekétől, programozásuk meglehetősen egyszerű, bár így is bonyolultabb az egyprocesszoros rendszerekénél. Sok processzor esetén ugyanis a közösen használt memóriaterületek kezelésekor szinkronizálni kell a párhuzamos műveleteket. (Sajnálatos, hogy szinkronizációs problémák szempontjából két processzor már soknak számít.) A gyakorlatban a legnagyobb problémát a több processzor által írt címtartományok jelentik, így az SMP-n futtatott programokat jelentősen gyorsíthatja az írások és olvasások processzorok közötti "kiegyensúlyozása".

Problémák

Mivel az SMP-ben üzemelő processzorok azonos operációs rendszert futtatnak, bármely megismételhető szoftverhiba azonos mértékben érinti az SMP rendszert. Hasonlóan érzékeny egy SMP a hardvermeghibásodásokra, hiszen minden erőforrás megosztott, így bármelyik kiesése sok komponenst érint. A nagy megbízhatóság elérésére ennek megfelelően csak alaposan tesztelt operációs rendszert és felhasználói programokat célszerű alkalmazni, kiegészítve a processzorok közti "hibaterjedést" megakadályozó védelemmel. Elterjedt megoldás például az automatikus újraindítás és újrakonfigurálás (ASR), ahol meghibásodás utáni újraindításkor a hibás alkatrészek kikerülnek a rendszerből. Noha az SMP-programozás sok tekintetben alig különbözik az egyprocesszoros, hagyományos programozástól (a szinkronizációs problémák kivételével), a processzorokat memóriával és I/O-eszközökkel összekapcsoló hálózat késleltetése (latencia) lényegesen nagyobb, mint egy egyprocesszoros rendszeré. Nagyobb SMP-knél ráadásul a processzorszám növelésével ez az idő jelentősen nőhet, hiszen az összeköttetés-hálózat egyre bonyolultabbá válik. A programozási modellt a késleltetés megnövekedése lényegesen megváltoztatja, mivel a memóriaműveletek végrehajtási ideje megnő. A memória elérési idejének növekedése fajlagosan drágábbá teszi a "távoli" műveleteket, amelyek azonban még így is gyorsabbak és egyszerűbbek az MPP-k csomópontok közötti kommunikációjánál.

Cache-koherencia problémák

Az általánosan elfogadott definíció szerint egy több processzor által használt cache-rendszer koherens, ha írási műveletet követően az adott tárterület olvasása az írott értéket adja vissza, és ha az írási műveletek sorrendje a memóriában olyan sorrendben hajtódik végre, ahogyan azokat a processzorok kiadták. Olyan cache-rendszerekben, ahol a memóriaírás azonnal végrehajtódik (write-through cache), minden írási művelet eredménye azonnal a rendszermemóriába kerül. Ilyen rendszerekben akkor léphet fel inkoherencia, ha a memóriaírást követően más processzorok nem érvénytelenítik az újonnan írt címterület korábban cache-be olvasott példányait.

A gyorsasága miatt népszerű késleltetett írásos (write-back) cache-rendszerben a probléma sokkal súlyosabb, hiszen a rendszermemória tartalma nem feltétlenül egyezik meg a logikailag helyes (oda utoljára írt) tartalommal. A késleltetett írás ugyanis a cache-be írt adatot nem azonnal másolja vissza a rendszermemóriába. Mivel a processzor és a hozzá kapcsolódó gyorsítótár közti adatmozgás nem mindig jelenik meg a rendszerbuszon, késleltetett írás mellett szükség van arra, hogy az SMP-s buszon megfigyelhetők legyenek a processzor-cache műveletek is. (Ez lényegesen egyszerűbben megoldható write-through szervezés mellett, hiszen ilyen rendszerekben minden cache-írást azonnal valódi memóriaírás követ.) Amennyiben egy SMP rendszerben írási műveletet követően frissíteni kell az írt címtartomány előző tartalmát tároló cache-memóriát, ezt egy gyors érvénytelenítő (invalidate) vagy időigényesebb frissítő (update) művelettel lehet végrehajtani. Az érvénytelenítés a máshol tárolt másolatokat helyezi érvényen kívül, így azokat a következő olvasáskor újra kell olvasni a rendszermemóriából. Frissítéskor a memóriatartomány buszon megjelenő új tartalmát a rendszermemórián kívül minden olyan processzor elmenti, amely az adott tartományt korábban saját gyorsítótárába másolta. A frissítés lényegesen lassabb volta miatt népszerűbb megoldás az elavult tartalom érvénytelenítése.

Nem tisztán SMP rendszerek

Bizonyos esetekben hasznos lehet a processzorok megkülönböztetése, még akkor is, ha ez elrontja az SMP szimmetriáját. A legtöbb SMP-n futó operációs rendszer ennek megfelelően tartalmaz olyan utasításokat, amellyel egy processz egy processzorcsoporthoz köthető vagy onnan kitiltható (például pbind). Gyakorlati példa lehet ilyesmire az SMP-n futtatott szerveroldali Javát tartalmazó HTTP szerveres alkalmazás, ahol a Java virtuális gépet a HTTP szervertől elkülönítve lényegesen javítható a rendszer válaszideje. Az ilyen "nem teljesen szimmetrikus" SMP-ben ugyanis csökken a processzváltások száma, így lényegesen csökkenthető a processzadminisztrációs idő. E processz-kötés speciális esete az egy SMP-n belül megvalósított "virtuális szervercsoport", ahol a processzorok logikailag teljesen el vannak különítve. Ezekre a mainframe világból ismert virtuális szerverekre (partíciókra) példa a unixos SMP szerverek közül a Sun Starfire domain-rendszere.

MESI

A többprocesszoros rendszerek processzorainak cache-sorai különböző állapotban lehetnek aszerint, hogy tartalmuk hogyan viszonyul a memória tényleges tartalmához. A késleltetett írást feltételező, cache-érvénytelenítésre alapozott MESI rendszerben négy alapállapotot különböztetünk meg minden cache-sorra: módosított (Modified, M), kizárólagosan használt (Exclusive, E), megosztott (Shared, S) és érvénytelen (Invalid, I) állapotot. A több processzor által olvasott memóriaterületek a processzoronkénti cache-memóriába megosztott (S) állapotban kerülnek. A shared cache-sorokból érkező adatokat olvasva biztos, hogy azok tartalma megegyezik a rendszermemória tényleges tartalmával.

Módosított (M) állapotba kerül egy cache-sor (azaz a neki megfelelő címterület) akkor, ha valamelyik processzor azt írja. Ebben az esetben a cache-sort máshol tartalmazó cache-memóriákban a terület érvénytelen (I) bejegyzést kap, hiszen a lokális másolatok tartalma eltérhet a pillanatnyi tartalomtól. Természetesen egy terület egyszerre csak egyetlen processzor által módosítható. Write-through rendszerben a MESI kizárólagosan használt (E) és módosított (M) állapota felesleges, hiszen tartósan ezek nem maradhatnak fenn. Léteznek egyszerűsített MESI rendszerek is, ahol nincs megkülönböztetés az egyetlen (E) és több (S) cache-ben nyilvántartott cache-sorok között.

Vektorarchitektúrák

A közismert MPP és SMP rendszerű architektúrák után most a vektorprocesszorokra és a belőlük felépített szuperszámítógépekre kerítünk sort.

A vektorfeldolgozás a hetvenes évek közepe óta ismert és alkalmazott módszer a hasznos (nettó) számításokat kísérő járulékos teljesítménycsökkenés (overhead) mérséklésére. Vektoregységekkel kiegészített számítógépekben célhardver gyorsítja a nagy címtartományokon, szabályos szerkezetben, periodikusan olvasott és írt adatok kezelését. A vektorutasítások egyetlen utasítással több tucat Kbyte tartalmán tudnak azonos műveleteket végezni, maximális hardveres párhuzamosítással. Hangsúlyozni kell, hogy ezek az utasítások valóban elemi műveletek, nem függvényhívások. Bizonyos esetben a megvalósítás többfokozatú, de teljes hardveres támogatású, programozói beavatkozás nélküli, mint például a hosszú vektorokat felbontó strip-mining.

Mára jelentősen szűkült a vektorarchitektúrájú gépek piaca, mert a gyors általános célú számítógépek teljesítménye sok tekintetben megközelíti a vektor-szuperszámítógépekét, miközben lényegesen olcsóbbak is, mert magasabb darabszámban gyártják őket. A vektorszámítógépek továbbra is verhetetlenek azokban a feladatokban, ahol a műveletek döntő többsége azonos, egyszerű műveletekből áll, amelyeket nagyméretű tömbök elemein kell elvégezni. Az ilyen szabályos vezérlési szerkezeteket tartalmazó kódot párhuzamosítva (vektorizálva), célhardveres segítséggel rendkívül fel lehet gyorsítani. Tipikus – sőt, szinte kizárólagos – vektorfeladat a lineáris algebrából ismert mátrixszorzás, illetve minden más feladat, amelyet hatékonyan meg lehet oldani mátrixok mátrixokkal vagy vektorokkal való szorzásával. Az általános célú és a vektor-szuperszámítógépek leginkább a memóriaelérésben, a regiszterkészletben és a processzorok kiegészítő egységeiben térnek el, így a továbbiakban ezt a három területet vizsgáljuk.

necsx5
Az NEC SX-5 vektor-szuperszámítógép egy méretarányos "operátorral"

Regisztertípusok

A vektorprogramozás alapvető egységei a lebegőpontos tömböket tartalmazó vektorregiszterek. (Egyes vektorszámítógépek, például a CDC vektorprocesszorok nem tartalmaznak regisztereket. Ezeket az architektúrákat memória-memória-vektorszámítógépeknek nevezik.) Egy-egy vektorprocesszor tipikusan 8, egyenként 64–256 lebegőpontos elemet tároló vektorregisztert tartalmaz. A maximálisnál rövidebb vektorok leírására a regisztereket hossz-számláló egészíti ki, amely a megadott elemszámnál leállítja a vektorfeldolgozót. A vektorregiszterek eléréséről hardverben megvalósított, viszonylag egyszerű címaritmetikai egység gondoskodik, amely ciklusonként legalább egy elemet képes a feldolgozó egységekbe juttatni.

A vektorokon elvégzendő műveletek hivatkozhatnak skalárkonstansokra. A vektorpipeline-ok hatékony kihasználásához a skalárkonstansok tárolására speciális skalárregiszterek állnak rendelkezésre. A skalárregiszterek egyetlen lebegőpontos értéket tartalmaznak, de a vektorműveletek szempontjából pontosan úgy viselkednek, mint egy tetszőleges méretű, azonos elemeket tartalmazó vektorregiszter. E megoldással a vektorpipeline maximális hatékonysággal kihasználható, miközben a skalárok nem foglalnak a feltétlenül szükségesnél több helyet.

Számos lineáris algebrai műveletnél több vektorművelet következik közvetlenül egymás után. Ilyen műveleteknél a számítások felgyorsítására alkalmas megoldás a regiszterláncolás, ahol az első műveletből kilépő vektorelemeket közvetlenül a második műveletet végrehajtó vektorpipeline-ba lehet küldeni. Mivel az így szervezett "ciklusokban" a két vektorpipeline egyszerre (egyetlen elemnyi fáziskéséssel) üzemel, a rendszer hasznos feldolgozási képessége kétszerese egy-egy vektorpipeline teljesítményének.

Egyes lineáris algebrai műveleteknél szükség lehet arra, hogy csak bizonyos vektorelemek vegyenek részt a számításban (ez a működés tipikusan a beágyazott feltételeket tartalmazó ciklusoknak feleltethető meg). Az ilyen szelektív műveleteket támogatják a vektormaszk-regiszterek, ahol minden vektorelemre megadható, hogy fel kell-e használni az adott művelet végrehajtásánál. Az ilyen kiegészítő információval ellátott vektorregisztereket ezek után maximális teljesítménnyel lehet feldolgozni, ami sokkal gyorsabb, mint a feltételesen végrehajtott ciklustörzs egy az egyben, feltételes utasításokkal történő megvalósítása.

Memória

A vektorarchitektúrák memóriaszervezése természetesen a tipikus vektorműveletekhez igazodik. A hatékony vektorizáláshoz elengedhetetlen, hogy a vektorpipeline minden ütemében új adat érkezhessen a processzorokhoz. A memóriát ennek megfelelően több modulból kell felépíteni, mint az feltétlenül szükséges lenne. Sok memóriamodult felhasználva ugyanis megoldható, hogy az egymást követő memóriaelérések mindig más modulhoz forduljanak, így a memóriaműveletek indításának frekvenciáját nem korlátozza az egy-egy memóriamodul egymást követő elérései közti minimális idő (bank busy time, bbt).

A memóriacímek modulok közötti elosztása célszerűen olyan, hogy a leggyakoribb műveleteknél a címzés közel egyenletesen mutat a rendelkezésre álló modulokra. Ideális esetben minden vektoroperandus minden elemének külön memóriamodulban kellene elhelyezkednie. Egymást követő címekhez forduló műveleteknél ilyen egyenletes eloszlást ad például az a megoldás, ahol a memóriacím alsó bitjei választják ki a modult. A kiemelt címbitek számától függően elfajuló esetben (amikor minden vektorelem azonos modulban található) a vektorfeldolgozás lassabb lehet, mint az egyszerű skalárfeldolgozás lenne. Az ilyen extrém lépésközöknél (stride) ugyanis minden vektorműveletnek ki kell várnia a memóriamodul feléledését, ezen felül ki kell várnia a vektorhardver további késleltetését. A hatás megegyezik a direkt leképezésű gyorsítótárak címátlapolási (aliasing) problémájával, amikor a nem megfelelő cache-algoritmus miatt minden memóriaelérés a lassú rendszermemóriához fordul a cache helyett.

matrix1
Egy ritka mátrix részlete...
matrix2
...a nem nulla elemek indexvektorai (R0, R1) és a mátrix vektorfeldolgozásra alkalmas "sűrített" változata (R2)

Az NEC SX-5 esetében például processzorszekrényenként 16384 memóriamodult lehet egy-egy rendszerbe építeni. Ennyire szétdarabolt memóriával egy SX-5 minden processzora 64 Gbyte/s-os tartós memóriaátvitelt használhat ki (összehasonlításul: ez több, mint százszorosa egy 64 bites, 66 MHz-es PCI busz átvitelének). A legtöbb szuperszámítógép-gyártó a rendszermemóriát általában nem a legmodernebb memóriákból építi fel. Alacsonyabb integráltságú, kisebb kapacitású modulokkal fajlagosan olcsóbban érhető el a szükséges memóriaátvitel.

Az átlapolt memóriaelrendezést gyakran alkalmazzák az SMP-s rendszerekben is, általában kisebb egységekben. A memóriaátlapolás azokban az SMP rendszerekben célszerű, ahol kellően sok memóriamodul áll rendelkezésre. Mivel az SMP-k általános célú számítógépek, tervezésükkor inkább a memória fajlagos árát csökkentik, ami viszont minimalizálja az adott memóriamennyiséget megvalósító modulok számát. Az SMP architektúrájú gépek ennek megfelelően többnyire a vektorszámítógépekhez képest sokkal kevesebb, legfeljebb százas nagyságrendű modul között osztják szét a műveleteket. A nem vektorarchitektúrájú gépek cache-rendszerei valamennyire ellensúlyozzák az alacsonyabb fenntartható memóriaátvitelt, de csődöt mondanak akkor, ha az egyszerre kezelt adatok mérete meghaladja a gyorsítótár méretét. (Amennyiben egy egyben feldolgozandó adatcsomag nem fér be a cache-memóriába, a cache csökkenő hatásfoka miatt egyre több alkalommal kell közvetlenül a lassú rendszermemóriához fordulni, azaz nő a memória átlagos elérési ideje.)

Mivel a nagyon sok, párhuzamosan elérhető memóriamodul vektorműveletekben nagy memória-sávszélességet biztosít, a legtöbb vektorprocesszorban a memória és a processzorok közé általában nem iktatnak gyorsítótárakat. Ha a memória sávszélessége nem elegendő, a dinamikus memóriákat gyorsabb, de jóval drágább statikus modulokra cserélve növelhető a hasznos memóriateljesítmény. Ezt a megoldást alkalmazzák például az NEC SX vektorszámítógépei (az M sorozatjelű, "multinode" sorozat). A tisztán statikus memória drágasága miatt nem elterjedt. (Annak ellenére, hogy jelentős kedvezményt lehet elérni, ha valaki egyszerre néhány tucat Gbyte cache-memóriát vásárol.) Amennyiben a teljesen dinamikus és teljesen statikus megoldás közötti átmenetre van szükség, a rendszermemória és a processzorok közé gyors vektorregisztereket illesztve a cache-memóriához hasonló előnyökre lehet szert tenni (bonyolultabb programok árán). E gyorsító regiszterek nem csak vektorszámítógépekben használatosak, az MPP-s Cray számítógépek is tartalmaznak ilyen virtuális regisztereket a vektorjellegű felhasználás gyorsítására.

Egyes vektorszámítógépekben, például a Cray C90-ben a háttértárakat memóriaként elérhető, diszkként viselkedő félvezetős eszközökkel valósítják meg. Åtmeneti tároláshoz ezek az SSD (Solid State Device) meghajtók nem elég gyorsak, de a periodikusan mentendő adatokhoz megfelelnek.

vekt1
Effektív teljesítmény a vektorhossz függvényében (a nyilak a regiszter-újratöltés miatti veszteséget jelölik)
vekt2
A memóriát és a számítási egységeket kiegészítő regiszterek és vezérlés

Processzorok

A vektorprocesszorok az általános célú processzorokból ismert részegységeken kívül számos kiegészítő egységet is tartalmaznak. A legtöbb kiegészítő természetesen vektorműveletekkel kapcsolatos segédtevékenységet szolgál ki. A vektorprocesszorok kis túlzással – a szisztolikus tömbökhöz hasonlóan – folyamatosan érkező adatfolyamok köré épülnek. Mivel a vektorprocesszorokat minden esetben nagy teljesítményű memóriaalrendszer szolgálja ki, a RISC mikroprocesszorok számos előnye nem jelentkezik számottevő mértékben, ezért a legtöbb vektorprocesszor az általános célú processzoroktól eltérően CISC jellegű. A gyakorlatban a vektoregységek kiegészítőinek közvetlenül megfeleltethető címzésmódok és művelettípusok szerepelnek a megszokott utasítástípusok mellett.

A modern vektorprocesszorokban minden műveletvégző elem többszörözött, így a vektorutasítások megfelelő programozással több vektoron egyidejűleg is végrehajthatók. A párhuzamosan üzemelő vektorpipeline-ok megfelelő memóriaátvitel esetén egymástól független adatokon dolgozhatnak vagy egymáshoz csatlakoztathatók (láncolás). Mivel a párhuzamos feldolgozás csak akkor lehetséges, ha a műveletek között nem lép fel nemkívánatos függés (adathazárd), a vektorprogramozásra leggyakrabban használt nyelv máig a Fortran. A C-ben népszerű mutatók problémát okozhatnak a programok párhuzamosításánál, hiszen független pointerek által mutatott memóriaterületek átlapolásakor nem egyértelmű, hogy a ciklusok hogyan párhuzamosíthatók. A Fortran programok a mutatótípusok hiánya miatt egyszerűbben és megbízhatóbban párhuzamosíthatók.

Vektorszótár

Aliasing: az a jelenség, amikor az egymáshoz közeli memóriaműveletek címe valamilyen szempontból a legrosszabb valamilyen hardver-részegység (például cache-memória) számára. Ha például a memóriarekesz címének utolsó nyolc bitje határozza meg az illetékes memóriamodult, 256 elemnyi lépésközzel futó ciklusok minden elemet ugyanabból a modulból olvasnak ki.

BBT: Bank Busy Time. Memóriamodulok egymást követő elérései közti minimális várakozási idő hossza (általában rendszerórajelben kifejezve). Modern rendszerekben az órajel periódusidejének több tucatszorosától több százszorosáig terjedhet.

Chaining: -> Regiszterláncolás.

Címátlapolás -> Aliasing.

Interleave: memóriamodulok olyan elrendezése, ahol a logikailag egymást követő címtartományok fizikailag más-más modulban helyezkednek el. Az ilyen átlapolt szervezésnél a folytonos területeket címek szerinti sorrendben olvasva a memória elérése és a soron következő modulok írás/olvasásra való előkészítése egyszerrre történhet.

Maszkregiszter: csak bizonyos vektorelemeken végrehajtandó műveleteknél használt segéd-vektorregiszter. Bitjeivel jelzi, hogy a vektorművelet mely elemekre hajtandó végre.

Memória-átlapolás -> Interleave.

Regiszterláncolás: közvetlenül egymásra épülő vektorműveletek egymáshoz kapcsolása. Láncolt műveletekben a részeredmények közvetlenül kerülnek felhasználásra, regiszterbe mentés és visszatöltés nélkül.

Scatter-gather: memóriabeli vektorok nem minden elemén végrehajtott szelektív címzési műveletpár, ahol a kívánt elemeket vektorregiszterbe másolják, majd a műveleteket vektoregységekben elvégezve az eredmény visszamásolható a memóriába.

Stride: vektorműveletek lépésköze – két, közvetlenül egymás után felhasznált vektorelem címtartománybeli távolsága. Egy vektorműveleten belül a lépésköz állandó.

Strip-mining: logikai vektorműveletek feldarabolása a vektorregiszterek méretéhez illeszkedő méretű vektorokra. A fizikailag rendelkezésre álló (egyben kezelhető) vektorméret feletti műveleteket a vektorprocesszorok a háttérben ciklusokra bontva végzik el.

Szupervektor skálázódás: az egyetlen vektorfeldolgozó egységgel elérhető gyorsítást meghaladó méretű sebességnövekedés. Gyakorlati példa: regiszterláncolás, ahol a feldolgozási sebesség kétszerese lehet az egyetlen vektoregységgel elérhetőnek.

Amikor a vektorfeldolgozás eredménytelen...

A vektorprocesszorok fő korlátja éppen speciális felépítésükben rejlik. Mivel a vektorizálás hatékony kihasználásához a vektoregységek pontos ismeretére van szükség, a programokat sokkal inkább az architektúrához kell igazítani, mint egy SMP-nél. Szerencsére nincs szükség olyan bonyolult kommunikációs modellre, mint egy MPP programozói felülete: a vektorfeldolgozásra való "testre szabás" inkább az adatok elhelyezkedését érinti. A vektorpipeline-ok különleges utasításkészlete miatt a vektorprogramokat általában eltérő algoritmusokból kiindulva írják. A vektorszámítógépek memóriaelérésre való érzékenysége miatt különösen óvatosan kell bánni a konstans, de kedvezőtlen lépésközzel dolgozó programokkal. Egy kettőhatványokkal dolgozó gyors Fourier-transzformáció (FFT) például könnyen idézhet elő címátlapolódást, melynek hatására egy vektorszámítógép sebessége egyetlen memóriamodul sebességére eshet vissza.

Nem hatékony a vektorfeldolgozás olyan esetekben, ahol az adatok feldolgozása nem reguláris. Indexelt adatelérésnél például az indexen keresztül címzett adatok memórián belüli elhelyezkedése egyáltalán nem szabályos. Ilyen esetekben a vektorpipeline-ok csak nagyon rövid összefüggő sorokat dolgoznak fel, és nem érvényesülhet az azonos műveleteket összevonó "vektorhatás" (és a scatter-gather párok sem hatékonyak minden feladatméretre). Mivel a "skalár" feldolgozás lényegesen drágább vektorprocesszorokon, mint szinte bármilyen más processzortípuson, a vektorprocesszorok szinte kizárólagos felhasználási területe ennek megfelelően azokra a numerikus algoritmusokra korlátozódik, amelyek mátrixok mátrixokkal vagy vektorokkal való szorzásán alapulnak.

További olvasáshoz

A vektor-szuperszámítógépekről szólva nem hagyhatjuk említés nélkül a hányattatott sorsú Cray szuperszámítógépeket. Szintén gyárt vektorarchitektúrájú gépeket a NEC, a Fujitsu és a Hitachi. Sajnos számos, korábban vektor-számítógépekkel foglalkozó cég már nem érhette meg, hogy saját Web-helye legyen.

Mi is az a mainframe?

Architektúrákat bemutató sorozatunk következő cikkeiben a mainframe számítógépekről lesz szó. Röviden összefoglaljuk a mainframe világ fő jellemzőit és azt, mivel foglalkozunk a mainframe architektúráról szóló részekben.

A mai mainframe számítógépek – az IBM S/390 és az Amdahl, Hitachi "S/390-kompatibilis" gépcsaládjai – a hatvanas évek adatközpontjaiban alkalmazott, központosított, intelligencia nélküli terminálokon keresztül elérhető, több (tíz)ezer felhasználó egyidejű kiszolgálására alkalmas nagyteljesítményű rendszerek. Nem túlzás azt állítani, hogy a "mainframe" architektúrán kívül filozófiát, mentalitást is jelent. Noha tíz évvel ezelőtt a mainframe és a központosított feldolgozás teljes kipusztulását jósolták az elemzők, a mainframe és a hasonló kategóriájú Unix-alapú szerverek piaca korántsem halott, sőt, erőteljesen növekszik.

s390
IBM S/390 Parallel Enterprise Server Generation 5

Tranzakciók

Az adatbázis-kezelőket ismerők számára nem ismeretlen fogalom a tranzakció, amely a mainframe világ filozófiájának megértéséhez nélkülözhetetlen. Tranzakciónak egy megszakíthatatlan, részlegesen nem végrehajtott, teljes eredményt produkáló vagy teljesen elmaradó műveletet nevezünk.

A legtöbb mainframe-es alkalmazás ilyen elemi lépések sorozataként megvalósított, állandóan konzisztens állapotokon keresztül lépdelő program. Ez a szemlélet alapvetően különbözik a Unix mentalitásától, hiszen a Unix rendszerek sokkal alkalmasabbak gyors alkalmazásfejlesztésre, kevésbé monolitikus, sokkal dinamikusabb eszközkészletet használnak. A két eltérő fejlesztési módszer különböző piacokon számít elfogadottnak: a Web-alapú gazdaság az előtérben (a kezelőfelületen) inkább a gyors, "eldobható" fejlesztéseket részesíti előnyben, míg az adatközpontban érthetően a megfontoltabb, lassabb ütemű változtatások elfogadottabbak. A mainframe-ek Web-közelivé válásával és a Unixoknak az adatközpontokban való megjelenésével megfigyelhető a két piaci csoport szemléletének közeledése. A szoftveren kívül a mainframe rendszerek rendelkezésre állásának növelésére a hardverben is tranzakciókra emlékeztető megoldásokat alkalmaznak. A legjobb példa az IBM S/390-es processzorokban alkalmazott megoldás a megbízhatóság növelésére, ahol processzorhiba felléptekor a processzor állapota áttölthető egy "tartalék" processzorba, a felhasználó további beavatkozása nélkül egészben, hibátlanul befejezve a műveletet. Hasonló megoldások nem mainframe alapú hibatűrő rendszerekben – például a Sun Netra ft1800-ban – is léteznek, de processzoron kívüli, kiegészítő hardverre alapozva.

Jobok és batchek

A mainframe-ek eredetének ismeretében nem meglepő, hogy szoftverhátterük alapvetően nem az egyes felhasználókra, hanem az elvégzendő feladatokra, a jobokra épít. Minden személyes felhasználásból "kinőtt" rendszer (például a Unix-változatok, a Windows 9x és NT) környezete a felhasználó fogalma köré csoportosul. Ezzel szemben a vállalati rendszerekből kinőtt mainframe világ alapegységei teljes folyamatok ("számlázás", "havi jelentés", "csekknyomtatás"), miközben az egyes felhasználók szerepe sokkal csekélyebb például a Unix felhasználó fogalmáénál.

A nagyvállalati rendszerek igényeinek megfelelően a jobhoz kötődő részfeladatok más rendszerekhez szokott felhasználók számára bonyolult módon, de nagyon hatékonyan vezérelhetők. A job-vezérlés magas fokon való űzéséhez elengedhetetlen a kötegelt (batch) feldolgozás jól méretezhető, állandóan kézbentartható erőforrásigényű ütemezőrendszere. A méltán híres mainframe ütemezőprogramok alkalmasak a kevert (kötegelt és interaktív) feladatok magas színvonalú, adaptívan, menet közben módosítható, garantált teljesítményt nyújtó időzítésére. A mainframe környezet jellemzői közül több is ihletet adott más rendszerek kialakításához. A DOS például átvette a batch-feldolgozás nevét és néhány ötletét (megbízhatóságát és terhelhetőségét sajnos nem), a Unix alatti nyomtatás beállítása pedig – főleg bonyolultsága – a mainframe nyomtatási jobok paraméterezésére emlékeztet.

Hardverkörnyezet

Noha sokkal kevesebb mainframe-gyártó létezik, mint szerver-, munkaállomás- vagy PC-gyártó, a "mainframe" nem egységes fogalom. A vezető IBM és a PCM-gyártó ("plug-compatible manufacturer", azaz mainframe-klónokat gyártó cég) Hitachi és Amdahl számos eltérő technológiai lépésen keresztül jutott el a mára egyeduralkodóvá vált CMOS alapú mainframe-ekig. Minden technológiaváltásnál fontos volt, hogy a meglevő alkalmazások zavartalanul futtathatók maradjanak. A mainframe-ek processzorai a leggazdagabb utasításkészlettel rendelkező, rendkívül kifinomult CISC rendszerek, ennek megfelelően minden technológiaváltásnál és újratervezésnél bonyolult utasítások százait kell változatlan formában újra megvalósítani. A visszamenőleges, száz százalékos bináris kompatibilitás a mainframe-piacon többek között azért létfontosságú, mert talán ezen a területen a legnagyobb az aránya a forráskód nélküli, csak futtatható változatban létező alkalmazásoknak. (A bináris formában terjesztett "kiegészítések", azaz patch-ek ennek megfelelően rendkívül népszerűek.)

s390multi
IBM S/390 Multiprise

Összevetés az eddigi architektúrákkal

A mainframe-ek és a sokprocesszoros, Unix alapú SMP szerverek között számos alapvető eltérés található (úgy is fogalmazhatunk, hogy akad azért néhány közös vonás). Az SMP-kben népszerű, általános célú, kereskedelmi forgalomban beszerezhető (Commercial Off-The-Shelf, COTS) processzorokkal szemben a mainframe processzorok speciális, egyedi tervezésű alkatrészek. Ugyanez igaz szinte minden részegységre. Mivel az alkatrészek számának növelésével a meghibásodások között eltelt idő várható értéke (MTBF) gyorsan csökken, a sokprocesszoros SMP-k a COTS alkatrészeken túl további, sokszor egyedi tervezésű ellenőrző rendszereket alkalmaznak a megfelelő rendelkezésre állás biztosítására.

A mainframe-ek gyakorlatilag elsődleges tervezési szempontja az alkatrész-szinten is megtervezett nagy megbízhatóság, ami még a teljesítmény növelésénél is fontosabb. Egy tipikus mainframe-ben a redundancia olyan mértékű és a helyreállító folyamatok olyan szinten tervezettek, hogy egy-egy rendszer előre nem tervezett leállásai között akár több évtized is eltelhet. A várható állásidő nagyjából évi öt–tíz perc, ami összemérhető a telekommunikációs berendezésekkel szemben támasztott elvárásokkal. Ez a rendkívüli megbízhatóság meghaladja az összes általános célú SMP-s szerverét.

Az SMP-khez hasonló az összehasonlítás a mainframe-ek és MPP-k között. Mivel az MPP-k általában az SMP-kkel közel azonos, nem egyedi fejlesztésű komponensekből épülnek fel, a mainframe–SMP ár–teljesítmény összehasonlítás változatlanul érvényes. Az SMP-khez képest további megkötés, hogy a masszívan párhuzamos rendszerek felhasználhatósága korlátozott (csak jól párhuzamosítható, azon belül is nem kommunikáció által dominált alkalmazásokat futtathatnak maximális hatékonysággal), így az SMP-khez képest az MPP-k további hátránya a szűkebb felhasználhatóság, a központi felügyelet még hiányosabb eszközkészlete.

A legfontosabb eltérés a mainframe és szuperszámítógépes rendszerek közt az architektúrával szemben támasztott követelményekből adódik. A vektor-szuperszámítógépek esetében minden feladat mátrixszorzásra vezethető vissza, ha kell, akkor erőszakkal is. A célfeladatnak megfelelően szinte egyetlen érdekes teljesítményadat a számítási teljesítmény, minden más jellemző (például a rendelkezésre állás) legfeljebb másodlagos. A vektor-szuperszámítógépek tipikus üzemeltetése során nem kell egyszerre sok felhasználót kiszolgálni, így a méretezhetőség sem elsődleges szempont.

Mainframe, belülről

Számítógép-architektúrákkal foglalkozó sorozatunkban a mainframe rendszerek kerülnek sorra. A következő két részben a mainframe "filozófiát" mutatjuk be, elsőként a processzor és a memória, majd a teljes rendszer szintjén.

Főként a legfontosabb mainframe-gyártó, az IBM szabványt teremtő OS/390-es rendszereivel foglalkozunk. A "mainframe-klónok" gyártóinak (Amdahl, Hitachi) megoldásait csak kiegészítésként említjük meg. Az IBM ESA/390 (Extended Systems Architecture) ma a hatodik CMOS generációnál (G6) tart. Mivel a G5 és a G6 megjelenése között a fejlesztési modell sajátosságai miatt csak néhány hónap telt el, általában mindkét generációra hivatkozva mutatjuk be a ma modernnek nevezhető mainframe-ek jellemzőit.

Mivel a mainframe-világ alapvetően eltér a Unix rendszerekben vagy a szuperszámítógépek között megszokottaktól, az egyes mainframe-gyártók közti eltérések sokkal kevésbé lényegesek az eltérő architektúrák különbségeinél. Példaként ennek megfelelően általában valamelyik nagy Unix-gyártó rendszereire hivatkozunk, hogy egy-egy szokatlan mainframe-es fogalmat a mindenki által ismert Unix terminológiával körülírva mutathassunk be. (Kerüljük viszont a mainframe-es Unix, az Open Environment szóhasználatát, hiszen az számos mainframe-specifikus fogalmat átvett, illetve más értelemben használ.)

A PC-kben és a Unix-alapú rendszerekben meglehetősen szabadon értelmezett kompatibilitást (mottók: "majdnem teljesen, de mégsem száz százalékosan IBM PC-kompatibilis", illetve "nagyon hasonló, de éppen eléggé nem kompatibilis, avagy hogyan kérjünk részletes processzlistát") a mainframe világ bárki másnál sokkal komolyabban veszi. Az IBM mainframe-ek visszamenőleges, száz százalékosként definiált kompatibilitása a "plug-compatible" klóngyártók IBM gépekkel való teljes csereszabatosságára is vonatkozik. Ennek megfelelően egy MVS (vagy OS/390) környezet leírt jellemzői igazak például Amdahl mainframe-ekre is.

Processzorok és memória

mcm
Mainframe CPU MCM fényképe

A mainframe processzorok a Unix-gyártók és az Intel-kompatibilis családok trendjeitől eltérően nagyon gazdag (és egyre gazdagabb) utasításkészletű CISC egységek. A meglevő mainframe-alkalmazások teljes bináris hordozhatósága alapkövetelmény a több évtizedes mainframe hagyományok miatt, így értelemszerűen nincs lehetőség a RISC mikroprocesszorok gyors változásaihoz hasonló ütemű újításokra. Mivel a mainframe felhasználók évtizedekben gondolkodnak, a mainframe processzort érintő döntéseket sokkal lassabban lehet meghozni a gyorsabban avuló technológiákra vonatkozóknál.

A CISC hagyományoknak megfelelően az S/390-es utasítások változó hosszúságúak, az ehhez szükséges bonyolult feldolgozóegységekkel és változó végrehajtási idővel. A processzorok nem szuperskalár felépítésűek, a teljesítmény növeléséhez inkább az egyes utasítások végrehajtási idejének csökkentését tűzték ki célul. A G5/G6-os processzorok magja 500 MHz-es órajelű, a kiszolgáló áramkörök (memóriacache, memóriaillesztők) 250 MHz-esek. A processzorok közül legfeljebb 14 üzemeltethető SMP felállású többprocesszoros rendszerben. Érdekes módon ebben a mainframe-klóngyártó Amdahl megelőzi az IBM-et: a legnagyobb Amdahl Millennium 16 processzorig bővíthető, amit az IBM mainframe-ek csak a G6-ot követő generációnál támogatnak majd.

A teljesen azonos chipekben megvalósított processzorok közül a rendszer indításakor a mikrokódtöltési fázisban (IML, Initial Microcode Load) dől el, hogy egy processzor milyen feladatot lát el. A "valódi" CPU-kon kívül a rendszerben kiszolgáló I/O-processzorokra (SAP) és tartalékokra (Spare Processing Unit) is szükség van. A meghibásodások során a tartalékprocesszorok vehetik át a sérült processzorok állapotát, a rendszer pedig rögzíti, hogy az újrakonfigurálásnál melyik egységet kell kihagyni a biztonságos működés érdekében.

A CISC architektúrájú gépek között is egyedülálló módon az S/390-es processzorok utasításkészlete hierarchikus. A klasszikus mikrokód felett létezik egy-egy bonyolultabb, számos mikrokódú utasítást összefogó "millikód" szint. A millikód-utasítások még mindig eleminek tekinthetőek, de körülbelül az assembly nyelvek makróinak szintjén. Az S/390-es processzorokban száznál több olyan "kisegítő" (assist) mikrokód-utasítás létezik, amely csak millikódból hívható. Az eleminek tekinthető utasításokra néhány példa: STORE CHARACTERS UNDER MASK, SHIFT AND ROUND DECIMAL, COMPARE LOGICAL CHARACTERS UNDER MASK, MOVE WITH OFFSET, UPDATE TREE (nem tévedés, elemi adatstruktúra kezelhető assembly szinten).

controller
S/390-es kontroller-IC félvezetőszinten

Az S/390-es processzorok számos címzésmódot ismernek (valós címzés, többféle indexelt címtartomány, többféle virtuális cím). Visszamenőleges kompatibilitási okokból léteznek 24 és 31 bites memóriacímek, értelemszerűen egy 24 bites cím a 2 Gbyte-os címtartomány alsó 16 Mbyte-jára mutat. A 31 bites címzési korlátozás miatt egy-egy G6-os partíció (LPAR) 2 Gbyte memória közvetlen címzésére képes. A régebbi kódok számára kompatibilitási okokból megőrzött 24 bites címzés és a 31 bites között a felső címbit vált – a régi utasítások alapbeállításban értelemszerűen az eredeti, 24 bites címzést választják ki. Az OS/390 V2 10-es változata 64 bites címzésre is képes (ez a változás jelentős, és érzékenyen érinti a mainframe-világot).

Az S/390-es memória SMP elven elérhető, címtartománytól függően azonos elérési idővel kezelhető, általában a sokprocesszoros, RISC-alapú unixos szervereknél kevesebb maximális memóriával (a G6-nál ez például 32 Gbyte, ami mainframe-ben soknak, unixos szerverben kevésnek számít). Az eltérés egyik oka a RISC és a CISC felépítés közti különbség, hiszen adott művelethez általában jóval rövidebb CISC utasítássorozat is megfelel. A 31 biten túlnyúló, nagy adatmennyiségek hatékony kezeléséhez az S/390-ben a "címtartományon kívüli" memória (expanded storage) áll rendelkezésre, amely NUMA jellegű, nem egységes elérési idejű tartományokat tesz elérhetővé. A PC-s DOS-t ismerők számára közeli fogalom olyan memóriára utal, amelyet laponként címezve szűk címtartományban jeleníthető meg egy lényegesen nagyobb memóriaterület tartalma. A bővített memória elérését (másolás rendszer- és bővített memória között) elemi utasítások teszik lehetővé. A bővített memória használata természetesen lassabb a közvetlenül elérhető címtartományénál.

Mivel nagyon sok mainframe-felhasználó található az adatvédelemre rendkívül kényes bankszektorban, az S/390-esekhez külön kriptográfiai koprocesszor kapható. Az általános célú felhasználást szűkítve az S/390-es mainframe-ek kiegészíthetők külső vektoregységgel. Egy ilyen vektoregység a klasszikus vektor-szuperszámítógépekre emlékeztető módon saját címszámító áramkörrel támogatja a HPC-s alkalmazások által igényelt, nagy tömegben végrehajtott vektorutasításokat. A mainframe-en szimulált vektorfeldolgozás nem teljesen azonos a vektorprocesszoroknál megszokottal, hiszen a mainframe-ek nem tartalmaznak a vektorgépeken kívül szinte ismeretlen, akár több (tíz)ezer modulra tagolt nagy sávszélességű memóriát.

Szoftver

A Unixoktól vagy a (mai) PC-s operációs rendszerektől eltérően az OS/390 programozói felületei assembly szintűek. Az assembly API-k az alacsony szintű (alap file-műveletek, szinkronizáció, időzítések stb.) mellett bonyolultabb feladatokat is elérhetővé tesznek (eseménykezelés, időzítés, kontextusváltás stb.). Az API-k megvalósítása gyakorlatilag assembly makrókkal történik. Az Open Edition API-kat a unixos hagyományokhoz híven C-ben definiálták.

Megbízhatóság, rendelkezésre állás

A minél hosszabb, megszakítás nélküli üzemidő elérése érdekében általános a mainframe rendszerekben egyedülálló mértékű RAS (Reliability, Availability, Serviceability) megoldások alkalmazása. A unixos rendszereknél a legnagyobb szervereket leszámítva a meghibásodások után sokszor csak rendszerújraindítással lehet kiiktatni a meghibásodott alkatrészeket vagy alrendszereket. A mainframe-ek viszont teljes leállás nélkül oldják meg a legtöbb hardver-újrakonfigurálási feladatot. A maximális biztonságra törekvés azzal jár, hogy a megbízhatóságot biztosító programozói felületek közül sok alacsony szintű, csak assemblyből érhető el. Az assembly szintű fejlesztések pedig értelemszerűen sokkal lassabbak, mint a Unixban általános shell-programozás.

Az állásidő minimalizálása már az üzemszerű működésnél megkezdődik. Az S/390-es komponensek működő rendszerben való üzembehelyezéséhez általában valamilyen rendszerlistában való változtatás szükséges, ami után a rendszer fokozatosan változtatja meg a konfigurációt. A futó alkalmazások számára az átmeneti időszakban redundáns adatstruktúrák biztosítják a zökkenőmentes átmenetet, miközben az újonnan indított programok már a megváltoztatott környezetet látják. (Az átmeneti időszak a mainframe-változások tempójában egy-egy alkalmazás számára hónapokig is tarthat.) Ezt a fokozatos migrációt a legnagyobb unixos szerverek is csak részlegesen valósítják meg. Szoftverben hasonló lehetőség például a Solaris menet közbeni patchelése, ahol a megfelelően megírt kernelmodulok a futó kernelt módosítva leállítás nélküli rendszerfrissítést tesznek lehetővé.

A meghibásodások elleni védelem a processzorokon belül kezdődik. Az S/390-es mainframe-processzorok belső felépítése a G4-es generáció óta többszörösen redundáns, kettőzött utasításvégrehajtással. Az assembly utasítások végrehajtásakor a processzor minden lépést követően belső ellenőrzést hajt végre. Ha a két független végrehajtó egység állapota nem egyezik meg, a hibás utasítást elsőként ugyanazon a processzoron belül ismétli meg a rendszer. A processzorok belső felépítése lehetővé teszi szinte minden utasítás teljes újraindítását, mivel a processzor állapota, azaz a regiszterek tartalma és az utasításcímek a szükséges mértékben elmenthetők és visszaállíthatók.

Ha a fellépő hibajelenség átmeneti zavar volt, a megismételt utasítás valószínűleg sikeres, így a program végrehajtása zavartalanul folytatódhat. A tranziens hiba fellépte lekérdezhető, de az alkalmazás futtatását ez nem érinti. Ha az ismétlés is sikertelen, az elmentett processzorállapot áttölthető egy másik processzorba, amely az alkalmazás számára észrevétlenül folytathatja a program végrehajtását. A processzortartalom másolásakor a rendszerben működő processzorok együttesen határozzák meg, melyik tartalékprocesszor vegye át a sérült példány tartalmát. A processzormodulok üzem közben cserélhetők.

A processzorokhoz legközelebbi megbízhatóságnövelő lépés a memóriamodulokban található. A több memóriachipet tartalmazó modulok automatikusan észlelik egy-egy IC meghibásodását, és az operációs rendszernek küldött üzenettel párhuzamosan a működésképtelen chipből tartalékokba mozgatják azok kiolvasható tartalmát. A dinamikus memóriákban szokásos tranziens hibák kiküszöbölésére a G5/G6-os szerverek folyamatosan újraírják és ellenőrzik a memóriatartalmat, és a (javítható) hibák meghatározott száma felett a sokat tévedő modul tartalmát tartalék memóriába másolják.

A memóriacache védelmére a szokásos hibajavító kódon (ECC) kívül az S/390-esek automatikus cache-tiltást alkalmaznak. A meghibásodott cache-sorokat a rendszer megjelöli, és azokba többet nem tölthető adat. Ez a megelőző jellegű megoldás nem mindig alkalmazható, de siker esetén ugyanúgy hibátlanként tüntethet fel sérült memóriát, mint a merevlemezeknél alkalmazott szektor-mozgatás. A processzorhoz legközelebbi, elsőszintű gyorsítótár nemcsak cache-sor szinten, hanem teljes memórianegyedekre osztva is képes kiiktatni a cache-tartalmat. E megoldással katasztrofális mértékű meghibásodások is korrigálhatók, a teljesítmény jelentős csökkenése árán.

Az operációs rendszer moduljait részben felkészítették a memóriaproblémákra, és azok felléptekor képesek újrakonfigurálni magukat. A magasabb szintű alkalmazások számára nem triviális feladat az ilyen szintű hibák elhárítása, így itt általában operátori beavatkozásra van szükség. Az OS/390 szabványos API-kon keresztül lehetővé teszi, hogy az alkalmazások maguk is segítsék a helyreállítást, de ez a felhasználás jellegétől függően nem mindig kivitelezhető.

Mainframe szótár

ABEND: Abnormal Ending. Az operációs rendszer vagy alkalmazás által észlelt, üzemszerű működéstől eltérő körülmények közötti vészkilépés.

Condition: operációs rendszer által észlelt, nem szokványos működési állapot. Az ABEND-nél kevésbé súlyos, nem üzemszerű, potenciálisan veszélyes helyzet.

IPL: Initial Program Load, rendszerújraindítás. Gyakorisága – vagy inkább ritkasága – általában években mérhető.

JCL: Job Control Language. A klasszikus kötegelt (batch) adatfeldolgozás hatékony vezérlését lehetővé tevő leíró nyelv. Sokoldalú utasításai és kezdetben riasztónak tűnő, nehezen megtanulható jellemzői alapján a unixos és PC-s világ számára a Perl programozási nyelvhez hasonlítható. Fontos eltérés, hogy a JCL scriptekben fajlagosan kevesebb olyan karakter található, amely a numerikus billentyűk és a [Shift] együttes alkalmazásával csalható elő.

LPAR: Logical Partitions. Egy-egy mainframe-en belül definiált, firmware támogatással elválasztott, független mainframe környezetek, saját operációs rendszerrel és alkalmazásokkal. A legközelebbi unixos megfelelő a "virtuális szerverek" (dynamic system domains) fogalma. A fizikailag is elkülönített unixos domainekkel szemben a partíciók tisztán logikaiak is lehetnek, így egy processzor több LPAR tagjaként egymás számára láthatatlan alkalmazásokat is futtathat.

OE: Open Edition. Posix-kompatibilis, S/390-en futó Unix jellegű rendszer. Kevert unixos–mainframe környezetekben népszerű. (Nem rokona a mainframe-en futó Linux/390-nek.)

PCM: Plug-Compatible Manufacturer. IBM-kompatibilis mainframe-klónokat gyártó cégek összefoglaló neve (Amdahl, Fujitsu, Hitachi).

SAP: System Assist Processor. I/O-műveletek elvégzésére lefoglalt processzor.