Hlavní navigace

Mikroprocesory ARM a architektura VFP (Vector Floating Point)

24. 4. 2012
Doba čtení: 17 minut

Sdílet

V dnešní části seriálu o architekturách počítačů se již podruhé budeme zabývat způsobem zpracování numerických hodnot s plovoucí řádovou čárkou na mikroprocesorech ARM. Minule jsme si popsali technologii FPA (Floating Point Accelerator), dnes se zaměříme na alternativní technologii VFP (Vector Floating Point).

Obsah

1. Mikroprocesory ARM a architektura VFP (Vector Floating Point)

2. Pracovní registry a formát zpracovávaných hodnot

3. Řídicí a stavový registr FPSCR

4. Skalární a vektorový režim FP instrukcí

5. Rozdělení registrů do bank, nastavení parametrů STRIDE a LEN

6. Instrukční sada VFP: vektorové aritmetické operace

7. Porovnání dvou hodnot, porovnání s nulou

8. Přesuny dat, načtení konstanty a konverzní instrukce

9. Odkazy na Internetu

1. Mikroprocesory ARM a architektura VFP (Vector Floating Point)

V předchozí části seriálu o architekturách počítačů jsme se seznámili s technologií nazvanou FPA neboli Floating Point Architecture. Jednalo se o jednu z několika dostupných technologií, která umožňovala na mikroprocesorech s architekturou ARM zpracovávat numerické hodnoty uložené ve formátu plovoucí řádové čárky (FP – floating point). Propojení mezi jádrem procesorů ARM a matematickým koprocesorem FPA bylo realizováno přes standardizované rozhraní umožňující kooperaci s různými typy koprocesorů, ať již se jedná o zde popisované matematické koprocesory, tak i například o I/O procesory (řadiče USB…), grafické moduly atd. Připomeňme si, že matematické koprocesory FPA dokázaly pracovat s čísly odpovídajícími v normě IEEE 754 formátům s jednoduchou přesností (single/float, šířka 32 bitů), s dvojitou přesností (double, šířka 64 bitů) a taktéž s rozšířenou přesností (extended, šířka 80 bitů).

Ovšem již minule jsme se zmínili o tom, že technologie FPA není jedinou „floating point“ technologií, kterou je možné na procesorech ARM využít. Alternativní a dnes dokonce častěji používanou technologií je VFP, což je zkratka odvozená od Vector Floating Point (jedná se o označení, jež je v současnosti možná již poněkud zavádějící). Technologie VFP byla navržena takovým způsobem, aby ji bylo možné použít v mnoha aplikačních oblastech, například v řídicích jednotkách automobilů, pro zpracování obrazu (konvoluční filtry, rychlá Fourierova transformace, rasterizace a další operace prováděné v tiskových procesorech), při zpracování řeči (kodeky) a taktéž pro provádění různých 3D operací (transformace) – právě v těchto oblastech lze totiž využít práci nikoli pouze se skalárními hodnotami, ale taktéž s vektory o dvou až osmi prvcích. Zajímavé je, že později došlo ke sloučení VFP s architekturou NEON, o níž se v tomto seriálu ještě určitě zmíníme.

Původní architektura VFPv1 je již dnes považována za překonanou a v žádných současných čipech se s níž již nesetkáme. Druhá verze této architektury VFPv2 začala být používána na některých čipech ARMv5E, ARMv5TEJ a taktéž na ARMv6 – instrukce VFP v tomto případě rozšiřovaly původní instrukční sady ARM. Zajímavější je dnes třetí verze architektury VFP značená VFPv3 používaná od ARMv7 (samozřejmě jen u vybraných čipů – zdaleka ne všechny aplikační oblasti totiž nutně vyžadují matematický koprocesor). V tomto případě lze nové „vektorové“ instrukce používat v instrukční sadě ARM, Thumb i ThumbEE.

Poznámka: zatímco matematické koprocesory FPA byly vytvářeny většinou na samostatném čipu, jsou jádra VFP přímo součástí stejných čipů, na nichž je implementováno samotné jádro ARM.

2. Pracovní registry a formát zpracovávaných hodnot

Na rozdíl od matematických koprocesorů FPA podporujících formáty single (32bit), double (64bit) i extended (80bit) se u technologie VFP používají především formáty single/float a double, přičemž existují rozšíření i pro formáty s poloviční přesností (half-float), které lze v některých oblastech s výhodou používat, například pro ukládání barvových složek pixelů (zvýší se tím mj. i dynamický rozsah při filtraci obrazu). Vzhledem k tomu, že technologie VFP je určena i pro aplikaci v systémech, v nichž je mnohdy důležité dosáhnout co největšího výpočetního výkonu popř. co nejkratší doby odezvy (RT aplikace), může matematický koprocesor VFP pracovat buď v režimu full compliance, který je přímo kompatibilní s normou IEEE 754, popř. je možné povést přepnutí do režimu RunFast, v němž se negenerují některé výjimky a taktéž může dojít ke ztrátě přesnosti v nejnižších bitech mantisy (většinou pouze v bitu nejnižším). Vlastnosti obou režimů jsou samozřejmě velmi přesně popsány, takže záleží jen na vývojáři, který režim v daný okamžik použije.

Matematické koprocesory VFP obecně obsahují šestnáct pracovních registrů, každý o šířce 64 bitů. Tyto registry lze použít buď pro práci s hodnotami s dvojitou přesností (double) – potom se tyto registry v assembleru označují jmény d0d15. Ovšem taktéž je možné libovolný registr rozdělit na dva registry o šířce 32 bitů, z nichž každý dokáže pojmout číselnou hodnotu s jednoduchou přesností (single/float). Díky tomuto rozdělení se počet registrů pro formát single zvětšil na dvojnásobek – tyto registry jsou v assembleru pojmenovány s0s31. Podle konvence dodržované jak překladači, tak i v programových knihovnách se při volání subrutin používají registry d0d7 pro předávání parametrů subrutině, popř. pro získání návratových hodnot ze subrutiny. Samozřejmě se tyto registry taktéž používají při výpočtech v subrutině. Ostatní registry lze taktéž použít, ovšem jejich hodnota by měla být při návratu ze subrutiny obnovena.

Poznámka: v předchozí kapitole jsme se zmínili o třetí verzi technologie VFP označované VFPv3. Ve skutečnosti tato verze existuje ve dvou variantách, přičemž první varianta je nazvaná VFPv3-D16 a druhá varianta se označuje VFPv3-D32. U první varianty platí všechny informace uvedené v předchozích dvou odstavcích (16 registrů typu double rozdělitelných na 32 registrů typu single), ale u varianty VFPv3-D32 se počet registrů typu double zdvojnásobil, čehož lze samozřejmě s výhodou využít v mnoha typech aplikací (ovšem zaplatíme za to větším počtem tranzistorů a tím pádem i větší plochou čipu i jeho spotřebou).

3. Řídicí a stavový registr FPSCR

Při popisu technologie FPA jsme se zmínili i o dvou důležitých řídicích a stavových registrech. Jednalo se o registr FPSR (Floating Point Status Register) a FPCR (Floating Point Control Register). Oba tyto registry mají šířku 32 bitů, což umožňuje snadné přenesení jejich obsahu do vybraného pracovního registru procesoru ARM. Podobný typ registru existuje taktéž u technologie VFP – jedná se o registr FPSCR neboli Floating Point Status and Control Register. I tento registr má šířku 32 bitů a lze ho přenášet do a z vybraného pracovního registru mikroprocesoru ARM. Ve skutečnosti je tento přenos dokonce nutný například v těch případech, kdy je zapotřebí nastavit pouze vybranou oblast v tomto registru. Může se například jednat o bitová pole STRIDE a LEN, které mají velký význam pro provádění vektorových operací, neboť určují, s jak dlouhými vektory a s jakým uspořádáním prvků vektoru se bude pracovat.

Při změně hodnoty pouze některých bitů registru FPSCR se používá následující sekvence instrukcí:

VMRS   r3,FPSCR           ; přesun hodnoty FPSCR do registru R3
BIC    r3,r3,#0x00370000  ; vynulování bitových polí STRIDE a LEN
ORR    r3,r3,#0x00030000  ; nastavení STRIDE = 1 a LEN = 4
VMSR   FPSCR,r3           ; zpětný přesun hodnoty z R3 do registru FPSCR

Jaké informace však vlastně registr FPSCR obsahuje? Jeho obsah se liší v závislosti na tom, o jakou variantu technologie VFP se jedná, ale obecně lze říci, že zde můžeme najít minimálně pět bitových polí: příznaky nastavované po aritmetických a porovnávacích operacích, výběr zaokrouhlovacího režimu, příznaky nastavované při některém typu výjimky (ztráta přesnosti, neplatná operace…), bity, s jejichž pomocí lze blokovat tyto výjimky a konečně bitová pole STRIDE a LEN používaná pro nastavování způsobu provádění vektorových operací.

Pro nastavení zaokrouhlovacího režimu postačuje dvojice bitů:

Kód Režim Význam
00 RN nejbližší reprezentovatelná hodnota
01 RP zaokrouhlení směrem ke kladnému nekonečnu
10 RM zaokrouhlení směrem k zápornému nekonečnu
11 RZ zaokrouhlení směrem k nule

Příznakové bity nastavované po aritmetických a porovnávacích operacích jsou čtyři, jak lze očekávat. Tyto příznakové bity se většinou kopírují do CPSR, aby se mohly využít v podmíněných skocích (všechny instrukční sady) nebo v podmínkových bitech (instrukční sada ARM):

Příznak Význam
N výsledek záporný, menší než
Z výsledek nulový, rovnost
C větší než
V hodnoty nelze vzájemně uspořádat

Dalších pět bitů je nastavovaných při výskytu nějaké výjimky v průběhu provádění FP operací:

Bit Význam
IXC ztráta přesnosti
UFC podtečení
OFC přetečení
DZC dělení nulou
IOC neplatná operace 0/0, log -n apod.

Výše vypsané výjimky lze blokovat posledními pěti bity:

Bit Význam
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

4. Skalární a vektorový režim FP instrukcí

Při vzniku technologie VFP se její tvůrci zaměřili na to, aby instrukční sada VFP umožňovala jak práci se skalárními hodnotami, tak i práci s vektory. Na první pohled by se tedy mohlo zdát, že se jedná o jednu z mnoha aplikací architektury SIMD, ve skutečnosti se ovšem v případě VFP vektory zpracovávají sekvenčně. To například znamená, že součet dvou osmiprvkových vektorů realizovaný instrukcí VADD používá tu samou FP-sčítačku a prvky vektorů jsou tedy sečítány postupně. Stále se jedná o rychlejší operaci, než osm krát opakovaná instrukce ADF (mimo jiné se ušetří cykly strávené při načítání a dekódování instrukce – instruction fetch a instruction decode) – ovšem reálný SIMD systém to není, na rozdíl od na první pohled obdobných technologií: 3DNow!, SSE atd. Změna přišla až při sloučení VFP s technologií NEON, která na procesory ARM přinesla skutečné operace SIMD.

5. Rozdělení registrů do bank, nastavení parametrů STRIDE a LEN

Při provádění vektorových operací se pracovní registry rozdělují do takzvaných bank. V případě použití formátu single jsou použity čtyři banky, z nichž každá obsahuje osm pracovních registrů: s0-s7, s8-s15, s16-s23, s24-s31. Pokud je použit formát double, existují banky čtyři a každá z nich obsahuje čtyři registry: d0-d3, d4-d7, d8-d11, d12-d15. U architektury VFPv3-D32, která nabízí dvojnásobný počet registrů typu double, se počet bank s registry typu double taktéž rozšiřuje na osm. Význam bank je následující: vektorovou operaci lze totiž provést s dvojicí vektorů, přičemž každý vektor je sestaven maximálně z osmi registrů typu single, popř. ze čtyř registrů typu double, které ovšem musí ležet v jedné bance. Navíc platí, že pokud je v instrukci zvolen vyšší registr v bance a délka vektoru přesahuje počet zbylých registrů v této bance, bude se při indexaci prvků vektorů „wrapovat“ na začátek banky:

Délka vektoru = 6
První registr s5 (bank s0-s7)
Vektor použitý v instrukci: [s5, s6, s7, s0, s1, s2]

Toto chování sice může na první pohled vypadat dosti neobvykle, ovšem v praxi ho lze s výhodou použít u některých algoritmů vyžadujících jiné uspořádání prvků vektoru.

Již ve čtvrté kapitole jsme se zmínili o tom, že ve stavovém a řídicím registru FPSCR se mj. nachází i bitová pole LEN a STRIDE. Bitové pole LEN má šířku tři bity a obsahuje délku zpracovávaných vektorů, od níž je odečtena jednička. Pro skalární operace tedy postačuje nastavit všechny tři bity LEN na nulu, což značí délku vektoru jeden prvek. Bitové pole STRIDE (o šířce 2 bity) je zajímavější – touto hodnotou lze totiž zvolit, zda registry ve vektoru budou uloženy v po sobě jdoucích registrech, či zda budou uloženy ob jeden, dva či tři FP registry. Opět si to ukažme na příkladu:

LEN=3 STRIDE=1 start=s1  odpovídá vektoru {s1, s2, s3}
LEN=3 STRIDE=2 start=s1  odpovídá vektoru {s1, s3, s5}
LEN=4 STRIDE=1 start=s6  odpovídá vektoru {s6, s7, s0, s1}
LEN=4 STRIDE=2 start=s6  odpovídá vektoru {s6, s0, s2, s4}

Použití STRIDE=2 má samozřejmě svůj význam, neboť po sobě jdoucí registry mohou obsahovat sekvenci souřadnic [x,y] a v některém okamžiku pouze potřebujeme pracovat se všemi souřadnicemi x atd.

6. Instrukční sada VFP: vektorové aritmetické operace

Nyní se již konečně dostáváme k popisu jednotlivých instrukcí, které lze nalézt v instrukční sadě VFP. Zajímavý je především fakt, že každá instrukce obsahuje příznak, zda se má provádět operace s hodnotami/re­gistry typu single či double. Instrukce taktéž obsahují příznakové bity určující, za jakých podmínek se instrukce má provést. Význam těchto příznakových bitů je poněkud odlišný od bitů použitých v instrukční sadě ARM, a to především z toho důvodu, že příznak V má odlišný význam (přetečení hodnoty celého čísla do znaménkového bitu versus dvě FP hodnoty nelze porovnat). To, zda se bude vybraná operace provádět nad dvojicí skalárních hodnot nebo nad dvojicí registrů, je určeno hodnotami LEN (a vlastně též STRIDE), o nichž jsme se zmiňovali v předchozích kapitolách.

V následující tabulce jsou vypsány základní aritmetické operace:

# Instrukce Význam Prováděný výpočet
1 VADD Fd, Fn, Fm součet Fd := Fn + Fm
2 VSUB Fd, Fn, Fm rozdíl Fd := Fn – Fm
3 VNEG Fd, Fm změna znaménka Fd := – Fm
4 VABS Fd, Fm absolutní hodnota Fd := abs(Fm)
5 VSQRT Fd, Fm druhá odmocnina Fd := sqrt(Fm)
6 VDIV Fd, Fn, Fm dělení Fd := Fn / Fm
7 VMUL Fd, Fn, Fm násobení Fd := Fn * Fm
8 VMLA Fd, Fn, Fm násobení + akumulace Fd := Fd + (Fn * Fm)
9 VMLS Fd, Fn, Fm odečtení součinu Fd := Fd – (Fn * Fm)
10 VNMUL Fd, Fn, Fm násobení + změna znaménka Fn := – (Fn * Fm)
11 VNMLA Fd, Fn, Fm kombinace VNMUL a VMLA Fd := – Fd – (Fn * Fm)
12 VNMLS Fd, Fn, Fm kombinace VNMUL a VMLS Fd := – Fd + (Fn * Fm)

Poznámka: povšimněte si především šesti různých variant násobení. To je zapříčiněno tím, že se VFP používá například i pro filtraci obrazu, FFT atd., kde lze tyto operace s výhodou použít.

UX DAy - tip 2

7. Porovnání dvou hodnot, porovnání s nulou

Mezi další důležité operace prováděné matematickými koprocesory s technologií VFP patří instrukce pro porovnání dvou hodnot (samozřejmě uložených ve dvojici registrů), popř. porovnání hodnoty jednoho registru s nulou. Porovnání je provedeno instrukcí VCMP, u níž lze navíc pomocí prefixu „P“ určit, ve kterých případech se má vyvolat výjimka. Porovnání nastaví všechny čtyři příznakové bity C, Z, N a V. Pro přesun příznakových bitů z registru FPSCR do registru CSR je nutné použít instrukci VMRS APSR_nzcv, FPSCR:

# Instrukce Význam Prováděný výpočet
1 VCMP Fd, Fm Porovnání obsahu dvou registrů Fd – Fm
2 VCMP Fd, #0.0 Porovnání jednoho registru s nulou Fd – 0.0

8. Přesuny dat, načtení konstanty a konverzní instrukce

V poslední tabulce jsou vypsány instrukce provádějící různé přesuny dat s případnými konverzemi dat. Operace s hodnotami s poloviční přesností (half) jsou dostupné pouze na koprocesorech s architekturou VFPv3:

# Instrukce Význam
1 VCVT{C}.F64.F32 Dd, Sm Konverze single na double
2 VCVT{C}.F32.F64 Sd, Dm Konverze double na single
3 VCVT{C}.F32/F64.U32 Fd, Sm Konverze unsigned integer na float
4 VCVT{C}.F32/F64.S32 Fd, Sm Konverze signed integer na float
5 VCVT{R}{C}.U32­.F32/F64 Sd, Fm Konverze float na unsigned integer
6 VCVT{R}{C}.S32­.F32/F64 Sd, Fm Konverze float na signed integer
7 VCVT.F32/F64.typ Fd, Fd, #bitů Konverze fixed-point na float (volitelná pozice tečky)
8 VCVT.typ.F32/F64 Fd, Fd, #bitů Konverze float na fixed-point (volitelná pozice tečky)
9 VCVTT.F16.F32 Sd,Sm Konverze single na half (do horních 16 bitů registru)
10 VCVTB.F16.F32 Sd,Sm Konverze single na half (do spodních 16 bitů registru)
11 VCVTT.F32.F16 Sd,Sm Konverze half na single
12 VCVTB.F32.F16 Sd,Sm Konverze half na single
13 VMOV.F32/F64 Fd, Fm Fd := Fm (prostá kopie)
14 VMOV Sn, Rd Sn := Rd (Rd = registr ARM procesoru)
15 VMOV Rd, Sn Rd := Sn (Rd = registr ARM procesoru)
16 VMOV Sn, Sm, Rd, Rn Sn := Rd, Sm := Rn (kopie dvou registrů)
17 VMOV Rd, Rn, Sn, Sm Rd := Sn, Rn := Sm (kopie dvou registrů)
18 VMOV Dm, Rd, Rn Dm[31:0] := Rd, Dm[63:32] := Rn (pro double jsou zapotřebí dva ARM registry)
19 VMOV Rd, Rn, Dm Rd := Dm[31:0], Rn := Dm[63:32] (pro double jsou zapotřebí dva ARM registry)
20 VMOV Dn[0], Rd Dn[31:0] := Rd (pouze spodní polovina double)
21 VMOV Rd, Dn[0] Rd := Dn[31:0] (pouze spodní polovina double)
22 VMOV Dn[1], Rd Dn[63:32] := Rd (pouze horní polovina double)
23 VMOV Rd, Dn[1] Rd := Dn[63:32] (pouze horní polovina double)
24 VMRS APSR_nzcv, FPSCR APSR flags := FPSCR flags (přenos příznaků)

9. Odkazy na Internetu

  1. The VFP architecture
    http://infocen­ter.arm.com/hel­p/index.jsp?to­pic=/com.arm.doc­.dui0056d/Bcfib­fha.html
  2. NEON
    http://www.ar­m.com/products/pro­cessors/techno­logies/neon.php
  3. ARM Floating Point Accelerator (ARM FPA)
    http://vswww.ka­ist.ac.kr/ver4­.0/index.php/re­search/past-research/arm-fpa.html
  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.php
  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/

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.