„SIMD” változatai közötti eltérés

[ellenőrzött változat][nem ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
a interwiki átalakítása
Mogery (vitalap | szerkesztései)
Készült a(z) „SIMD” oldal lefordításával
1. sor:
[[Fájl:SIMD2.svg|bélyegkép| Egyetlen utasítás, több adat]]
{{horror}}{{lektor}}{{nincs forrás}}
'''Single instruction, multiple data''' ('''SIMD''') a [[Párhuzamos számítástechnika|párhuzamos számítógépek]] egyik osztálya a [[Flynn-féle osztályozás]]<nowiki/>ban.  Több olyan feldolgozóelemmel rendelkező számítógépeket ír le, amelyek [[Párhuzamos számítástechnika|egyszerre]] több adatponton ugyanazt a műveletet hajtják végre. Az ilyen gépek kihasználják az [[Adatok párhuzamossága|adat-párhuzamosságát]], de nem a [[Egyidejű számítás|feladat-párhuzamosságot]]: vannak párhuzamos számítások, de csak egyetlen utasítás egy adott pillanatban. A SIMD különösen alkalmas olyan feladatokra, mint például a [[Digitális képfeldolgozás|digitális kép]] kontrasztjának vagy a [[Hangdigitalizálás|digitális hang]] hangerejének módosítása. A legtöbb modern [[Central processing unit|processzor]]<nowiki/>terv tartalmaz SIMD utasításokat a [[multimédia]] feladatok teljesítménye javítása érdekében. A SIMD nem tévesztendő össze a [[Egyetlen utasítás, több szál|SIMT]]-el, amely [[Szál (programozás)|szálakat]] használ.
[[Fájl:SIMD.svg|thumb|right|250px|A SIMD utasítások elméleti vázlata]]
A '''SIMD''' az angol ''single instruction, multiple data'' rövidítése; a párhuzamos számítógépek egy osztályát, illetve utasítások vagy [[utasításkészlet]]ek egy csoportját jelöli.
 
== Történelem ==
A SIMD utasítások lényege, hogy egy utasítás egy nagyobb adathalmazon végzi el ugyanazt a műveletet, pl. egész típusú adatok vektorán. A SIMD gépek az adatszintű párhuzamosságot használják ki.
A SIMD utasításokat először az [[ILLIAC IV]]-ben használták, amely 1966-ban készült el.
 
A SIMD volt az alapja az 1970-es évek eleji [[Vektorprocesszor|vektor szuperszámítógépeknek]], mint például a [[CDC STAR-100|CDC Star-100]] és a [[TI fejlett tudományos számítógép|Texas Instruments ASC]], amelyek egyetlen utasítással képesek működni egy adat-"vektoron". A vektorfeldolgozást [[Cray]] népszerűsítette, különösen az 1970-es és 1980-as években. A vektorfeldolgozó architektúrákat ma külön tekintik a SIMD számítógépektől, azon a tényen alapulva, hogy a vektoros számítógépek a vektorokat egyenként dolgozták fel a csővezetékes processzorokon keresztül (bár még mindig egyetlen utasítás alapján), míg a modern SIMD számítógépek a vektor minden elemét párhuzamosan dolgozzák fel. <ref>{{Hivatkozás/Könyv |last=Patterson |first=David A. |authorlink=David Patterson (computer scientist) |title=Computer Organization and Design: the Hardware/Software Interface |url=https://archive.org/details/computerorganiz000henn |edition=2nd |year=1998 |publisher=Morgan Kaufmann |isbn=155860491X |page=[https://archive.org/details/computerorganiz000henn/page/751 751]}}</ref>
Ezek az utasítások igen hatékonyak különféle digitális (audió, videó és egyéb szignál) jelfeldolgozási feladatoknál.
 
A modern SIMD számítógépek első korszakát [[Masszív párhuzamos feldolgozás|masszívan párhuzamosan feldolgozott]] stílusú [[Nagyszámítógép|szuperszámítógépek]] jellemezték, mint például a [[Gondolkodó gépek Corporation|Think-Machines]] [[Csatlakozó gép|CM-1 és CM-2]]. Ezeknek a számítógépeknek sok korlátozott funkcionalitású processzoruk volt, amelyek párhuzamosan működtek. Például a Think-Machines CM-2 65536 egybites processzora mindegyike ugyanazt az utasítást hajtja végre, lehetővé téve például 65536 bit logikai kombinációját egyszerre, egy [[Hiperkocka|hiperkockához]] csatlakoztatott hálózat vagy processzorral dedikált RAM használatával, operandusainak megtalálásához. A szuperszámítástechnika eltávolodott a SIMD-megközelítéstől, amikor az olyan gyakori processzorokon alapuló olcsó és skaláris [[MIMD]] megközelítések, mint az [[Intel i860|Intel i860 XP]] <ref>{{Cite web |url=http://www.cs.kent.edu/~walker/classes/pdc.f01/lectures/MIMD-1.pdf |title=MIMD1 - XP/S, CM-5}}</ref>, erőteljesebbé váltak, és a SIMD iránti érdeklődés alábbhagyott.
Az első SIMD típusú számítógépek a korai vektor-szuperszámítógépek voltak: az 1971-es [[CDC STAR-100]] és [[Texas Instruments ASC]] az 1970-es évek elején.
 
A SIMD processzorok jelenlegi korszaka az asztali számítógépek piacáról nőtt ki, nem pedig a szuperszámítógépek piacáról. Amint az asztali processzorok az 1990-es években eléggé hatékonyak lettek a valós idejű játék és audio/video feldolgozás támogatásához, nőtt a kereslet az ilyen típusú számítási teljesítmény iránt, és a mikroprocesszorok gyártói a SIMD-hez fordultak, hogy kielégítsék az igényeket. <ref name="conte">{{Cite conference|title=The long and winding road to high-performance image processing with MMX/SSE|year=2000}}</ref> A Hewlett-Packard 1994-ben bevezette a [[Multimédia gyorsulás eXfeszültségek|MAX]] utasításokat a [[PA-RISC]] 1.1 asztali számítógépekbe az MPEG dekódolás felgyorsítása érdekében. <ref>{{Hivatkozás/Könyv |last=Lee |first=R.B. |title=digest of papers Compcon '95. Technologies for the Information Superhighway |year=1995 |isbn=0-8186-7029-0 |doi=10.1109/CMPCON.1995.512384 |page=186–192 |chapter=Realtime MPEG video via software decompression on a PA-RISC processor}}</ref> A Sun Microsystems 1995-ben bevezette a SIMD egész számú utasításokat a "[[Vizuális utasításkészlet|VIS]]" utasításkészlet-kiterjesztésükbe, az [[UltraSPARC|UltraSPARC I]] mikroprocesszorukba. A MIPS követte példáját hasonló [[MDMX]] rendszerükkel.
== További információk ==
[[:de:Flynnsche Klassifikation#SIMD|''Single Instruction, Multiple Data'' a német Wikipédián]]
 
Az első széles körben telepített asztali SIMD az Intel [[MMX (utasításkészlet)|MMX]] kiterjesztése volt az [[x86]] architektúrára 1996-ban. Ez elindította a sokkal erősebb [[AltiVec]] rendszer bevezetését a [[Motorola, Inc.|Motorola]] [[PowerPC]] és az IBM [[Power Architektúra|POWER]] rendszereiben. Az Intel 1999-ben válaszolt a vadonatúj [[Streaming SIMD Extensions|SSE]] rendszer bevezetésével. Azóta számos kiterjesztés van a SIMD utasításkészletekhez mindkét architektúrához. <ref name="phiSurvey">{{Cite web |url=https://www.researchgate.net/publication/333384596 |title=A Survey on Evaluating and Optimizing Performance of Intel Xeon Phi |first=Sparsh |author=Mittal |date=May 2019}}</ref>
{{csonk-info}}
 
Mindezek a fejlesztések a valós idejű grafika támogatására irányultak, ezért két, három vagy négy dimenzióban történő feldolgozásra irányulnak, általában két és tizenhat szó közötti vektorhosszal, az adattípustól és az architektúrától függően. Amikor meg kell különböztetni az új SIMD architektúrákat a régiektől, akkor az újabb architektúrákat "rövid vektoros" architektúrának tekintik, mivel a korábbi SIMD és vektor szuperszámítógépek vektorhossza 64-64000 volt. A modern szuperszámítógép szinte mindig a MIMD számítógép, amelyek mindegyike (rövid vektorú) SIMD utasításokat hajt végre.
{{CPU-technológiák}}
 
== Előnyök ==
{{Portál|Informatika|i }}
Az az alkalmazás, amely kihasználhatja a SIMD előnyeit, olyan alkalmazás, ahol ugyanazt az értéket adják hozzá (vagy vonják ki) sok adatponthoz, ami sok [[Multimédia|multimédiás]] alkalmazásban általános művelet. Ilyen például a kép fényerejének megváltoztatása. A kép minden [[Képpont|képpontja]] a piros (R), zöld (G) és kék (B) színek fényerejének értékeiből áll. A fényerő megváltoztatásához az R, G és B értékeket beolvassák a memóriából, hozzáadnak (vagy kivonnak belőlük) egy értéket, és a kapott értékeket visszaírják a memóriába.
 
Egy SIMD processzorral két fejlesztés érhető el. Az egyik esetben az adatok blokkokban értendők, és egyszerre számos értéket lehet betölteni. Az "olvasd ki ezt a képpontot, most pedig a következő képpontot" utasítássorozat helyett a SIMD processzor egyetlen utasítással rendelkezik, amely gyakorlatilag azt mondja, hogy "n pixelt olvass ki" (ahol n olyan szám, amely tervenként változik). Különböző okokból ez sokkal kevesebb időt vehet igénybe, mint az egyes pixelek külön-külön történő lekérése, ami egy hagyományos CPU-kialakításban történik.
[[Kategória:Számítógéptípusok]]
 
További előny, hogy az utasítás az összes betöltött adaton működik egyetlen művelet alatt. Más szavakkal, ha a SIMD rendszer nyolc adatpont egyszerre történő feltöltésével működik, akkor az adatokra alkalmazott <code>add</code> művelet mind a nyolc értékre egyszerre fog bekövetkezni. Ez a párhuzamosság elkülönül a [[Szuperskalár|szuperskalár processzor]] által biztosított párhuzamosságtól; a nyolc értéket párhuzamosan dolgozzák fel még nem szuperkalár processzoron is, és egy szuperkalár processzor képes lehet több SIMD művelet párhuzamos végrehajtására.
 
== Hátrányok ==
 
* Nem minden algoritmus könnyen vektorizálható. Például egy flow-control alapú feladat, mint a kód [[Elemző (informatika)|elemzés]] nem könnyen szerez előnyt a SIMD használatával; elméletileg azonban lehetséges az összehasonlítások és a ''"kötegelt áramlás"'' vektorizálása a gyorsítótár maximális optimalizálása érdekében, bár ez a technika több közbenső állapotot igényel.
* A SIMD nagy regiszterfájlokat igényel, amelyek növelik az energiafogyasztást és a szükséges chipterületet.
* Jelenleg egy algoritmus SIMD utasításokkal történő megvalósítása általában emberi munkát igényel; a legtöbb fordító nem generál SIMD utasításokat például egy tipikus [[C (programozási nyelv)|C]] programból. Az [[automatikus vektorizálás]] a fordítókban a számítástechnika kutatásának egyik aktív területe.
* Bizonyos SIMD utasításkészletekkel történő programozás számos alacsony szintű kihívást jelenthet.
*# A SIMD korlátozhatja az adatstruktúrák igazítását; egy adott architektúrát ismerő programozók erre lehet, hogy nem számítanak.
*# Az adatok begyűjtése a SIMD regiszterekbe és szétszórása a megfelelő rendeltetési helyekre bonyolult (néha permutációs műveleteket igényel) és nem hatékony.
*# Bizonyos utasítások, például forgatás vagy háromoperandusos összeadás, nem állnak rendelkezésre egyes SIMD utasításkészletekben.
*# Az utasításkészletek architektúra-specifikusak: egyes processzorokból hiányoznak a SIMD utasítások, ezért a programozóknak nem vektorizált megvalósításokat (vagy különböző vektorizált megvalósításokat) kell biztosítaniuk számukra.
*# A különböző architektúrák különböző regiszterméreteket (pl. 64, 128, 256 és 512 bit) és utasításkészleteket biztosítanak, ami azt jelenti, hogy a programozóknak többféle vektorizált kódot kell megvalósítaniuk, hogy optimálisan működjenek bármely adott processzoron. Ezenkívül a lehetséges SIMD utasításkészlet minden új regisztermérettel növekszik.
*# A korai [[MMX (utasításkészlet)|MMX]] utasításkészlet megosztott egy regiszter fájlt a lebegőpontos veremmel, ami lassúságot okozott a lebegőpontos és az MMX kód keverésekor. Az [[SSE2]] azonban ezt kijavítja.
 
Az 1. és 5. probléma orvoslására a [[RISC-V]] vektorkiterjesztése és az ARM [[Skálázható vektor kiterjesztés|skálázható vektorbővítménye]] alternatív megközelítést alkalmaznak: ahelyett, hogy az alregiszterszintű részleteket a programozó elé tárnák, az utasításkészlet néhány "vektorregiszterként" vonja ki őket, amelyek ugyanazt a interfészt használják az összes CPU-n ezzel az utasításkészlettel. A hardver kezeli az összes igazítási problémát. A különböző vektorméretű gépek képesek ugyanazt a kódot futtatni. <ref>{{Cite web |author=Patterson |first=David |title=SIMD Instructions Considered Harmful |url=https://www.sigarch.org/simd-instructions-considered-harmful/ |work=SIGARCH |date=18 September 2017}}</ref> Az LLVM ezt vscale-nek nevezi.
 
== Kronológia ==
Példák a SIMD szuperszámítógépekre (a [[Vektorprocesszor|vektorprocesszorokat]] kihagyva):
 
* [[ILLIAC IV]], c. 1974
* [[ICL elosztott tömb processzor|ICL Distributed Array Process]] (DAP; elosztott tömb processzor), c. 1974
* Burroughs Scientific Processor (Burroughs Tudományos Processzor), c. 1976
* [[Geometriai-számtani párhuzamos processzor|Geometric Arithmetic Parallel Processor]] (Geometriai-Aritmetikai Párhuzamos Processzor), [[Martin Marietta|Martin Mariettától]], 1981-től kezdve a [[Lockheed Martin|Lockheed Martinnál]], majd a [http://www.teranex.com Teranexnél] és a [[Silicon Optix]]-nál folytatta.
* [[Massively Parallel Processor]] (MPP; masszívan párhuzamos processzor), a [[NASA]] / [[Goddard Űrközpont|Goddard Űrközponttól]], c. 1983-1991
* [[Csatlakozó gép|Connection Machine]], 1. és 2. modell (CM-1 és CM-2), a [[Gondolkodó gépek Corporation|Thinking Machines Corporation-től]], c. 1985
* [[MasPar]] MP-1 és MP-2, c. 1987-1996
* Zephyr DC számítógép a Wavetracertől, c. 1991
* [[Xplor (Pyxsys)|Xplor]], a [[Pyxsys, Inc.]]-től, c. 2001.
 
== Hardver ==
A kis méretű (64 vagy 128 bites) SIMD az 1990-es évek elején népszerűvé vált az általános célú processzorokban, és 1997-ig és később, az [[DEC Alpha|Alpha]] Motion Video Instructions (MVI) alkalmazásával folytatódott. A SIMD utasítások bizonyos mértékben megtalálhatók a legtöbb processzoron ([[IBM]] [[AltiVec]] és [[Jelfeldolgozó motor|SPE]] for [[PowerPC]], a [[Hewlett-Packard|HP]] [[PA-RISC]] [[Multimédia gyorsulás eXfeszültségek|Multimedia Acceleration eXtensions]] (MAX), az [[Intel]] MMX és iwMMXt, [[Streaming SIMD Extensions|SSE]], [[SSE2]], [[SSE3]] [[SSSE3]] és [[SSE4|SSE4.x]], az [[Advanced Micro Devices|AMD]] [[3DNow!]], az [[ARC (processzor)|ARC]] ARC Video alrendszere, [[SPARC]] [[Vizuális utasításkészlet|VIS]] és VIS2, a [[Sun Microsystems|Sun]] [[MAJC]], az [[ARM architektúra|ARM]] [[ARM architektúra|Neon]] technológiája, [[MIPS architektúra|MIPS]] [[MDMX]] (MaDMaX), [[MIPS-3D]]). Az IBM, a Sony, a Toshiba által közösen fejlesztett [[Cell (mikroprocesszor)|Cell Processor]] [[Cell (mikroprocesszor)|SPU]] utasításkészlete erősen SIMD alapú. [[Philips|A Philips]], jelenleg [[NXP félvezetők|NXP]], számos [[Xetal]] nevű SIMD processzort fejlesztett ki. A Xetal 320 16 bites processzorelemmel rendelkezik, amelyeket kifejezetten a látási feladatokhoz terveztek.
 
A modern [[Graphics processing unit|grafikus processzorok]] (GPU-k) gyakran széles SIMD-megvalósítások, amelyek egyszerre 128 vagy 256 biten képesek elágazásokra, betöltésekre és tárolásra.
 
Az Intel legújabb [[AVX-512]] SIMD utasításai mostantól 512 bit adatot dolgoznak fel egyszerre.
 
== Szoftver ==
[[Fájl:Non-SIMD_cpu_diagram1.svg|bélyegkép|307x307px| Négy 8 bites szám nem-SIMD háromszorozása. A processzor egy 8 bites számot tölt be az R1-be, megszorozza az R2-vel, majd az R3-ból visszamenti a választ a RAM-ba. Ez a folyamat megismétlődik minden számnál.]]
[[Fájl:SIMD_cpu_diagram1.svg|jobbra|bélyegkép|307x307px| Négy 8 bites szám SIMD háromszorozása. A CPU egyszerre 4 számot tölt be, mindet egy SIMD-szorzásban megszorozza, és mindet egyszerre menti vissza a RAM-ba. Elméletileg a sebesség megszorozható 4-gyel.]]
A SIMD utasításokat széles körben használják a három dimenziós grafika feldolgozására, bár a beágyazott SIMD-el ellátott modern [[Videókártya|grafikus kártyák]] nagyrészt átvették ezt a feladatot a CPU-tól. Bizonyos rendszerek permutációs funkciókat is tartalmaznak, amelyek újracsomagolják az elemeket a vektorok belsejébe, ami különösen hasznos az adatfeldolgozáshoz és a tömörítéshez. A kriptográfiában is használják őket. <ref>[http://marc.info/?l=openssl-dev&m=108530261323715&w=2 RE: SSE2 speed], showing how SSE2 is used to implement SHA hash algorithms</ref> <ref>[http://cr.yp.to/snuffle.html#speed Salsa20 speed; Salsa20 software], showing a stream cipher implemented using SSE2</ref> <ref>[http://markmail.org/message/tygo74tyjagwwnp4 Subject: up to 1.4x RSA throughput using SSE2], showing RSA implemented using a non-SIMD SSE2 integer multiply instruction.</ref> Az általános célú számítások a grafikus kártyán ([[GPGPU]]) gyakoribbá válása a SIMD szélesebb körű alkalmazásához vezethet a jövőben.
 
A SIMD rendszerek bevezetése a [[Személyi számítógép|személyi számítógépes]] szoftverekben eleinte lassú volt számos probléma miatt. Az egyik az volt, hogy a korai SIMD utasításkészletek közül sokan lassították a rendszer teljes teljesítményét a meglévő lebegőpontos regiszterek újrafelhasználása miatt. Más rendszerek, például az [[MMX (utasításkészlet)|MMX]] és a [[3DNow!]], támogatást kínált olyan adattípusokhoz, amelyek nem voltak hasznosak a széles közönség számára, és drága környezetváltási utasításokkal rendelkeztek az [[FPU]] és az MMX [[Regiszter (számítástechnika)|regiszterek]] közötti váltáshoz. A fordítóknak gyakran nem támogatták a SIMD-et, ezért a programozók csak [[Assembly]]-ben tudtak SIMD műveleteket hasznáni.
 
Az [[X86|x86-os]] SIMD lassan indult. A [[3DNow!]] és [[Streaming SIMD Extensions|SSE]] bevezetésével kissé megzavarodtak a dolgokat, de ma úgy tűnik, hogy a rendszer rendeződött (miután az AMD támogatni kezdte az SSE-t), és az újabb fordítók használatának több SIMD-kompatibilis szoftvert kell eredményeznie. Az Intel és az AMD most is kínál optimalizált matematikai könyvtárakat, amelyek SIMD utasításokat használnak, és nyílt forráskódú alternatívák jelentek meg, mint például a [[libSIMD]], a [[SIMDx86]] és a [[ALVÁS|SLEEF]] (lásd még a [[libm]]-et). <ref>{{Cite web |title=SIMD library math functions |url=https://stackoverflow.com/a/36637424 |work=Stack Overflow |accessdate=16 January 2020}}</ref>
 
Az [[Apple Inc.|Apple Computer]] valamivel több sikert ért el, annak ellenére, hogy később léptek be a SIMD piacra, mint a többi. Az [[AltiVec]] gazdag rendszert kínált, és a [[Motorola, Inc.|Motorola]], az [[IBM]] és a [[GNU]] egyre kifinomultabb fordítóinak segítségével programozhatóvá vált, ezért Assembly programozásra ritkán volt szükség. Ezenkívül számos olyan rendszert, amely számára előnyös lenne a SIMD, maga az Apple készítette, például az [[iTunes]] és a [[QuickTime]]. 2006-ban azonban az Apple számítógépei az Intel x86 processzorokhoz kerültek. Az Apple [[Alkalmazásprogramozási felület|API]]-jait és [[Integrált fejlesztői környezet|fejlesztői eszközeit]] ([[Xcode|XCode]]) úgy módosították, hogy támogassák az [[SSE2]]-t és [[SSE3]]-at, valamint az AltiVec-et. Az Apple volt a PowerPC chipek legnagyobb vásárlója az IBM-től és a [[Freescale Semiconductor]]-tól, és annak ellenére, hogy elhagyták a platformot, az AltiVec további fejlesztését a Freescale és az IBM számos [[PowerPC]] és [[Teljesítmény ISA|Power ISA]] terv folytatja.
 
''A SIMD a regiszterben'' ([[SWAR]]) egy olyan technikál és trükkök sorozata, amelyet a SIMD általános célú regiszterekben történő végrehajtására használnak olyan hardvereken, amelyek nem nyújtanak közvetlen támogatást a SIMD utasításainak. Ez felhasználható bizonyos algoritmusokban a párhuzamosság kihasználására olyan hardvereken is, amelyek nem támogatják közvetlenül a SIMD-et.
 
Gyakran előfordul, hogy a SIMD utasításkészletek kiadói saját C vagy C++ nyelvű kiterjesztéseket készítenek [[Belső funkció|belső funkciókkal]] vagy speciális adattípusokkal, amelyek garantálják a vektorkód generálását. Az Intel, az AltiVec és az ARM NEON olyan kiterjesztéseket kínál, amelyeket a fordítók széles körben alkalmaznak a processzoraikat megcélozva. (A bonyolultabb műveletek a vektor matematikai könyvtárak feladata.)
 
A [[GCC (informatika)|GNU C fordító]] egy lépéssel előbbre hozza a kiterjesztéseket, univerzális interfésszé elvonatkoztatva őket, amelyek bármely platformon használhatók, biztosítva a SIMD adattípusok definiálását. <ref>{{Cite web |title=Vector Extensions |url=https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html |work=Using the GNU Compiler Collection (GCC) |accessdate=16 January 2020}}</ref> Az [[Low Level Virtual Machine|LLVM]] Clang fordító szintén implementálja ezt a funkciót, az IR-ben definiált hasonló interfésszel. <ref>{{Cite web |title=Clang Language Extensions |url=https://clang.llvm.org/docs/LanguageExtensions.html |work=Clang 11 documentation |accessdate=16 January 2020}}</ref> A [[Rust (programozási nyelv)|Rust]] pack_simd csomagja ezt a interfészt használja, és a [[Swift (programozási nyelv)|Swift]] 2.0+ is.
 
A C ++ rendelkezik egy interfésszel, amely hasonlóan működik, mint a GCC kiterjesztése. Úgy tűnik, hogy az LLVM libcxx implementálja. A GCC és a libstdc++ esetén elérhető egy csomagoló könyvtár, amely a GCC kiterjesztés tetejére épít. <ref>{{Cite web |title=VcDevel/std-simd |url=https://github.com/VcDevel/std-simd |publisher=VcDevel |date=6 August 2020}}</ref>
 
A [[Microsoft]] hozzáadta a SIMD-t a [[.NET keretrendszer|.NET]]-hez a RyuJIT-ben. <ref>{{Cite web |url=http://blogs.msdn.com/b/dotnet/archive/2013/09/30/ryujit-the-next-generation-jit-compiler.aspx |title=RyuJIT: The next-generation JIT compiler for .NET}}</ref> A NuGeten elérhető System.Numerics.Vector csomag SIMD adattípusokat valósít meg. <ref>{{Cite web |url=http://blogs.msdn.com/b/dotnet/archive/2014/04/07/the-jit-finally-proposed-jit-and-simd-are-getting-married.aspx |title=The JIT finally proposed. JIT and SIMD are getting married}}</ref>
 
A SIMD adattípus megadása helyett a fordítóknak is fel lehet hívni a figyelmét, hogy egyes hurkok automatikusan vektorizálódjanak. Ez nem annyira rugalmas, mint a SIMD-változók közvetlen manipulálása, de könnyebben használható. Az [[OpenMP]] 4.0+ az alábbi tippet tartalmazza:<ref>{{Cite web |title=SIMD Directives |url=https://www.openmp.org/spec-html/5.0/openmpsu42.html |work=www.openmp.org}}</ref><syntaxhighlight>
#pragma omp simd
</syntaxhighlight>
 
 
A Cilk hasonló tulajdonsággal rendelkezik: <ref>{{Cite web |title=Tutorial pragma simd |url=https://www.cilkplus.org/tutorial-pragma-simd |work=CilkPlus |date=18 July 2012}}</ref> <syntaxhighlight>
#pragma simd
</syntaxhighlight>
 
 
A GCC-nek és a Clang-nak is vannak saját privát pragmái a hurkok vektorizálhatóvá tételéhez, de mindhármat elavulttá tette az OpenMP.
 
=== Több-verziós SIMD ===
A fogyasztói szoftverek várhatóan általában több CPU-generációval működnek, ami korlátozhatja a programozó azon képességét, hogy új SIMD utasításokat használjon a program számítási teljesítményének javítására. A megoldás az, hogy ugyanannak a kódnak több verzióját tartalmazza, amely vagy régebbi, vagy újabb SIMD technológiákat használ, és kiválaszt egyet, amely a legjobban illeszkedik a felhasználó processzorához futás közben ([[Dinamikus feladás|dinamikus diszpécser]]). A megoldásoknak két fő tábora van:
 
* Több funkció verzió: a program vagy egy könyvtár [[Függvény (programozás)|szubrutinját]] sok utasításkészlet-kiterjesztéshez lemásolják és összeállítják, és a program eldönti, hogy melyiket használja futás közben.
* Több könyvtár verzió: a teljes [[programkönyvtár]] sok utasításkészlet-kiterjesztéshez duplikálva van, és az operációs rendszer vagy a program eldönti, hogy melyiket töltse be futás közben.
 
Az előbbi megoldást az Intel C ++ Compiler, a [[GCC (informatika)|GNU Compiler Collection]] támogatja a GCC 6 óta, a Clang pedig a 7-es óta. <ref>{{Cite web |title=Transparent use of library packages optimized for Intel® architecture |url=https://clearlinux.org/news-blogs/transparent-use-library-packages-optimized-intel-architecture |work=Clear Linux* Project |accessdate=8 September 2019 |language=en}}</ref>
 
== SIMD az interneten ==
2013-ban John McCutchan bejelentette, hogy nagy teljesítményű interfészt hozott létre a SIMD utasításkészleteihez a [[Dart (programozási nyelv)|Dart]] programozási nyelv számára, és ezzel először hozta meg a SIMD előnyeit a webes programokban. Az interfész két típusból áll: <ref>{{Cite web |url=https://www.dartlang.org/slides/2013/02/Bringing-SIMD-to-the-Web-via-Dart.pdf |title=Bringing SIMD to the web via Dart |author=John McCutchan |archiveurl=https://web.archive.org/web/20131203011540/https://www.dartlang.org/slides/2013/02/Bringing-SIMD-to-the-Web-via-Dart.pdf |archivedate=2013-12-03}}</ref>
 
* Float32x4, 4 egypontos lebegőpontos érték.
* Int32x4, 4 32 bites egész szám.
 
Az ilyen típusú példányok változhatatlanok, és az optimalizált kódban közvetlenül a SIMD regiszterekhez vannak hozzárendelve. A Dart-ban kifejezett műveleteket általában egyetlen utasításba állítják össze. Ez hasonló a C és a C++ működéséhez. A 4×4-es [[mátrixszorzás]], a [[Transzformáció (matematika)|3D-s csúcstranszformáció]] és a [[Mandelbrot-halmaz]] vizualizációjának benchmarkjai közel 400%-os gyorsulást mutatnak a Dartban írt skalárkódhoz képest.
 
McCutchan Dart-on való munkája, amit most SIMD.js-nek neveznek, már implementálta az [[ECMAScript]] és az Intel bejelentette, hogy implementálják McCutchan specifikációját a [[V8 JavaScript-motor|V8]]-ba és [[SpiderMonkey (JavaScript motor)|SpiderMonkey]]-ba.<ref>{{Cite web |title=SIMD in JavaScript |url=https://01.org/node/1495 |work=01.org |date=8 May 2014}}</ref> Azonban 2017-re a SIMD.js-t kivették az ECMAScript szabvánból annak érdekében, hogy hasonló interfészt lehessen készíteni a [[WebAssembly|WebAssemblyben]].<ref>{{Cite web |title=tc39/ecmascript_simd: SIMD numeric type for EcmaScript. |url=https://github.com/tc39/ecmascript_simd/ |work=GitHub |publisher=Ecma TC39 |accessdate=8 September 2019 |date=22 August 2019}}</ref> 2020 augusztusától a WebAssembly interfész befejezetlen marad, de a hordozható, 128 bites SIMD-funkció sok motorban már látott némi felhasználást.
 
Az Emscripten, a Mozilla C/C++-JavaScript fordítója kiterjesztésekkel lehetővé teszi a C++ programok összeállítását, amelyek a GCC stílusú vektorkódot használják a JavaScript SIMD API-jához, ami egyenértékű gyorsulásokat eredményez a skalár kódhoz képest.<ref>{{Cite journal|title=SIMD in JavaScript via C++ and Emscripten|first=Peter|author=Jensen|year=2015|format=PDF|url=https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx3cG12cDIwMTV8Z3g6NTkzYWE2OGNlNDAyMTRjOQ}}</ref> Támogatja a WebAssembly 128 bites SIMD javaslatát is.<ref>{{Cite web |title=Porting SIMD code targeting WebAssembly |url=https://emscripten.org/docs/porting/simd.html |work=Emscripten 1.40.1 documentation}}</ref>
 
== Kereskedelmi alkalmazások ==
Bár a SIMD-processzorok számára általában nehéz fenntartható kereskedelmi alkalmazásokat találni, az egyik sikert a [[Geometriai-számtani párhuzamos processzor|GAPP]] érte el, amelyet a [[Lockheed Martin]] fejlesztett ki, és a [[Teranex]] szállította a kereskedelmi szektorba. A GAPP nemrégi inkarnációi hatékony eszközzé váltak a valós idejű [[Digitális képfeldolgozás|videófeldolgozó]] alkalmazásokban, például a különböző videostandardok és képsebességek közötti átalakításban ([[NTSC]]-ből [[PAL]]-ba / [[PAL]]-ból [[NTSC]]-be / NTSC-ből [[HDTV]] formátumokba / stb.), [[Deinterlacing|váltottsormentesítésben]], [[Zajcsökkentés|képzaj-csökkentésben]], [[Adattömörítés|videotömörítésben]] és képjavításban.
 
A SIMD számára mindenütt elérhetőbb alkalmazás található a [[Videójáték|videojátékokban]] található: 1998 óta szinte minden modern [[Videójáték-konzol|videojáték-konzol]] beépített egy SIMD processzort valahova az architektúrájába. A [[PlayStation 2]] szokatlan volt abban az értelemben, hogy egyik vektor-lebegőpontos egysége önálló [[Digitális jelprocesszor|DSP]]-ként működhet a saját utasításfolyamát végrehajtva, vagy társprocesszorként, amelyet a szokásos CPU utasítások vezérelnek. A 3D grafikus alkalmazások általában jól alkalmazzák a SIMD-feldolgozást, mivel nagymértékben támaszkodnak a 4-dimenziós vektorokkal végzett műveletekre. [[Microsoft|A Microsoft]] [[DirectX|Direct3D 9.0]] futás közben processzor-specifikus implementációkat választ a saját matematikai műveletei közül, beleértve a SIMD-képes utasítások használatát is.
 
A vektorfeldolgozás egyik legutóbbi processzora az [[IBM]] által a [[Toshiba]] és a [[Sony Corporation|Sony]] együttműködésével kifejlesztett [[Cell (mikroprocesszor)|Cell]]. Számos SIMD processzort használ (egy [[Non-uniform memory access|NUMA]] architektúrát, mindegyik önálló [[Gyorsítótár|helyi tárolóval rendelkezik]], és egy általános célú processzor vezérli), és a 3D és videofeldolgozó alkalmazások által megkövetelt hatalmas adatkészletekhez igazodik. A hagyományos ISA-któl abban különbözik, hogy az alapoktól kezdve SIMD, külön skaláris regiszterek nélkül.
 
A Ziilabs egy olyan SIMD típusú processzort gyártott, amely mobil eszközökön, például médialejátszókon és mobiltelefonokon használható. <ref>{{Cite web |url=https://secure.ziilabs.com/products/processors/zms05.aspx |title=ZiiLABS ZMS-05 ARM 9 Media Processor |work=ZiiLabs |accessdate=2010-05-24 |archiveurl=https://web.archive.org/web/20110718153716/https://secure.ziilabs.com/products/processors/zms05.aspx |archivedate=2011-07-18}}</ref>
 
Nagyobb méretű kereskedelmi SIMD processzorok a ClearSpeed Technology, Ltd. és a Stream Processors, Inc. cégtől kaphatók. A [[ClearSpeed]] CSX600 (2004) 96 magja két-két precíziós lebegőpontos egységgel rendelkezik, míg a CSX700 (2008) 192. A Stream Processors-t [[Bill Dally]] számítógép-építész vezeti. Storm-1 processzoruk (2007) 80 SIMD magot tartalmaz, amelyeket egy MIPS CPU vezérel.
 
== Lásd még ==
 
* [[Streaming SIMD Extensions]], [[SSE2]], [[SSE3]]
* [[Utasításkészlet|utasításkészlet architektúra]]
 
== Hivatkozások ==
{{Reflist}}
[[Kategória:Párhuzamos számítástechnika]]
[[Kategória:Digitális jelfeldolgozás]]
[[Kategória:Számítógéptípusok]]
[[Kategória:Lapok ellenőrizetlen fordításokkal]]
A lap eredeti címe: „https://hu.wikipedia.org/wiki/SIMD