Ugrás a tartalomhoz

AltiVec

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából

AzAltiVecegylebegőpontosés egész típusú számokon értelmezettSIMDutasításkészlet,amelyet azAIM Szövetség,azApple,azIBMés aFreescale Semiconductor(korábban a Motorola félvezetőgyártó részlege, innen az M betű a betűszóban) által alkotott számítástechnikai fejlesztési társulás tervezett és a mai napig birtokolja a tulajdonjogokat. Az AltiVec utasításkészlet számosPowerPCváltozatba belekerült, többek között a MotorolaG4,azIBMG5ésPOWER6processzorába, valamint aP.A. SemiPWRficientPA6T modelljébe is. Az AltiVecvédjegykizárólagos tulajdonosa a Freescale, emiatt a rendszerre több más néven is hivatkoznak, például aVelocity Engineaz Apple, aVMXaz IBM és a P.A. Semi helyettesítő elnevezése, bár az IBM valami miatt újabban nyíltan az AltiVec megnevezést is használja.

Míg az AltiVec név egy utasításkészletre vonatkozik, megvalósításai, tehát a konkrét áramkörökben való logikai kialakítása igencsak különbözik / jelentősen eltér az IBM és a Motorola fizikai processzoraiban. Jelenleg egyetlen eddig gyártott IBM magban sem található a Motorola által licencelt logikai kialakítás, és a Motorola magjaiban sincs IBM logika.

Az AltiVec szabványos tartozéka az újPower ISA v.2.03[1]specifikációnak. Egészen eddig a specifikációig nem volt része a PowerPC architektúrának, bár a PowerPC utasításformátumot és szintaxist használja és kifejezetten az erre a célra lefoglalt opkód-területet foglalja el.

Jellemzői és összehasonlítása az x86-64Streaming SIMD Extensionskiterjesztésével

[szerkesztés]

Mind az AltiVec, mind azSSEkiterjesztést 128 bites vektorregiszterek használata jellemzi, amelyek tizenhat 8 bites előjeles vagy előjel nélküli karaktert reprezentálhatnak, avagy nyolc 16 bites előjeles vagy előjel nélküli rövid egészet(short),négy 32 bites egészet vagy négy32 biteslebegőpontos változót. Mindkettő tartalmazgyorsítótár-vezérlő utasításokat, amelyek a gyorsítótár-szennyezés minimalizálását célozzák az adatfolyamok feldolgozása közben.

A kettő között lényeges eltérések is vannak. AzSSE2-vel ellentétben, az AltiVec támogat egy speciálisRGB"pixel"adattípust is, de nem dolgozik 64 bites duplapontosságú lebegőpontos értékekkel, és ebben nincs közvetlen adatmozgatási lehetőség a skalár és a vektorregiszterek között. A PowerPCRISCkialakításának„load-store”modelljéhez igazodva a vektorregiszterek tartalma, a skalár regiszterekhez hasonlóan, csak a memóriából tölthető be és oda írható ki. Az AltiVec azonban jóval teljesebb „horizontális” művelethalmazt biztosít, amelyek egy vektor összes elemén működnek; az adattípusok és műveletek megengedett kombinációi egy sokkal teljesebb készletet alkotnak. Harminckét 128 bites vektorregiszter áll rendelkezésre, szemben az SSE nyolc és az SSE2 16 regiszterével, emellett a legtöbb AltiVec utasítás három regiszteroperandust kaphat, ezzel szemben azIA-32-ben két regiszter/regiszter vegy regiszter/memória operandus a megszokott.

Az AltiVec abban is egyedülálló, hogy támogat egy igen hajlékony vektorpermutációs utasítást, amelyben az eredményvektor mindenbájtjakét másik vektor tetszőleges bájtjából származhat, és a kiválasztást egy újabb vektor paraméterezi. Ez igen bonyolult adatkezelést tesz lehetővé egyetlen művelettel.

AGNU Compiler Collection(GCC) újabb változatai, azIBM VisualAgeés egyéb fordítók belső funkciókat biztosítanak az AltiVec utasítások közvetlen elérésére aCésC++nyelvű programokból. A GCC a 4. verziótól kezdve szintén tartalmaz auto-vektorizációs lehetőségeket, amelyek megkísérlik intelligensen létrehozni az Altivec által gyorsított binárisokat anélkül, hogy a programozónak közvetlenül a belső függvényeket kéne használnia. A natív vektor típusok használatát a "vector"típus-kulcsszó bevezetésével tették lehetővé, így pl. a"vector unsigned char foo;"C nyelvű programsor egy 128 bites, tizenhat 8 bites előjel nélküli karaktert tartalmazó"foo"nevű vektorváltozót deklarál. A vektoros típusokon az aritmetikai és bináris operátorok teljes készlete meghatározott, így a vektorváltozók szabályos C nyelvű kifejezésekkel kezelhetők. Léteznek még túlterhelt belső függvények, mint pl. a"vec_add",amelyek a megfelelő opkódot bocsátják ki a vektor elemeinek típusától függően, és kikényszerítik a nagyon erős típusellenőrzést. Ezzel ellentétben, az Intel által az IA-32 SIMD regiszterek számára meghatározott adattípusok csak a vektorregiszterek méretét deklarálják (128 vagy 64 bit), valamint csak a 128 bites regiszterek esetén még azt, hogy a regiszter az egész vagy lebegőpontos értékeket tartalmaz. A programozónak az éppen alkalmazott adattípushoz ki kell választania a megfelelő beépített függvényt, pl. két, nyolc 16 bites egészet tartalmazó vektor összeadása a"_mm_add_epi16(x,y)"kóddal írható.

A tervezés története

[szerkesztés]

Az AltiVec egy együttműködés keretében indított fejlesztési projekt eredménye, amelyet 1996 és 1998 között folytatott az Apple, IBM és a Motorola. Az Apple volt az AltiVec legfőbb vásárlója / felhasználója, egészen az Intel gyártmányú x86 alapú processzorokra való átállásig 2006-ban. A cég a multimédiás alkalmazások, pl. aQuickTimevagyiTunesgyorsítására használta az AltiVec egységet, és az AppleMac OS Xoperációs rendszerQuartz grafikai összeállítórétegében. Más cégek is használták az AltiVec lehetőségeit a képfeldolgozó programjaikban, ennek egyik példája azAdobe Photoshop.Elsőként a Motorola gyártott AltiVec kiterjesztésű processzorokat, a G4 processzorvonaltól kezdődően. Az AltiVec egyes beágyazott rendszerekbe is belekerült, a nagy teljesítményű digitális jelfeldolgozás céljából.

Az IBM következetesen kihagyta a VMX-et a koraiPOWER mikroprocesszoraiból,amelyeket szerverekben való felhasználásra szántak, ahol ez a kiterjesztés nem látszott túl hasznosnak. A 2007-ben bemutatottPOWER6mikroprocesszor már tartalmazza az AltiVec kiterjesztést. A megvalósítás hasonló a 970 és Cell processzorokban kiépített megoldáshoz. Az IBM utolsó asztali mikroprocesszora, aPowerPC 970(amelyet az Apple berkeiben "G5"-nek neveztek) szintén hardveresen implementálja az AltiVec kierjesztést, aPowerPC 7400-ban alkalmazott felépítéshez hasonlóan.

Az AltiVec aPower ISA v.2.03[1]specifikáció szabványos részegysége, a „Vektorprocesszor” fejezet írja le a vektor kategória részeként.

ACell Broadband Engine,amely többek között aPlayStation 3fő processzora, szintén támogatja az AltiVec kiterjesztést a PPU egységben (Power Processing ElementvagyPower Processing Unit;IBM tervezésű Power architektúrájú processzormag, a Cell processzor egyik fő része), a szinergikus feldolgozóelemek (SPU) utasításkészlet-architektúrájával együtt, amely fejlettebb, de felépítésében hasonló.

A Freescale az AltiVec egy továbbfejlesztett verzióját építette be ae6500alapúQorIQprocesszoraiba.

VMX128

[szerkesztés]

Az IBM továbbfejlesztette a VMX-et aXenonprocesszorokban (Xbox 360) való felhasználás céljából, és a feljavított változatot VMX128-nak nevezte el. A fejlesztések újabb, játék-célú rutinokat is magukban foglalnak; ezek a 3D-s grafika és a játék fizikájának gyorsítására szolgálnak,[2]ugyanakkor a vektorregiszterek számát is 128-ra növelték. A VMX128 nem teljesen kompatibilis a VMX / Altivec kiterjesztéssel, mivel jó néhány egész műveletet eltávolítottak, hogy helyet csináljanak a nagyobb regiszterfájl és további alkalmazás-specifikus műveletek számára.[3]

APower ISA v2.06specifikáció egy újabb,Vector-Scalar Extension,VSX elnevezésű kiterjesztést (kategóriát) vezetett be, amely vektor-skalár utasítástípussal bővíti a Power ISA SIMD feldolgozását. A kiterjesztésben a regiszterek számát 64-re növelték, a végrehajtás támogatja a szabványos IEEE-754 lebegőpontos típusokat mind a skalár, mind a vektoros számításokban, Az első Power ISA v2.06-ot implementáló Power architektúrájú processzor a 2010-ben megjelentPOWER7volt.

Hibák

[szerkesztés]

A C++ nyelvben az AltiVec támogatás elérésének szabványos módja kizárja aStandard Template Libraryvector<>osztálysablon használatát, és ez fordítva is így van, a "vector" fenntartott szóként való kezelése miatt, abban az esetben, mikor a fordítóprogram nem valósítja meg avectorszó környezetfüggő értelmezését. Fordítóprogram-specifikus elkerülő megoldásokkal azonban lehetséges a kettő kombinációja, például a GCC fordító esetén kiadható az#undef vectordirektíva avectorkulcsszó tulajdonságának megszüntetésére, ezután a GCC-specifikus__vectorhasználható helyette.

Implementációk

[szerkesztés]

A következő processzorok rendelkeznek AltiVec bővítménnyel, a VMX-et vagy VMX128-at is beleértve

Motorola/Freescale

[szerkesztés]

P.A. Semi

[szerkesztés]

Jegyzetek

[szerkesztés]
  1. abPower ISA v.2.03.Power.org.[2012. július 22-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2014. március 19.)
  2. The Microsoft Xbox 360 CPU story.IBM.[2008. január 20-i dátummal azeredetibőlarchiválva]. (Hozzáférés: 2014. március 19.)
  3. Using data-parallel SIMD architecture in video games and supercomputersArchiválva2012. február 8-idátummal aWayback Machine-ben IBM Research

Fordítás

[szerkesztés]

Ez a szócikk részben vagy egészben azAltiVeccímű angol Wikipédia-szócikkezen változatánakfordí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.

Források

[szerkesztés]

További információk

[szerkesztés]

Kapcsolódó szócikkek

[szerkesztés]