Obsah
1. Práce s hodnotami s plovoucí řádovou čárkou na mikroprocesorech ARM
2. Architektura FPA (ARM Floating Point Accelerator)
3. Formáty dat používané v matematických koprocesorech s architekturou FPA
5. Instrukční sada matematických koprocesorů s architekturou FPA
6. Základní aritmetické operace, latence vybraných operací
7. Komparace hodnot s naplněním příznakových registrů
8. Další operace vykonávané matematickými koprocesory s architekturou FPA
1. Práce s hodnotami s plovoucí řádovou čárkou na mikroprocesorech ARM
V předchozích částech seriálu o architekturách počítačů jsme si popsali instrukční sady ARM, Thumb i Thumb-2 (navíc jsme se ještě zmínili o technologii Jazelle). Jak je u většiny mikroprocesorových architektur zvykem, byly i všechny tři zmíněné instrukční sady orientovány převážně na manipulaci s celočíselnými daty o bitové šířce 32 bitů a do určité míry taktéž šestnáct a osm bitů (což je vhodné například pro zpracování řetězců). U mnoha zařízení, v nichž byl použit některý z mikroprocesorů ARM, bylo využití pouze celočíselných operací pro danou aplikační oblast dostatečné, ovšem společně s tím, jak se rozšiřovaly oblasti, v nichž byly procesory ARM používány, se ukazovalo, že pro mnoho aplikací by bylo vhodné použít i matematický koprocesor, který by dokázal zpracovávat numerické hodnoty s plovoucí řádovou čárkou (FP – Floating Point).
Ideálně by se mělo jednat o matematický koprocesor používající formát numerických hodnot definovaný v normě IEEE 754, protože se jedná o standard zaručující mj. i lepší přenositelnost aplikací, detekci některých potenciálně chybových stavů (dělení nulou, přetečení, podtečení, ztráta přesnosti …) i stabilitu numerických algoritmů. Zajímavý a pro celou architekturu mikroprocesorů ARM možná i typický je fakt, že postupem času vzniklo hned několik technologií, které procesorům ARM umožnily práci s FP hodnotami, samozřejmě za asistence matematických koprocesorů (programová implementace FP operací je sice relativně snadná, ovšem za její použití zaplatíme mnohdy velmi dlouhou dobu výpočtu).
V dnešním článku se zaměříme především na popis architektury FPA neboli celým jménem Floating Point Accelerator a zmíníme se taktéž o v mnoha ohledech zajímavější a taktéž výkonnější architektuře VFP, plným názvem Vector Floating Point. Vlastnosti obou architektur jsou standardizovány, přičemž je i stanoveno, že v případě, že některá instrukce není přímo implementována instalovaným matematickým koprocesorem, bude tato instrukce zachycena (trap) a zpracována v emulátoru matematického koprocesoru FPEmulator. To je v mnoha ohledech výhodné, především kvůli tomu, že je zajištěna přenositelnost programů nezávisle na tom, zda se na konkrétním počítači/zařízení používá mikroprocesor ARM s matematickým koprocesorem či bez něj. Navíc je umožněno, aby koprocesor implementoval pouze některé FP operace, zatímco méně často používané a současně i obtížněji implementovatelné operace se budou emulovat, opět přesně podle konkrétních požadavků.
2. Architektura FPA (ARM Floating Point Accelerator)
Jak již víme z předchozích částí tohoto seriálu, neobsahovaly původní varianty mikroprocesorů s architekturou ARM žádnou podporu pro operace s čísly s plovoucí řádovou čárkou. To se změnilo se zavedením matematických koprocesorů s architekturou FPA. Podobně jako u mikroprocesorů řady 8086/80286/80386 byly i matematické koprocesory FPA původně realizovány na samostatném čipu, který pro připojení k mikroprocesorům ARM používal standardní rozhraní pro koprocesory (těch bylo možné připojit až šestnáct, později se koprocesory přímo přidávaly na čip společný se samotným jádrem ARM). Mikroprocesor ARM v takové konfiguraci prováděl veškeré běžné instrukce, tj. načítání hodnot z operační paměti, ukládání hodnot do paměti, provádění ALU operací, skoky, skoky do subrutin atd. Úkolem matematického koprocesoru bylo provádění konverzí dat mezi pracovními registry ARM a registry koprocesoru a samozřejmě taktéž provádění všech FP operací, které navíc mohly nastavit příznakové bity N (negative), V (overflow), Z (zero) a C (carry) využívané procesory ARM pro provádění skoků či instrukcí s podmínkou.
Při konstrukci matematického koprocesoru s architekturou FPA bylo použito mnoho technik využívaných v RISCových mikroprocesorech. Zejména se jednalo o instrukční pipeline a taktéž o automatickou detekci hazardu typu read-after-write (v tomto případě došlo k pozdržení vykonávání instrukce uložené v pipeline). Díky tomu, že implementovány byly především základní aritmetické operace, bylo možné zkonstruovat matematický koprocesor, jehož charakteristiky (především spotřeba a výpočetní výkon) dobře odpovídaly i charakteristikám procesorů ARM. Celý mikroprocesor byl původně umístěn v pouzdru PLCC s 68 piny, jeho výpočetní výkon dosahoval 2 až 5 MFLOPS při použití hodinové frekvence 40 MHz a jeho spotřeba zhruba odpovídala 2,5 mA na každý MHz (technologie 5V a 3,3V). Pro konstrukci mikroprocesoru bylo použito přibližně 130 000 tranzistorů.
Celý matematický koprocesor byl rozdělen na pět hlavních bloků propojených interními datovými cestami o šířce 81 bitů. V prvním bloku bylo implementováno rozhraní k mikroprocesorům ARM, přes něž se přenášela jak zpracovávaná data, tak i řídicí informace. Druhý blok byl představován instrukčním dekodérem, třetí blok vykonával základní operace typu load/store, čtvrtým blokem byla sada pracovních FP registrů (viz též čtvrtá kapitola) a pátým blokem byla samozřejmě aritmetická jednotka provádějící aritmetické operace s FP hodnotami, konverze data atd..
3. Formáty dat používané v matematických koprocesorech s architekturou FPA
Matematické koprocesory s architekturou FPA umožňují práci s numerickými hodnotami reprezentovanými v systému plovoucí řádové čárky (floating point) a taktéž s hodnotami používajícími kód BCD, v němž je každá číslice (i číslice exponentu) uložena ve čtyřech bitech (navíc je u tohoto formátu mocnina u exponentu rovna deseti a nikoli dvěma). Nás však budou v tomto článku zajímat především formáty hodnot s plovoucí řádovou čárkou, protože ty jsou používány častěji, než formát s BCD číslicemi. FP formáty jsou v FPA (na rozdíl od dále popsané architektury VFP) celkem tři: single/float, double a extended. Základní informace o těchto třech formátech jsou uvedeny v následující tabulce:
Datový typ | Šířka (bitů) | Znaménko (bitů) | Mantisa (bitů) | Exponent (bitů) |
---|---|---|---|---|
Single | 32 | 1 | 23 | 8 |
Double | 64 | 1 | 52 | 11 |
Extended | 80 | 1 | 64 | 15 |
FP formát single (=jednoduchá přesnost) či float používal mantisu o šířce 23 bitů a exponent o šířce osm bitů. Pro reprezentaci čísla se tedy muselo využít 32 bitů, protože nesmíme zapomenout na jednobitové znaménko mantisy:
+-+--------+-----------------------+ |s|exponent| mantisa, bity 0..22 | +-+--------+-----------------------+ 31 30 23 22 0
U FP formátu double (=dvojitá přesnost) se bitová šířka mantisy i exponentu rozšířila takovým způsobem, že na uložení bylo nutné použít 64 bitů. Samozřejmě se zvětšila jak přesnost, tak i rozsah reprezentovatelných hodnot:
+-+-----------+--------------------+ |s| exponent |mantisa, bity 32..51| +-+-----------+--------------------+ 63 62 52 51 32 +----------------------------------+ | mantisa, bity 0..31 | +----------------------------------+ 31 0
U FP formátu extended je nutné použít 80bitová slova:
+-+--------+ |s|exponent| +-+--------+ 79 78 64 +----------------------------------+ | mantisa, bity 32..64 | +----------------------------------+ 63 32 +----------------------------------+ | mantisa, bity 0..31 | +----------------------------------+ 31 0
Všechny tři FP formáty podporovaly i reprezentaci některých speciálních hodnot, především kladné a záporné nuly, kladného a záporného nekonečna, hodnoty NaN (například výsledek operace 0/0) či denormalizovaných čísel.
4. Sada registrů používaná v matematických koprocesorech s architekturou FPA, speciální registry FPSR a FPCR
Matematické koprocesory s architekturou FPA obsahují celkem osm FP registrů, které se v assembleru značí jmény f0 až f7. Každý z těchto FP registrů má šířku osmdesát bitů (deset bajtů) a může tedy reprezentovat numerickou hodnotu ve formátu single, double nebo extended. Díky tomu, že instrukční kód FPA je tříadresový, lze FP registry používat zcela libovolně, netvoří tedy zásobník, jak tomu původně bylo u koprocesorů 8087. Nicméně při volání subrutin se většinou dodržuje pravidlo, že registry f0 až f3 se používají pro předání parametrů do subrutin, popř. pro přenos návratové hodnoty do kódu, který subrutinu zavolal. Zbývající registry f4 až f7 se samozřejmě taktéž mohou v subrutinách využít, nicméně se před jejich modifikací ukládají (do paměti či na zásobníkový rámec) a před ukončením běhu subrutiny se jejich obsah obnovuje.
Kromě toho obsahují koprocesory i registr FPSR (Floating Point Status Register) a popřípadě i FPCR (Floating Point Control Register). FPSR obsahuje několik důležitých údajů, především System ID, z něhož lze vyčíst, zda se používá skutečný hardwarově implementovaný matematický koprocesor, či zda se FP výpočty provádí programově. Dále je v tomto registru uloženo pět příznaků nastavovaných při aritmetických operacích:
IXC - ztráta přesnosti UFC - podtečení OFC - přetečení DZC - dělení nulou IOC - neplatná operace 0/0, log -n apod.
Nastavení těchto příznaků je možné blokovat pomocí dalších pěti řídicích bitů:
IXE - blokace/povolení příznaku IXC UFE - blokace/povolení příznaku UFC OFE - blokace/povolení příznaku OFC DZE - blokace/povolení příznaku DZC IOE - blokace/povolení příznaku IOC
Registr FPCR může být použit při ukládání a přenášení stavových a řídicích informací při kooperaci mezi hardwarově implementovaným matematickým koprocesorem a programovými rutinami provádějícími některé FP operace (výpočet goniometrických funkcí apod.). Tento registr nemusí ve všech případech existovat a i když existuje, tak není předepsán jeho vnitřní formát, na rozdíl od výše zmíněného registru FPSR.
5. Instrukční sada matematických koprocesorů s architekturou FPA
Matematické koprocesory s architekturou FPA používají instrukční sadu, která se v některých ohledech podobá původní instrukční sadě mikroprocesorů ARM, což zajisté není náhoda. Všechny instrukce mají šířku 32 bitů a u každé instrukce lze specifikovat podmínku, při jejímž splnění se instrukce vykoná. Do 32bitových instrukcí se vešly i další důležité příznaky a přepínače. Jedním z nich je požadovaný režim zaokrouhlení, jenž se zapisuje i formou sufixu přímo do mnemotechnického kódu instrukce:
Kód | Sufix | Význam |
---|---|---|
00 | – | nejbližší reprezentovatelná hodnota |
01 | P | zaokrouhlení směrem ke kladnému nekonečnu |
10 | M | zaokrouhlení směrem k zápornému nekonečnu |
11 | Z | zaokrouhlení směrem k nule |
Dalším příznakem je specifikace formátu výsledku. Opět se jedná o údaj, který lze u některých instrukcí zapsat formou sufixu za jméno instrukce:
Kód | Sufix | Význam |
---|---|---|
00 | S | single |
01 | D | double |
10 | E | extended |
11 | – | nedefinováno |
Možná nejzajímavější je však fakt, že druhým operandem aritmetických či komparativních operací může být jak některý z FP registrů, tak i konstanta, jejíž kód je uložen přímo v instrukci. To je velmi užitečná vlastnost, protože se tím může zkrátit relativně velké množství algoritmů. Celkem je možné v instrukčním slovu použít jednu z osmi konstant:
Bitový kód | FP konstanta |
---|---|
000 | 0.0 |
001 | 1.0 |
010 | 2.0 |
011 | 3.0 |
100 | 4.0 |
101 | 5.0 |
110 | 0.5 |
111 | 10.0 |
6. Základní aritmetické operace, latence vybraných operací
V této kapitole budou popsány základní aritmetické operace podporované v instrukční sadě FPA. Jedná se o operace prováděné s dvojicí operandů, jenž jsou většinou uloženy ve dvojici FP registrů (popř. může být jako druhý operand použita konstanta – viz též předchozí kapitolu). Výsledek operace je uložen do dalšího zvoleného FP registru. Jedná se tedy o tříadresový kód, podobně jako je tomu i u původní RISCové instrukční sady ARM. Důvod pro toto uspořádání instrukcí je zřejmý – s tříadresovým kódem mohou velmi snadno a efektivně pracovat překladače, které mají zjednodušenou práci při alokaci registrů i při překladu složitějších aritmetických výrazů. Povšimněte si taktéž, že se v instrukční sadě vyskytují i operace typu „reverse…“, u nichž je prohozen význam obou operandů. Důvodem je možnost použití konstanty na místě prvního či druhého operandu:
# | Instrukce | Význam | Prováděný výpočet |
---|---|---|---|
1 | ADF | Add | Fd := Fn + Fm |
2 | SUF | Subtract | Fd := Fn – Fm |
3 | RSF | Reverse Subtract | Fd := Fm – Fn |
4 | MUF | Multiply | Fd := Fn * Fm |
5 | DVF | Divide | Fd := Fn / Fm |
6 | RDF | Reverse Divide | Fd := Fm / Fn |
7 | FML | Fast Multiply | Fd := Fn * Fm |
8 | FDV | Fast Divide | Fd := Fn / Fm |
9 | FRD | Fast Reverse Divide | Fd := Fm / Fn |
Poslední tři instrukce FML, FDV a FRD sice provádí plnohodnotné operace násobení a dělení, ovšem jedná se o instrukce, které pracují pouze s numerickými hodnotami s jednoduchou přesností, tj. s datovým typem single. Největší předností těchto instrukcí je vyšší rychlost výpočtu, ovšem výsledky se mohou v některých případech lišit v nejnižším bitu mantisy od výsledků získaných s využitím „plnohodnotných“ operací násobení a dělení, v nichž se následně provede korektní zaokrouhlení.
Zajímavá a v mnoha případech důležitá je taktéž informace o latenci instrukcí. Jedná se o (celočíselnou) hodnotu, která udává počet taktů (hodinových cyklů) nutných pro dokončení operace zapsané v instrukci. Tato hodnota je tedy měřena od načtení instrukce až po korektní uložení výsledků zpět do FP registrů; v praxi se však díky existenci instrukční pipeline mohou začít zpracovávat i další instrukce předtím, než je daná operace zcela dokončena. Latence je (očekávatelně) nejnižší u aditivních operací a nejvyšší u instrukcí podílu, latence se taktéž u některých operací zvyšuje společně s požadovanou přesností výpočtu, což je ostatně patrné i při pohledu na následující tabulku:
# | Instrukce | Význam | Latence | Poznámka |
---|---|---|---|---|
1 | ADF | Add | 4 | × |
2 | MUF | Multiply | 9 | × |
3 | FML | Fast Multiply | 6 | pouze single |
4 | DVF | Divide | 31 | single |
5 | DVF | Divide | 59 | double |
6 | DVF | Divide | 71 | extended |
7. Komparace hodnot s naplněním příznakových registrů
Matematické koprocesory s architekturou FPA obsahují i čtveřici instrukcí, které na základě porovnání dvou FP hodnot mohou nastavit příznakové bity N (negative), V (overflow), Z (zero) a C (carry). Již víme, že tyto příznakové bity slouží pro provádění podmíněných skoků (všechny instrukční sady), popř. pro určení, zda se má či nemá některá instrukce provést na základě podmínkových bitů (instrukční sada ARM a částečně i Thumb-2). Při porovnání dvou FP hodnot však mohou mít nastavené bitové příznaky poněkud jiný význam, než je tomu u celočíselných porovnání – viz též následující tabulku:
Příznak | Význam po FP porovnání |
---|---|
N | menší než |
Z | rovnost |
C | větší než, popř. rovnost |
V | hodnoty nelze navzájem uspořádat |
Příznak V je nastaven tehdy, pokud je jedna z porovnávaných hodnot NaN, tj. pokud nelze dvojici hodnot navzájem uspořádat. V další tabulce jsou vypsány všechny čtyři komparační operace, které koprocesory FPA realizují. První dvě operace se používají především pro test na rovnost či nerovnost (příznak Z) a na zjištění, zda vůbec lze hodnoty porovnat (příznak V). Druhé dvě operace je možné použít i pro test relací typu „větší než“, „větší nebo rovno“ atd.:
# | Instrukce | Význam | Prováděný výpočet/operace |
---|---|---|---|
1 | CMF | Compare Floating | Fn <?> Fm |
2 | CNF | Compare Negated Floating | Fn <?> -Fm |
3 | CMFE | Compare Floating with Exception | Fn <?> Fm |
4 | CNFE | Compare Negated Floating with Exception | Fn <?> -Fm |
8. Další operace vykonávané matematickými koprocesory s architekturou FPA
Kromě základních aritmetických operací a komparativních operací mohly matematické koprocesory s architekturou FPA vykonávat i mnoho dalších instrukcí. Jednalo se především o přesuny dat. Dokonce byl podporován i přesun dat až ze čtyř registrů současně:
# | Instrukce | Význam | Prováděný výpočet/operace |
---|---|---|---|
1 | LDFS | Load Single | Načtení FP hodnoty typu single (jeden registr) |
2 | LDFD | Load Double | Načtení FP hodnoty typu double (jeden registr) |
3 | LDFE | Load Extended | Načtení FP hodnoty typu extended (jeden registr) |
4 | STFS | Store Single | Uložení FP hodnoty typu single (jeden registr) |
5 | STFD | Store Double | Uložení FP hodnoty typu double (jeden registr) |
6 | STFE | Store Extended | Uložení FP hodnoty typu extended (jeden registr) |
7 | LFM | Load Floating Multiple | Načtení hodnoty do 1–4 FP registrů |
8 | SFM | Store Floating Multiple | Uložení hodnoty 1–4 FP registrů |
V následující tabulce jsou vypsány unární aritmetické a konverzní operace, které jsou prováděny pouze s dvojicí FP registrů. Jeden z registrů je v tomto případě zdrojový, druhý cílový:
# | Instrukce | Význam | Prováděný výpočet/operace |
---|---|---|---|
1 | MVF | Move | Fd := Fm (pouhý přesun hodnoty) |
2 | MNF | Move Negated | Fd := -Fm (přesun hodnoty se změnou znaménka) |
3 | ABS | Absolute | Fd := | Fm | (výpočet absolutní hodnoty) |
4 | URD | Round to Integral Value | Fd := int. Fm |
5 | NRM | Normalise result | Fd := normalizovaný Fm |
6 | FLT | Integer to floating point conversion | Fn := Rd |
7 | FIX | Floating point to integer conversion | Rd := Fm |
8 | WFS | Write Floating Point Status n | FPSR := Rd |
9 | RFS | Read Floating Point Status | Rd := FPSR |
10 | WFC | Write Floating Point Control | FPCR := Rd |
11 | RFC | Read Floating Point Control | Rd := FPCR |
Poznámka: povšimněte si, že instrukce uvedené v předchozí tabulce na řádcích 6 až 11 ve skutečnosti provádí přenos dat mezi matematickým koprocesorem a vybraným pracovním registrem R0-R15 mikroprocesoru ARM.
V poslední tabulce jsou uvedeny operace prováděné programově. Tyto operace se sice taktéž mohly zapisovat jako běžné instrukce, ovšem v případě, že se procesor pokusil tuto instrukci provést, došlo k zachycení neznámého operačního kódu (trap) a zbytek výpočtu mohl provést příslušný podprogram:
# | Instrukce | Význam | Prováděný výpočet/operace |
---|---|---|---|
1 | SQT | Square Root | Fd := Fm(1/2) |
2 | POW | Power | Fd := FnFm |
3 | RPW | Reverse Power | Fd := FmFn |
4 | RMF | Remainder | Fd := zbytek po Fn/Fm |
5 | POL | Polar Angle | výpočet hodnoty arctan z podílu Fn/Fm |
6 | RND | Round to Integral Value | |
7 | LOG | Logarithm to base 10 | Fd := log10 Fm |
8 | LGN | Logarithm to base e | Fd := loge Fm |
9 | EXP | Exponent | Fd := eFm |
10 | SIN | Sine | Fd := sin Fm |
11 | COS | Cosine | Fd := cos Fm |
12 | TAN | Tangent | Fd := tan Fm |
13 | ASN | Arc Sine | Fd := arcsin Fm |
14 | ACS | Arc Cosine | Fd := arccos Fm |
15 | ATN | Arc Tangent | Fd := arctan Fm |
9. Odkazy na Internetu
- ARM Floating Point Accelerator (ARM FPA)
http://vswww.kaist.ac.kr/ver4.0/index.php/research/past-research/arm-fpa.html - The VFP architecture
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0056d/Bcfibfha.html - NEON
http://www.arm.com/products/processors/technologies/neon.php - Coding for NEON – Part 1: Load and Stores
http://blogs.arm.com/software-enablement/161-coding-for-neon-part-1-load-and-stores/ - Coding for NEON – Part 2: Dealing With Leftovers
http://blogs.arm.com/software-enablement/196-coding-for-neon-part-2-dealing-with-leftovers/ - Coding for NEON – Part 3: Matrix Multiplication
http://blogs.arm.com/software-enablement/241-coding-for-neon-part-3-matrix-multiplication/ - Coding for NEON – Part 4: Shifting Left and Right
http://blogs.arm.com/software-enablement/277-coding-for-neon-part-4-shifting-left-and-right/ - DSP & SIMD
http://www.arm.com/products/processors/technologies/dsp-simd.php - Improving ARM Code Density and Performance
New Thumb Extensions to the ARM Architecture Richard Phelan - The ARM Processor Architecture
http://www.arm.com/products/processors/technologies/instruction-set-architectures.php - Thumb-2 instruction set
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344c/Beiiegaf.html - Introduction to ARM thumb
http://www.eetimes.com/discussion/other/4024632/Introduction-to-ARM-thumb - ARM, Thumb, and ThumbEE instruction sets
http://www.keil.com/support/man/docs/armasm/armasm_CEGBEIJB.htm - An Introduction to ARM Assembly Language
http://dev.emcelettronica.com/introduction-to-arm-assembly-language - Processors – ARM
http://www.arm.com/products/processors/index.php - The ARM Instruction Set
http://simplemachines.it/doc/arm_inst.pdf - ARM Architecture (Wikipedia)
http://en.wikipedia.org/wiki/ARM_architecture - BBC BASIC
http://www.bbcbasic.co.uk/bbcbasic.html - BBC BASIC
http://mdfs.net/Software/BBCBasic/ - BBC BASIC (Z80) for the ZX Spectrum
http://mdfs.net/Software/BBCBasic/Spectrum/ - BBC BASIC (Wikipedia CZ)
http://en.wikipedia.org/wiki/BBC_BASIC - MIPS-3D® ASE
http://www.mips.com/products/architectures/mips-3d-ase/ - An introduction to SPARC's SIMD offerings
http://mikeburrell.wordpress.com/2007/12/14/an-introduction-to-sparcs-simd-offerings/ - MIPS64TM Architecture for Programmers Volume IV-c: The MIPS-3DTM Application-Specific Extension to the MIPS64TM
http://www.weblearn.hs-bremen.de/risse/RST/docs/MIPS/MD00099–2B-MIPS3D64-AFP-01.11.pdf - Visual Instruction Set
http://www.enotes.com/topic/Visual_Instruction_Set - NEON
http://www.arm.com/products/processors/technologies/neon.php - Architecture and Implementation of the ARM Cortex-A8 Microprocessor
http://www.design-reuse.com/articles/11580/architecture-and-implementation-of-the-arm-cortex-a8-microprocessor.html - Multimedia Acceleration eXtensions (Wikipedia)
http://en.wikipedia.org/wiki/Multimedia_Acceleration_eXtensions - AltiVec (Wikipedia)
http://en.wikipedia.org/wiki/AltiVec - Visual Instruction Set (Wikipedia)
http://en.wikipedia.org/wiki/Visual_Instruction_Set - MAJC (Wikipedia)
http://en.wikipedia.org/wiki/MAJC - MDMX (Wikipedia)
http://en.wikipedia.org/wiki/MDMX - MIPS Multiply Unit
http://programmedlessons.org/AssemblyTutorial/Chapter-14/ass14_3.html - Silicon Graphics Introduces Enhanced MIPS Architecture
http://bwrc.eecs.berkeley.edu/CIC/otherpr/enhanced_mips.html - MIPS-3D (Wikipedia)
http://en.wikipedia.org/wiki/MIPS-3D - MIPS Technologies, Inc. announces new MIPS-3D technology to provide silicon-efficient 3D graphics acceleration
http://www.design-reuse.com/news/2057/mips-mips-3d-technology-silicon-efficient-3d-graphics-acceleration.html - MIPS-3D Built-in Function (gcc.gnu.org)
http://gcc.gnu.org/onlinedocs/gcc/MIPS_002d3D-Built_002din-Functions.html - Baha Guclu Dundar:
Intel MMX, SSE, SSE2, SSE3/SSSE3/SSE4 Architectures - SSE (Streaming SIMD Extentions)
http://www.songho.ca/misc/sse/sse.html - Timothy A. Chagnon: SSE and SSE2
http://www.cs.drexel.edu/~tc365/mpi-wht/sse.pdf - Intel corporation: Extending the Worldr's Most Popular Processor Architecture
http://download.intel.com/technology/architecture/new-instructions-paper.pdf - SIMD architectures:
http://arstechnica.com/old/content/2000/03/simd.ars/ - Intel MMXTM Technology Overview
Intel corporation, 1996 - MultiMedia eXtensions
http://softpixel.com/~cwright/programming/simd/mmx.phpi - AMD K5 („K5“ / „5k86“)
http://www.pcguide.com/ref/cpu/fam/g5K5-c.html - Sixth Generation Processors
http://www.pcguide.com/ref/cpu/fam/g6.htm - Great Microprocessors of the Past and Present
http://www.cpushack.com/CPU/cpu1.html - Very long instruction word (Wikipedia)
http://en.wikipedia.org/wiki/Very_long_instruction_word - Tour of the Black Holes of Computing!: Floating Point
http://www.cs.hmc.edu/~geoff/classes/hmc.cs105…/slides/class02_floats.ppt - 3Dnow! Technology Manual
AMD Inc., 2000 - CPU design (Wikipedia)
http://en.wikipedia.org/wiki/CPU_design - Control unit (Wikipedia)
http://en.wikipedia.org/wiki/Control_unit - Cray History
http://www.cray.com/About/History.aspx?404;http://www.cray.com:80/about_cray/history.html - Cray Historical Timeline
http://www.cray.com/Assets/PDF/about/CrayTimeline.pdf - Computer Speed Claims 1980 to 1996
http://homepage.virgin.net/roy.longbottom/mips.htm - Superpočítače Cray
http://www.root.cz/clanky/superpocitace-cray/ - Superpočítače Cray (druhá část)
http://www.root.cz/clanky/superpocitace-cray-druha-cast/ - Superpočítače Cray (třetí část)
http://www.root.cz/clanky/superpocitace-cray-treti-cast/ - Superpočítače Cray (čtvrtá část)
http://www.root.cz/clanky/superpocitace-cray-ctvrta-cast/ - Superpočítače Cray (pátá část): architektura Cray X-MP
http://www.root.cz/clanky/superpocitace-cray-pata-cast-architektura-pocitace-cray-x-mp-a-jeho-pouziti-ve-filmovem-prumyslu/