MMX (utasításkészlet)
Az MMX egy az Intel által tervezett SIMD (egy művelet, több adat) osztályú utasításkészlet-kiterjesztés az x86 architektúrához, amelyet 1997. január 8-án vezettek be[1][2] a Pentium P5 mikroarchitektúrájú mikroprocesszorok sorozatában, „Pentium MMX technológiával” piaci név alatt.[3] Az Intel i860 processzorban bevezetett hasonló egységből alakult ki,[4] amelyet még korábban az Intel i750 videó- és képfeldolgozó processzorban alkalmaztak. Az MMX egy opcionális mikroprocesszor-kiterjesztés, amelyet 1997 óta az Intel és más gyártók is támogatnak az IA-32-es processzorokban.
Az Intel nagy reklámkampánnyal vezette be az utasításkészlet-kiterjesztést, hangsúlyozva a teljesítményjavulást és előnyeit a videófeldolgozás, multimédia és a 3D-s játékok terén.[5]
Az MMX-et megjelenését követően számos kiegészítéssel bővítették az Intel és más cégek, ilyenek például a 3DNow!, Streaming SIMD Extensions (SSE), és az Advanced Vector Extensions (AVX) kiterjesztések folyamatban lévő revíziói is.
Áttekintés
[szerkesztés]Elnevezése
[szerkesztés]Az MMX hivatalosan egy jelentés nélküli mozaikszó,[6] amely az Intel védjegye;[7] különböző nem hivatalos magyarázatok szerint a rövidítés az alábbiakat jelenti:
- „MultiMedia eXtension” – „multimédia kiterjesztés”,[1]
- „Multiple Math eXtension” – „többszörös matematikai kiterjesztés”, vagy
- „Matrix Math eXtension” – „mátrixmatematikai kiterjesztés”.
1997-ben az Intel pert indított az AMD és a Cyrix Corp. ellen az MMX védjeggyel való visszaélés miatt. Az AMD és az Intel végül megállapodott, miszerint az AMD elismerte, hogy az „MMX” az Intel tulajdonában lévő védjegy, az Intel pedig jogot adott az AMD-nek az MMX védjegy használatára technológiai névként, de processzornévként nem.[8][9]
Technika
[szerkesztés]Az MMX nyolc processzorregisztert definiál, MM0-tól MM7-ig, és a rajtuk végezhető műveleteket. Mindegyik regiszter 64 bit széles, és 64 bites egész számok vagy több kisebb egész (fixpontos) szám „csomagolt” formátumban történő tárolására használható: egy utasítás így egyszerre alkalmazható a regiszterekben elhelyezkedő két 32 bites, vagy négy 16 bites, vagy nyolc 8 bites egész számra.[10]
Az MMX csak fixpontos (integer) műveleteket biztosít. Amikor eredetileg kifejlesztették, az Intel i860-os processzorban, mind a 2D-s, mind a 3D-s számításokban fixpontos értékeket használtak, ám ahogy az ilyen számítások legnagyobb részét végző grafikus kártyák egyre általánosabbá váltak, a CPU-ban lévő fixpontos SIMD gyakorlatilag feleslegessé vált a grafikus alkalmazások számára. Alternatív megoldásként az MMX szaturációs aritmetikai műveleteket is tud végezni, ami jelentősen felgyorsíthatja a digitális jelfeldolgozó alkalmazásokat.
A kontextusváltási mechanizmusokkal kapcsolatos kompatibilitási problémák elkerülése érdekében a létező operációs rendszerekben, az MMX regiszterek a meglévő x87 lebegőpontos egység (FPU) regisztereinek álnevei, amelyeket a kontextusváltás eleve elment és visszaállít. A verem-szervezésű x87 regiszterekkel ellentétben az MMX regiszterek mindegyike közvetlenül címezhető (random access).
Nyilvánvaló, hogy a lebegőpontos vermet érintő minden művelet hatással lehet az MMX regiszterekre is és viszont, így ezek az álnevek (aliasing) megnehezítik a lebegőpontos és SIMD műveletek használatát ugyanazon programon belül.[11] A teljesítmény maximalizálása érdekében, a szoftverek gyakran kizárólag az egyik vagy másik üzemmódban használják a processzort, a lehető leghosszabb ideig késleltetve a köztük lévő viszonylag lassú átváltást.
Minden 64 bites MMX regiszter egy 80 bites x87 regiszter mantissza részének felel meg. Az x87-es regiszterek felső 16 bitje így kihasználatlanul marad az MMX-ben; ez a két bájtnyi rész minden regiszterben az FFFF hexadecimális van állítva az MMX üzemmódban, ezáltal az x87-es regiszterekben elhelyezkedő adat az x87-es értelmezése szerint „nem szám” (Not a Number, NaN) típusúvá, vagy a lebegőpontos ábrázolás szerinti végtelenné válik. A szoftver ez alapján eldöntheti, hogy egy adott regiszter tartalmát lebegőpontos vagy SIMD adatként kezelje.
Szoftvertámogatás
[szerkesztés]Az MMX szoftvertámogatása lassan fejlődött.[5] Az Intel C fordítója és a kapcsolódó fejlesztőeszközök intrinsic támogatást kaptak az MMX utasítások meghívásához (ahol az assembly nyelvű megvalósítások függvényeken keresztül hívhatók) és az Intel kiadta az általános vektorizált algoritmusok könyvtárait az MMX használatával. Mind az Intel, mind a Metrowerks megkísérelte megvalósítani fordítóprogramjaiban az automatikus vektorizálást, de a C programnyelv műveletei rosszul illeszkednek az MMX utasításkészlethez és az egyedi algoritmusokat még 2000-ben is jellemzően assembly nyelven kellett írni.[11]
Utódai
[szerkesztés]Az AMD, egy konkurens x86 mikroprocesszor-gyártó, létrehozta saját 3DNow! nevű kiterjesztését, ami az Intel MMX utasításkészletének továbbfejlesztett változata. A 3DNow! technológia első implementációja 21 új utasítást tartalmaz, amelyek támogatják a lebegőpontos SIMD műveleteket. A 3DNow! adatformátum csomagolt, egyszeres pontosságú lebegőpontos. A 3DNow! utasításkészlet tartalmaz továbbá SIMD fixpontos műveletekre, adatbetöltésre és gyorsabb MMX-ből lebegőpontosra konvertálásra szolgáló műveleteket. A 3DNow! később számos további kiterjesztést kapott.
Az MMX-et követően az Intel következő nagyobb x86-os bővítménye a Streaming SIMD Extensions (SSE) volt, amelyet a Pentium III családdal vezettek be 1999-ben,[12][13] nagyjából egy évvel az AMD 3DNow! bemutatása után.
Az SSE az MMX alapvető hiányosságait orvosolta (főleg azt, hogy nem képes a fixpontos SIMD és a lebegőpontos műveletek keverésére) egy új, 128 bites regiszterfájl létrehozásával (XMM0–XMM7) és a hozzá való új SIMD utasításokkal. A 3DNow!-hoz hasonlóan, az SSE kizárólag az egyszeres pontosságú lebegőpontos (32 bites) műveletekre összpontosít; a fixpontos SIMD műveleteket továbbra is az MMX regiszterek és utasításkészlet használatával hajtja végre. Az új XMM regiszterfájl azonban már lehetővé tette az SSE SIMD műveletek és az MMX vagy x87 FPU műveletek üzemmódváltás nélküli vegyes használatát.
A Pentium 4-gyel bevezetett Streaming SIMD Extensions 2 (SSE2) tovább bővítette az x86 SIMD utasításkészletet újabb (8/16/32 bites) fixpontos formátumokkal és kétszeres pontosságú lebegőpontos adatok támogatásával az XMM regiszterfájlban. Az SSE2 emellett lehetővé tette az MMX műveleti kódok számára az XMM regiszteroperandusok használatát, amelyeket a későbbi SSE-változatok még szélesebb YMM és ZMM regiszterekre is kiterjesztettek.
MMX beágyazott alkalmazásokban
[szerkesztés]Az Intel és a Marvell Technology Group XScale ARM alapú mikroprocesszormagjai a PXA270-es típustól kezdve szintén tartalmaznak egy Intel Wireless MMX Technology (iwMMXt) elnevezésű SIMD utasításkészlet-kiterjesztést, melynek funkciói hasonlóak az IA-32 MMX kiterjesztéshez.[14][15][16] Ez 64 bites egész számokon végezhető aritmetikai és logikai műveleteket biztosít, amelyeknél a szoftverből választható, hogy a processzor milyen műveletet hajtson végre: két 32 bites, négy 16 bites vagy nyolc 8 bites műveletet egy utasításban. A kiterjesztés 16 darab 64 bites adatregisztert és nyolc 32 bites vezérlőregisztert tartalmaz. Minden regiszterhez az ARM architektúra szabványos koprocesszor-leképezési mechanizmusán keresztül lehet hozzáférni. Az iwMMXt a 0. és 1. számú koprocesszorok helyét foglalja el, és néhány műveleti kódja (opkódja) ütközik a korábbi lebegőpontos kiterjesztés, az FPA kódjaival.[forrás?]
A Marvell ARM processzorok későbbi verziói a Wireless MMX (WMMX) és a Wireless MMX2 (WMMX2) műveleti kódjait egyaránt támogatják.
Jegyzetek
[szerkesztés]- ↑ a b „Makers Unveil PCs With Intel's MMX Chip”, The New York Times, 1997. január 9.. [2019. január 13-i dátummal az eredetiből archiválva] (Hozzáférés: 2019. január 13.) (angol nyelvű) „Intel's new multimedia extension technology, called MMX, ...”
- ↑ „Intel to unveil faster Pentium chip”, The Washington Post , 1997. január 8.. [2019. január 14-i dátummal az eredetiből archiválva] (Hozzáférés: 2019. január 13.) (angol nyelvű)
- ↑ Embedded Pentium Processors with MMX Technology (angol nyelven). Intel . [2010. augusztus 11-i dátummal az eredetiből archiválva]. (Hozzáférés: 2007. július 28.)
- ↑ (1997. december 7.) „MMX Technology Architecture Overview” (angol nyelven). Intel Technology Journal 1 (3). (Hozzáférés: 2015. október 29.)
- ↑ a b Calem, Robert E.. „Intel's MMX: The Technology Behind the Hoopla”, The New York Times, 1997. január 24.. [2019. január 13-i dátummal az eredetiből archiválva] (Hozzáférés: 2019. január 13.) (angol nyelvű)
- ↑ Tanaka, Jennifer. A new chip off the block (angol nyelven) (1997. február 16.) „the name, which doesn't stand for anything, ...”
- ↑ Intel | Data Center Solutions, IoT, and PC Innovation (angol nyelven). [2013. december 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. december 17.)
- ↑ „Intel and Advance Micro agree on chip trademark”, The New York Times, 1997. április 22.. [2019. január 13-i dátummal az eredetiből archiválva] (Hozzáférés: 2019. január 13.) (angol nyelvű)
- ↑ Intel Alleges AMD and Cyrix Infringed on MMX Trademark, The Wall Street Journal, March 17, 1997, Dean Takahashi / quote=„On Friday, Intel filed suit against both companies in U.S. District Court in Delaware for allegedly infringing its pending trademark on "MMX," the label for its [media enhancement technology]...”
- ↑ Pfeiffer, Joseph J. Jr. (1997). „MMX Microarchitecture of Pentium Processors With MMX Technology and Pentium II Microprocessors” (angol nyelven). Intel Technology Journal. [2011. január 12-i dátummal az eredetiből archiválva]. (Hozzáférés: 2024. március 7.)
- ↑ a b (2000) „The long and winding road to high-performance image processing with MMX/SSE”. Proceedings of IEEE International Workshop on Computer Architectures for Machine Perception.
- ↑ Kay, Alan S.. „Pentium III: Buy the Numbers?”, The Washington Post , 1999. február 26.. [2019. április 15-i dátummal az eredetiből archiválva] (Hozzáférés: 2019. január 13.) (angol nyelvű)
- ↑ Microprocessor Hall of Fame (angol nyelven). Intel Museum . [2008. április 6-i dátummal az eredetiből archiválva].
- ↑ Intel Brings MMX™ Technology To Intel® Personal Internet Client Architecture-Based Wireless Devices (angol nyelven). (Hozzáférés: 2022. július 28.)
- ↑ Intel Delivers Next-Generation Processors Specifically Designed For Cell Phones And Wireless PDAs (angol nyelven). [2012. január 2-i dátummal az eredetiből archiválva]. (Hozzáférés: 2022. július 28.)
- ↑ World's smallest PXA270 embedded CPU card? (angol nyelven). EE Times , 2004. szeptember 15. (Hozzáférés: 2022. július 28.)
Fordítás
[szerkesztés]Ez a szócikk részben vagy egészben a MMX (instruction set) című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
Források
[szerkesztés]További információk
[szerkesztés]- Intel Intrinsics Guide – az Intel „intrinsic” függvények használata
- Intel Pentium Processor with MMX Technology, dokumentáció
- IA szoftverfejlesztői kézikönyv, 1. kötet (PDF), az MMX programozása a 8. fejezetben
Kapcsolódó szócikkek
[szerkesztés]- Extended MMX – kiterjesztett MMX
- 3DNow!
- SSE
- SSE2
- SSE3
- SSE4
- AVX
- Az x86 architektúra
- Szaturációs aritmetika