Práce s hodnotami s plovoucí řádovou čárkou na mikroprocesorech ARM

Pavel Tišnovský 17. 4. 2012

V seriálu o architekturách počítačů jsme se již seznámili se všemi třemi instrukčními sadami mikroprocesorů ARM – jak s původní RISCovou sadou, tak i se sadou Thumb a Thumb-2. Ještě jsme si však prakticky nic neřekli o podpoře práce s hodnotami s plovoucí řádovou čárkou. Nyní nastal pravý čas tuto informaci doplnit.

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

4. Sada registrů používaná v matematických koprocesorech s architekturou FPA, speciální registry FPSR a FPCR

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

9. Odkazy na Internetu

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, ThumbThumb-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 tranzis­torů.

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 denormalizova­ný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 f0f7. 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 f0f3 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 f4f7 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ý:

widgety

# 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

  1. ARM Floating Point Accelerator (ARM FPA)
    http://vswww.ka­ist.ac.kr/ver4­.0/index.php/re­search/past-research/arm-fpa.html
  2. The VFP architecture
    http://infocen­ter.arm.com/hel­p/index.jsp?to­pic=/com.arm.doc­.dui0056d/Bcfib­fha.html
  3. NEON
    http://www.ar­m.com/products/pro­cessors/techno­logies/neon.php
  4. Coding for NEON – Part 1: Load and Stores
    http://blogs.ar­m.com/software-enablement/161-coding-for-neon-part-1-load-and-stores/
  5. Coding for NEON – Part 2: Dealing With Leftovers
    http://blogs.ar­m.com/software-enablement/196-coding-for-neon-part-2-dealing-with-leftovers/
  6. Coding for NEON – Part 3: Matrix Multiplication
    http://blogs.ar­m.com/software-enablement/241-coding-for-neon-part-3-matrix-multiplication/
  7. Coding for NEON – Part 4: Shifting Left and Right
    http://blogs.ar­m.com/software-enablement/277-coding-for-neon-part-4-shifting-left-and-right/
  8. DSP & SIMD
    http://www.ar­m.com/products/pro­cessors/techno­logies/dsp-simd.php
  9. Improving ARM Code Density and Performance
    New Thumb Extensions to the ARM Architecture Richard Phelan
  10. The ARM Processor Architecture
    http://www.ar­m.com/products/pro­cessors/techno­logies/instruc­tion-set-architectures.php
  11. Thumb-2 instruction set
    http://infocen­ter.arm.com/hel­p/index.jsp?to­pic=/com.arm.doc­.ddi0344c/Bei­iegaf.html
  12. Introduction to ARM thumb
    http://www.ee­times.com/dis­cussion/other/4024632/­Introduction-to-ARM-thumb
  13. ARM, Thumb, and ThumbEE instruction sets
    http://www.ke­il.com/suppor­t/man/docs/ar­masm/armasm_CEG­BEIJB.htm
  14. An Introduction to ARM Assembly Language
    http://dev.em­celettronica.com/in­troduction-to-arm-assembly-language
  15. Processors – ARM
    http://www.ar­m.com/products/pro­cessors/index­.php
  16. The ARM Instruction Set
    http://simple­machines.it/doc/ar­m_inst.pdf
  17. ARM Architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/AR­M_architecture
  18. BBC BASIC
    http://www.bbcba­sic.co.uk/bbcba­sic.html
  19. BBC BASIC
    http://mdfs.net/Sof­tware/BBCBasic/
  20. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Sof­tware/BBCBasic/Spec­trum/
  21. BBC BASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/BBC_BA­SIC
  22. MIPS-3D® ASE
    http://www.mip­s.com/products/ar­chitectures/mips-3d-ase/
  23. An introduction to SPARC's SIMD offerings
    http://mikebu­rrell.wordpres­s.com/2007/12­/14/an-introduction-to-sparcs-simd-offerings/
  24. MIPS64TM Architecture for Programmers Volume IV-c: The MIPS-3DTM Application-Specific Extension to the MIPS64TM
    http://www.we­blearn.hs-bremen.de/ris­se/RST/docs/MIP­S/MD00099–2B-MIPS3D64-AFP-01.11.pdf
  25. Visual Instruction Set
    http://www.eno­tes.com/topic/Vi­sual_Instructi­on_Set
  26. NEON
    http://www.ar­m.com/products/pro­cessors/techno­logies/neon.php
  27. Architecture and Implementation of the ARM Cortex-A8 Microprocessor
    http://www.design-reuse.com/arti­cles/11580/ar­chitecture-and-implementation-of-the-arm-cortex-a8-microprocessor­.html
  28. Multimedia Acceleration eXtensions (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mul­timedia_Accele­ration_eXtensi­ons
  29. AltiVec (Wikipedia)
    http://en.wiki­pedia.org/wiki/Al­tiVec
  30. Visual Instruction Set (Wikipedia)
    http://en.wiki­pedia.org/wiki/Vi­sual_Instructi­on_Set
  31. MAJC (Wikipedia)
    http://en.wiki­pedia.org/wiki/MAJC
  32. MDMX (Wikipedia)
    http://en.wiki­pedia.org/wiki/MDMX
  33. MIPS Multiply Unit
    http://program­medlessons.or­g/AssemblyTuto­rial/Chapter-14/ass14_3.html
  34. Silicon Graphics Introduces Enhanced MIPS Architecture
    http://bwrc.e­ecs.berkeley.e­du/CIC/otherpr/en­hanced_mips.html
  35. MIPS-3D (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIPS-3D
  36. MIPS Technologies, Inc. announces new MIPS-3D technology to provide silicon-efficient 3D graphics acceleration
    http://www.design-reuse.com/new­s/2057/mips-mips-3d-technology-silicon-efficient-3d-graphics-acceleration.html
  37. MIPS-3D Built-in Function (gcc.gnu.org)
    http://gcc.gnu­.org/onlinedoc­s/gcc/MIPS_002d3D-Built_002din-Functions.html
  38. Baha Guclu Dundar:
    Intel MMX, SSE, SSE2, SSE3/SSSE3/SSE4 Architectures
  39. SSE (Streaming SIMD Extentions)
    http://www.son­gho.ca/misc/sse/sse­.html
  40. Timothy A. Chagnon: SSE and SSE2
    http://www.cs­.drexel.edu/~tc365/mpi-wht/sse.pdf
  41. Intel corporation: Extending the Worldr's Most Popular Processor Architecture
    http://downlo­ad.intel.com/techno­logy/architec­ture/new-instructions-paper.pdf
  42. SIMD architectures:
    http://arstechni­ca.com/old/con­tent/2000/03/sim­d.ars/
  43. Intel MMXTM Technology Overview
    Intel corporation, 1996
  44. MultiMedia eXtensions
    http://softpi­xel.com/~cwrig­ht/programmin­g/simd/mmx.phpi
  45. AMD K5 („K5“ / „5k86“)
    http://www.pcgu­ide.com/ref/cpu­/fam/g5K5-c.html
  46. Sixth Generation Processors
    http://www.pcgu­ide.com/ref/cpu­/fam/g6.htm
  47. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  48. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  49. Tour of the Black Holes of Computing!: Floating Point
    http://www.cs­.hmc.edu/~geof­f/classes/hmc­.cs105…/slides/clas­s02_floats.ppt
  50. 3Dnow! Technology Manual
    AMD Inc., 2000
  51. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  52. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  53. Cray History
    http://www.cra­y.com/About/His­tory.aspx?404;http:­//www.cray.com:80/a­bout_cray/his­tory.html
  54. Cray Historical Timeline
    http://www.cra­y.com/Assets/PDF/a­bout/CrayTime­line.pdf
  55. Computer Speed Claims 1980 to 1996
    http://homepa­ge.virgin.net/ro­y.longbottom/mip­s.htm
  56. Superpočítače Cray
    http://www.ro­ot.cz/clanky/su­perpocitace-cray/
  57. Superpočítače Cray (druhá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-druha-cast/
  58. Superpočítače Cray (třetí část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-treti-cast/
  59. Superpočítače Cray (čtvrtá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-ctvrta-cast/
  60. Superpočítače Cray (pátá část): architektura Cray X-MP
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-pata-cast-architektura-pocitace-cray-x-mp-a-jeho-pouziti-ve-filmovem-prumyslu/
Našli jste v článku chybu?
Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

DigiZone.cz: Budoucnost TV vysílání ve Visegrádu

Budoucnost TV vysílání ve Visegrádu

Podnikatel.cz: Letáky? Lidi zuří, ale ony stále fungují

Letáky? Lidi zuří, ale ony stále fungují

Vitalia.cz: Nová vakcína proti chřipce se aplikuje nosem

Nová vakcína proti chřipce se aplikuje nosem

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

DigiZone.cz: Regionální tele­vize CZ vysílá "Mapu úspěchu"

Regionální tele­vize CZ vysílá "Mapu úspěchu"

Vitalia.cz: Běháte a nehubnete? 6 častých chyb

Běháte a nehubnete? 6 častých chyb

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Lupa.cz: Adblock Plus začal prodávat reklamy

Adblock Plus začal prodávat reklamy

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?