Hlavní navigace

SIMD instrukce využívané v moderních mikroprocesorech řady x86

6. 9. 2011
Doba čtení: 20 minut

Sdílet

V dnešní části seriálu o architekturách počítačů se budeme zabývat porovnáním instrukčních sad s instrukcemi typu SIMD, které jsou využívány i v moderních mikroprocesorech na platformě x86. Historicky první rozšiřující instrukční sadou je sada MMX firmy Intel a vylepšení 3DNow! od společnosti AMD.

Obsah

1. SIMD instrukce využívané v moderních mikroprocesorech

2. Instrukční sada MMX: první pokus o použití SIMD na platformě x86

3. Datové typy, s nimiž instrukce MMX pracují, aritmetické operace se saturací

4. Rozdělení MMX instrukcí do funkčních skupin

5. Registry používané jednotkou MMX

6. Instrukční sada 3DNow! aneb odpověď firmy AMD na instrukční sadu MMX

7. Datové typy instrukcí 3DNow!

8. Vektorové instrukce 3DNow!

9. Odkazy na Internetu

1. SIMD instrukce využívané v moderních mikroprocesorech

V předchozí části seriálu o architekturách počítačů jsme se seznámili s takzvanými vektorovými procesory a taktéž jsme se zmínili o Flynnově klasifikaci (rozdělení) sekvenčních a paralelních systémů do čtyř skupin označovaných většinou zkratkami SISD, SIMD, MISD a MIMD. Řekli jsme si, že v kategorii SIMD můžeme nalézt jak superpočítače zpracovávající i poměrně dlouhé vektory čísel, tak i mnohé moderní mikroprocesory, popř. GPU používané na soudobých grafických akcelerátorech. Dnes se zaměříme na popis a vzájemné porovnání dvou instrukčních sad (přesněji řečeno rozšíření původní instrukční sady) určených pro platformu x86. Prvním rozšířením instrukční sady x86 je skupina instrukcí MMX, která byla navržena a poprvé implementována ve firmě Intel. Druhým rozšířením instrukční sady je skupina instrukcí 3DNow! od konkurenční společnosti AMD, díky níž se původní rozšířená „celočíselná“ instrukční sada MMX doplnila o cca dvě desítky nových instrukcí pracujících převážně s numerickými hodnotami s plovoucí řádovou čárkou.

Obrázek 1: Zpracování obrazového signálu při jeho převodu do formátu JFIF (JPEG), kde je mj. použita i diskrétní kosinová transformace (DCT). Podobné blokové schéma lze najít u čipů pro komprimaci videa podle normy MPEG.

Jak instrukční sada MMX, tak i její vylepšení 3DNow! měly i přes některé diskutabilní vlastnosti, o nichž se zmíníme později, poměrně velký vliv na vznik dalších rozšíření původně skalární instrukční sady x86 o SIMD („vektorové“) operace. Na platformě x86 se jedná především o instrukční sady SSE, SSE2, SSE3, SSE4 atd., jejichž stručným popisem a porovnáním se budeme zabývat v některém z následujících pokračování tohoto seriálu. Způsob využití SIMD instrukcí samozřejmě závisí na charakteru aplikace, takže se s těmito instrukcemi můžeme například setkat v audio a video kodecích (zpracování datových toků), aplikacích provádějících 2D a 3D grafické operace atd. V těchto případech totiž použití SIMD instrukcí vede mnohdy i k několikaná­sobnému urychlení výpočtů, na rozdíl od běžných aplikací pracujících spíše se složitými hierarchickými datovými strukturami, kde nemusí být vliv SIMD instrukcí na dosažený výpočetní výkon žádný nebo jen velmi malý.

Obrázek 2: Schéma FIR filtru.

2. Instrukční sada MMX: první pokus o použití SIMD na platformě x86

První rozšiřující instrukční sadou obsahující SIMD operace, kterou si v tomto článku alespoň stručně popíšeme, je sada instrukcí nazvaná MMX (MultiMedia eXtension, později taktéž rozepisováno jako Matrix Math eXtension). Tato sada byla navržena v roce 1996 ve firmě Intel a od roku 1997 jí začaly být vybavovány prakticky všechny nové procesory této firmy, které patřily do rodiny x86 (připomeňme si, že se jednalo o 32bitové mikroprocesory, protože k rozšíření na 64bitovou ALU došlo u mainstreamových čipů až o několik let později). Prvním procesorem s podporou MMX byl čip Pentium P55C nabízený od začátku roku 1997. Později došlo k implementaci MMX i na čipy Pentium II a procesory konkurenčních společností, konkrétně na čipy AMD K6 a taktéž na Cyrix M2 (6×86MX) a IDT C6. Na tomto místě je nutné říci, že se vlastně nejednalo o nijak přelomovou technologii, protože v instrukční sadě MMX jsou použity instrukce analogické instrukcím ze SPARC VIS (VIS=Visual Instruction Set), MIPS MDMX či HP-PA MAX-1 a HP-PA MAX-2 (opět se tedy jedná o technologii inspirovanou RISCovými procesory).

Obrázek 3: Jedna z poměrně složitých, ale užitečných instrukcí z instrukční sady MMX. Jedná se o instrukci PMADDWD, která provádí paralelní součin čtveřice šestnáctibitových hodnot s 32 bitovým mezivýsledkem, s následným součtem prvního + druhého a třetího + čtvrtého mezivýsledku. Tuto instrukci lze použít například při implementaci konvolučních filtrů.
(Zdroj: Intel MMXTM Technology Overview, Intel corporation, 1996)

Jedním z důvodů zavedení těchto nových instrukcí byla snaha firmy Intel o konstrukci osobních počítačů s minimálním množstvím specializovaných čipů na základní desce i na přídavných kartách. Většinu operací měl totiž provádět samotný mikroprocesor, ať již se jednalo o zpracování zvuku (softwarový mix), ovládání periferních zařízení (programová implementace bufferů atd.) tak i o softwarovou implementaci kodeků, včetně kodeků používaných v modemech (právě v té době došlo k rozvoji takzvaných softwarových modemů, jejichž příslušenství se zúžilo na pouhé rozhraní pro analogovou telefonní linku). V rámci instrukční sady MMX se na původně prakticky ryze skalární platformu x86 přidalo celkem 57 nových instrukcí a čtyři datové typy, které byly těmito instrukcemi podporovány. Jeden z nově zaváděných datových typů je skalární, další tři nové datové typy jsou představovány dvouprvkovým, čtyřprvkovým a osmiprvkovým vektorem (viz též podrobnější popis uvedený v navazující kapitole).

Obrázek 4: Ukázka jednoho typu konverzní funkce, kterých se v instrukční sadě MMX nachází několik.
(Zdroj: Intel MMXTM Technology Overview, Intel corporation, 1996)

3. Datové typy, s nimiž instrukce MMX pracují, aritmetické operace se saturací

Většina nových instrukcí přidaných v rámci sady MMX byla určena pro provádění aritmetických a bitových operací s celočíselnými operandy o šířce 8, 16, 32 či 64 bitů, což pokrývá poměrně širokou oblast multimediálních dat – osmibitových i šestnáctibitových zvukových vzorků (samplů), barev pixelů (RGB, RGBA) atd. Zatímco při provádění aritmetických operací s využitím klasické aritmeticko-logické jednotky mohlo docházet k přetečení či podtečení hodnot při provádění instrukcí typu ADD či SUB (součet, rozdíl), je možné u MMX instrukcí zvolit i takzvanou aritmetiku se saturací, což znamená, že v případě přetečení se do výsledku uloží maximální reprezentovatelná hodnota a naopak při podtečení minimální hodnota, což je například při zpracování signálu (většinou) žádoucí chování, V následující tabulce jsou vypsány nově podporované datové typy i způsob jejich uložení ve slovech o šířce 64 bitů, které jsou zpracovávány jednotkou MMX:

Datový typ Bitová šířka operandu Počet prvků vektoru
packed byte 8 bitů 8
packed word 16 bitů 4
packed doubleword 32 bitů 2
quadword 64 bitů 1

Obrázek 5: Ukázka chování MMX instrukce PADDW, která provádí součet čtveřice šestnáctibitových hodnot s přetečením, což je patrné z posledního sloupce.
(Zdroj: Intel MMXTM Technology Overview, Intel corporation, 1996)

Kromě přímé manipulace s celočíselnými hodnotami bylo relativně snadné pracovat i s numerickými hodnotami ukládanými ve formátu s pevnou řádovou čárkou (FX – fixed point), mohlo se například jednat o formáty 8.8 (osm bitů pro uložení celé části a osm bitů za řádovou čárkou), 8.24, 24.8 atd. O případné bitové posuny při normalizaci numerických hodnot se v tomto případě musel starat programátor. Tyto formáty byly a jsou využívány v některých algoritmech implementujících FFT (rychlou Fourierovu transformaci využívanou v mnoha algoritmech pro zpracování signálů), DCT (diskrétní kosinovou transformaci využívanou například ve formátu JFIF-JPEG), FIR, IIR (filtry s konečnou a nekonečnou impulsní odezvou), operacemi nad vektory či operacemi nad maticemi.

Obrázek 6: MMX instrukce PADDUSW, která sice také provádí součet čtveřice šestnáctibitových hodnot, ovšem součet je proveden se saturací – v případě, že se výsledek součtu již nemůže reprezentovat šestnáctibitovou hodnotou, uloží se namísto výsledku hodnota 0×FFFF, tj. nejvyšší šestnáctibitové celé číslo bez znaménka.
(Zdroj: Intel MMXTM Technology Overview, Intel corporation, 1996)

4. Rozdělení MMX instrukcí do funkčních skupin

Všech 57 instrukcí v instrukční sadě MMX lze rozdělit podle jejich funkce do několika skupin vypsaných v následující tabulce:

# Skupina instrukcí Příklady instrukcí
1 Základní aritmetické operace PADD, PADDS, PADDUS, PSUBS, PSUBUS, PMULHW, PMULLW
2 Logické (bitové) operace PAND, PANDN, POR, PXOR
3 Bitové posuny PSLL, PSRL, PSRA
4 Porovnávání PCMPEQ, PCMGT
5 Konverze dat PACKUSWB, PACKSS, PUNPCKH, PUNPCKL
6 Přenosy dat + práce s pamětí MOV
7 Řízení jednotky MMX EMMS

Obrázek 7: Zdrojový rastrový obrázek (známá fotografie Lenny), který tvoří zdroj pro jednoduchý konvoluční (FIR) filtr, jenž zvyšuje hodnoty pixelů o pevně zadanou konstantu (offset).

Většina instrukcí uvedených v předchozí tabulce má navíc několik variant v závislosti na tom, s jakými operandy má instrukce ve skutečnosti pracovat. Například u instrukce PADD (součet) je možné zvolit, zda se mají sečíst dva osmiprvkové vektory, kde každý prvek má šířku 8 bitů, zda se má provést součet dvou čtyřprvkových vektorů (16bitové prvky), dvou dvouprvkových vektorů (32bitové prvky) či zda se jedná o součet dvojice 64bitových skalárních hodnot. To tedy znamená, že instrukce PADD může být reprezentována čtveřicí operačních kódů:

# Instrukce Význam
1 PADDB součet dvou vektorů majících osm osmibitových prvků
2 PADDW součet dvou vektorů majících čtyři šestnáctibito­vé prvky
3 PADDD součet dvou vektorů majících dva 32bitové prvky
4 PADDQ součet dvou 64bitových skalárních hodnot

Výjimkou z výše uvedeného pravidla jsou instrukce PAND, PANDN, POR a PXOR, pomocí nichž lze provádět bitové operace s dvojicí 64bitových slov. Důvod, proč není zapotřebí tyto instrukce dále rozdělovat podle počtu a šířky prvků vektorů, je zřejmý – tyto operace pracují nad jednotlivými bity, nikoli nad skupinami bitů. Na tomto místě je možná dobré upozornit na instrukci PANDN (not-and), která sice není ve většině běžných (skalárních) aritmeticko-logických jednotkách implementována, ovšem v případě zpracování rastrových obrazů se jedná o velmi užitečnou instrukci používanou například při vykreslování spritů atd.

Obrázek 8: Pokud je pro přičtení offsetu použita operace součtu se zanedbáním přenosu (carry), tj. když se počítá systémem „modulo N“ (viz též výše zmíněná instrukce PADDB), dochází při překročení maximální hodnoty pixelu (čistě bílá barva) k viditelným chybám.

5. Registry používané jednotkou MMX

Inženýři ve firmě Intel stáli při návrhu instrukční sady MMX před požadavkem na vytvoření výkonných instrukcí provádějících SIMD operace, na druhou stranu však bylo nutné šetřit počtem tranzistorů a tím pádem i plochou čipu, na němž byl mikroprocesor vytvořen. Pravděpodobně právě z tohoto důvodu se rozhodli učinit poněkud problematický krok – navrhli MMX instrukce takovým způsobem, aby mohly pracovat s osmicí 64bitových registrů rozdělených na jeden, dva, čtyři či osm prvků. Ovšem nejednalo se o nové registry rozšiřující původní sadu registrů procesoru Pentium, ale o část registrů využívaných matematickým koprocesorem (FPU). Ten na platformě x86 prováděl operace s osmicí 80bitových registrů uspořádaných do zásobníku (u matematického koprocesoru Intel 8087 byly používány čistě zásobníkové instrukce, později byly přidány i další adresovací režimy, které umožňovaly registry adresovat přímo, což se ukázalo být výhodnější především kvůli možnostem provádění různých optimalizací).

Obrázek 9: Při použití operace součtu se saturací sice taktéž dojde ke ztrátě informace (vzniknou oblasti s pixely majícími hodnotu 255), ovšem viditelná chyba je mnohem menší, než na předchozím obrázku. Tento filtr by bylo možné realizovat s využitím instrukce PADDUSB s rychlostí výpočtu 8 pixelů/instruk­ci.

V případě instrukcí MMX se sice registry adresovaly přímo (popř. se adresovala slova uložená v operační paměti, která mohla tvořit jeden z operandů), ale kvůli tomu, že jak FPU, tak i jednotka MMX pracovala se shodnými registry (horních 16 bitů nebylo využito), bylo současné používání SIMD operací a operací s hodnotami uloženými v systému plovoucí řádové čárky poměrně komplikované, což je škoda, protože právě souběžná práce superskalárního CPU (u mikroprocesorů Pentium byly vytvořeny dvě instrukční pipeline „u“ a „v“), jednotky MMX a navíc ještě matematického koprocesoru by v mnoha případech mohla vést k citelnému nárůstu výpočetního výkonu. V následující tabulce jsou vypsána jména registrů tak, jak jsou použita v instrukcích matematického koprocesoru, i ve formě používané jednotkou MMX:

Registr FPU bity 79–64 bity 63–0
ST0 nepoužito MM0
ST1 nepoužito MM1
ST2 nepoužito MM2
ST3 nepoužito MM3
ST4 nepoužito MM4
ST5 nepoužito MM5
ST6 nepoužito MM6
ST7 nepoužito MM7

Obrázek 10: Typy vektorů, s nimiž pracují instrukce MMX.

6. Instrukční sada 3DNow! aneb odpověď firmy AMD na instrukční sadu MMX

Rozšíření instrukční sady procesorů z rodiny x86 o instrukce MMX bylo poměrně razantní – jednalo se v podstatě o největší změnu této architektury od vzniku procesoru 80386, tj. od zavedení virtuálního režimu, 32bitových registrů a operací s 32 bitovými hodnotami. Z hlediska společnosti Intel se samozřejmě jednalo o nemalou konkurenční výhodu získanou nad firmami AMD, Cyrix či IDT, zejména poté, co se podpora MMX operací zařadila do některých programových produktů (například do zásuvných modulů Photoshopu). Ovšem tehdejší druhý největší výrobce čipů x86 – společnost AMD – o necelé dva roky později představila vlastní rozšíření instrukční sady, které bylo označeno poměrně nabubřelým názvem 3DNow! (včetně onoho vykřičníku na konci). Toto rozšíření instrukční sady bylo poprvé implementováno v mikroprocesoru AMD K6–2 a později též v AMD K6–3 a Athlon.

Obrázek 11: Mikroprocesor AMD K6–2 implementující mj. i instrukční sadu 3DNow!

Inženýři z firmy AMD použili a současně i rozšířili instrukční sadu MMX o několik nových celočíselných instrukcí, ovšem hlavní konkurenční výhodou (a to poměrně podstatnou) byly nové instrukce pro práci s čísly reprezentovanými 32bitovými hodnotami s plovoucí řádovou čárkou. Kromě toho bylo do instrukční sady 3DNow! přidáno několik operací sloužících pro přečtení bloku dat do vyrovnávací paměti (cache). U některých typů procesorů (Athlon) bylo navíc možné určit, zda je blok dat načtených do vyrovnávací paměti určený pro čtení nebo i pro zápis (pokud se jednalo o blok určený pro zápis, byl mu nastaven atribut modified).

Obrázek 12: Další pohled na mikroprocesor AMD K6–2 s implementací instrukční sady 3DNow!.

7. Datové typy instrukcí 3DNow!

Již v předchozí kapitole jsme se zmínili o tom, že instrukční sada 3DNow! byla vlastně rozšířením instrukční sady MMX. To mj. znamená, že byly podporovány všechny datové typy MMX, tj. osmiprvkové vektory s osmibitovými hodnotami, čtyřprvkové vektory s 16bitovými hodnotami, dvouprvkové vektory s 32bitovými hodnotami a konečně i 64bitové skalární hodnoty. Navíc však bylo možné do 64bitových registrů MMX uložit dvojici 32bitových čísel s plovoucí řádovou čárkou odpovídající formátu single precision definovaném v normě IEEE 754. Zavedení tohoto nového typu dvouprvkového vektoru s sebou přinášelo dvě výhody: mnohé FP operace se mohly provádět paralelně (součet prvků vektorů atd.) a navíc bylo velmi snadné kombinovat původní celočíselné MMX operace s operacemi nad reálnými čísly. To nebylo u původní implementace MMX snadné, protože se muselo provádět přepínání mezi činností matematického koprocesoru a jednotkou MMX.

Obrázek 13: Mikroprocesor Intel Atom sice implementuje instrukční sadu MMX, ale nikoli 3Dnow!, což je ovšem kompenzováno podporou SSE a SSE2.

V případě instrukční sady 3DNow! se toto přepínání provádět nemuselo (pokud tedy nebylo nutné pracovat s hodnotami s dvojitou či rozšířenou přesností, tj. s datovými typy double a extended), navíc měli programátoři k dispozici konverzní instrukce PI2FD a PF2ID pro převod celočíselných 32bitových hodnot na hodnoty s plovoucí řádovou čárkou (se zaokrouhlením) a naopak. Mimochodem: pro přepnutí kontextu mezi FPU operacemi a MMX/3DNow! operacemi bylo možné použít instrukci FEMMS pro rychlé přepnutí kontextu. Tato operace je rychlejší, než původní instrukce EMMS ze sady MMX, ovšem po přepnutí je obsah pracovních registrů nedefinovaný (což většinou nevadí).

Obrázek 14: Uložení dvou 32bitových čísel s plovoucí řádovou čárkou v 64bitovém registru.
(Zdroj: 3Dnow! Technology Manual, AMD Inc.)

8. Vektorové instrukce 3DNow!

Všechny vektorové instrukce provádějící operace s 32bitovými numerickými hodnotami s plovoucí řádovou čárkou, které jsou implementovány v instrukční sadě 3DNow!, jsou vypsány v následující tabulce:

# Instrukce Popis
1 PI2FD převod 32bitových celočíselných hodnot na FP hodnoty
2 PF2ID převod 32bitových FP hodnot na celočíselné hodnoty
3 PFCMPGE porovnání na relaci „větší nebo rovno“
4 PFCMPGT porovnání na relaci „větší než“
5 PFCMPEQ porovnání na relaci „rovnost“
6 PFACC součet obou prvků zdrojového registru i obou prvků cílového registru
7 PFADD součet dvou dvouprvkových vektorů
8 PFSUB rozdíl dvou dvouprvkových vektorů
9 PFSUBR rozdíl dvou dvouprvkových vektorů s prohozením operandů
10 PFMIN výpočet minima (vždy mezi příslušnými prvky vektorů)
11 PFMAX výpočet maxima (vždy mezi příslušnými prvky vektorů)
12 PFMUL součin dvou dvouprvkových vektorů
13 PFRCP výpočet aproximace převrácené hodnoty
14 PFRSQRT výpočet aproximace druhé odmocniny
15 PFRCPIT1 první krok přesného výpočtu převrácené hodnoty
16 PFRSQIT1 první krok přesného výpočtu druhé odmocniny
17 PFRCPIT2 další krok výpočtu převrácené hodnoty či druhé odmocniny

Obrázek 15: Formát 32bitových čísel s plovoucí řádovou čárkou podporovaný instrukcemi 3Dnow!)
(Zdroj: 3Dnow! Technology Manual, AMD Inc.)

Při provádění porovnání prvků dvou vektorů, tj. při provádění instrukcí PFCMPGE, PFCMPGT a PFCMPEQ, je výsledkem této operace nový dvouprvkový vektor obsahující pouze hodnoty 0×0000_0000 a 0×FFFF_FFFF. U porovnávání se navíc nerozlišuje kladná a záporná nula.

Pravděpodobně nejzajímavější je poslední pětice instrukcí PFRCP, PFRSQRT, PFRCPIT1, PFRSQIT1 a PFRCPIT2. Instrukce PFRCP slouží k rychlému výpočtu převrácené hodnoty, ovšem pouze s přesností na 14 bitů. Pokud tato přesnost není dostatečná (pro mnoho účelů však stačí), musí být použita následující sekvence:

CS24 tip temata

PFRCP      ; první přiblížení k výsledku s přesností 14 bitů
PFCPIT1    ; první krok přesného výpočtu převrácené hodnoty
PFRCPIT2   ; druhý krok přesného výpočtu převrácené hodnoty

Důležité je, že první přiblížení se k výsledku je provedeno velmi rychle, konkrétně pouze ve dvou taktech, protože se využívá tabulky výsledků umístěné v paměti ROM. Teprve další dvojice instrukcí využívá pomalejší iterační výpočet. Podobný princip platí i pro rychlý vs. přesný výpočet druhé odmocniny.

Obrázek 16: Subrutina pro operaci dělení s 24 bitovou přesností implementovanou pomocí instrukcí 3Dnow!.
(Zdroj: 3Dnow! Technology Manual, AMD Inc.)

9. Odkazy na Internetu

  1. 3Dnow! Technology Manual
    AMD Inc., 2000
  2. Intel MMXTM Technology Overview
    Intel corporation, 1996
  3. MultiMedia eXtensions
    http://softpi­xel.com/~cwrig­ht/programmin­g/simd/mmx.phpi
  4. Great Microprocessors of the Past and Present: Motorola 88000, Late but elegant (mid 1988) . . . .
    http://www.unix­hub.com/docs/mis­c/cpu.html#88000
  5. badabada.org (rozcestník s informacemi čipech Motorola 88000)
    http://badaba­da.org/index.html
  6. Motorola 88000 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mo­torola_88000
  7. Motorola MC88100 (Wikipedia)
    http://en.wiki­pedia.org/wiki/MC88100
  8. Motorola MC88110 (Wikipedia)
    http://en.wiki­pedia.org/wiki/MC88110
  9. AMD Am29000 microprocessor family
    http://www.cpu-world.com/CPUs/29­000/
  10. AMD 29k (Streamlined Instruction Processor) ID Guide
    http://www.cpushac­k.com/Am29k.html
  11. AMD Am29000 (Wikipedia)
    http://en.wiki­pedia.org/wiki/AM­D_Am29000
  12. AMD K5 („K5“ / „5k86“)
    http://www.pcgu­ide.com/ref/cpu­/fam/g5K5-c.html
  13. Sixth Generation Processors
    http://www.pcgu­ide.com/ref/cpu­/fam/g6.htm
  14. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  15. Philip Koopman: Stack Computers: the new wave
    http://www.ece­.cmu.edu/~koop­man/stack_com­puters/conten­ts.html
  16. Hewlett Packard PA-8800 RISC (LOSTCIRCUITS)
    http://www.los­tcircuits.com/mam­bo//index.php?op­tion=com_conten­t&task=view&id=42&I­temid=42
  17. PA-RISC 1.1 Architecture and Instruction Set Reference Manual
    http://h21007­.www2.hp.com/por­tal/download/fi­les/unprot/pa­risc/pa1–1/acd.pdf
  18. PA-RISC (Wikipedia)
    http://en.wiki­pedia.org/wiki/PA-RISC
  19. The Great CPU List: Part VI: Hewlett-Packard PA-RISC, a conservative RISC (Oct 1986)
    http://jbayko­.sasktelwebsi­te.net/cpu4.html
  20. HP 9000/500 FOCUS
    http://www.open­pa.net/system­s/hp-9000_520.html
  21. HP FOCUS Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/HP_FO­CUS
  22. HP 3000 (Wikipedia)
    http://en.wiki­pedia.org/wiki/HP_3000
  23. The SPARC Architecture Manual Version 8 (manuál v PDF formátu)
    http://www.spar­c.org/standar­ds/V8.pdf
  24. The SPARC Architecture Manual Version 9 (manuál v PDF formátu)
    http://develo­pers.sun.com/so­laris/articles/spar­cv9.pdf
  25. SPARC Pipelining
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/pipelining.html
  26. SPARC Instruction
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/inst_set.html
  27. SPARC Instruction Set
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/inst_set.html
  28. MIPS Architecture Overview
    http://tams-www.informatik.uni-hamburg.de/ap­plets/hades/web­demos/mips.html
  29. MIPS Technologies R3000
    http://www.cpu-world.com/CPUs/R3­000/
  30. The MIPS Register Usage Conventions
    http://pages.cs­.wisc.edu/~cs354–2/beyond354/con­ventions.html
  31. C.E. Sequin and D.A.Patterson: Design and Implementation of RISC I
    http://www.eec­s.berkeley.edu/Pub­s/TechRpts/1982/CSD-82–106.pdf
  32. Berkeley RISC
    http://en.wiki­pedia.org/wiki/Ber­keley_RISC
  33. Great moments in microprocessor history
    http://www.ib­m.com/developer­works/library/pa-microhist.html
  34. Microprogram-Based Processors
    http://resear­ch.microsoft.com/en-us/um/people/gbe­ll/Computer_Struc­tures_Principles_an­d_Examples/csp0167­.htm
  35. A Brief History of Microprogramming
    http://www.cs­.clemson.edu/~mar­k/uprog.html
  36. What is RISC?
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/whatis/
  37. RISC vs. CISC
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/risccisc/
  38. RISC and CISC definitions:
    http://www.cpushac­k.com/CPU/cpu­AppendA.html
  39. The Evolution of RISC
    http://www.ib­m.com/developer­works/library/pa-microhist.html#si­debar1
  40. SPARC Processor Family Photo
    http://thenet­workisthecompu­ter.com/site/?p=243
  41. SPARC: Decades of Continuous Technical Innovation
    http://blogs.o­racle.com/onthe­record/entry/spar­c_decades_of_con­tinuous_techni­cal
  42. The SPARC processors
    http://www.top500­.org/2007_over­view_recent_su­percomputers/spar­c_processors
  43. Maurice V. Wilkes Home Page
    http://www.cl­.cam.ac.uk/ar­chive/mvw1/
  44. Papers by M. V. Wilkes (důležitá je především jeho práce číslo 35)
    http://www.cl­.cam.ac.uk/ar­chive/mvw1/list-of-papers.txt
  45. Microprogram Memory
    http://free-books-online.org/com­puters/advanced-computer-architecture/mi­croprogram-memory/
  46. First Draft of a report on the EDVAC
    http://qss.stan­ford.edu/~god­frey/vonNeuman­n/vnedvac.pdf
  47. Introduction to Microcontrollers
    http://www.pic24mi­cro.com/cisc_vs_ris­c.html
  48. Reduced instruction set computing (Wikipedia)
    http://en.wiki­pedia.org/wiki/Re­duced_instruc­tion_set_compu­ter
  49. MIPS architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIP­S_architecture
  50. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  51. Classic RISC pipeline (Wikipedia)
    http://en.wiki­pedia.org/wiki/Clas­sic_RISC_pipe­line
  52. R2000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R2000_(mi­croprocessor)
  53. R3000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R3000
  54. R4400 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R4400
  55. R8000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R8000
  56. R10000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R10000
  57. SPARC (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sparc
  58. SPARC Tagged Data – otázka
    http://compiler­s.iecc.com/com­parch/article/91–04–079
  59. SPARC Tagged Data – odpověď #1
    http://compiler­s.iecc.com/com­parch/article/91–04–082
  60. SPARC Tagged Data – odpověď #2
    http://compiler­s.iecc.com/com­parch/article/91–04–088
  61. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  62. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  63. Microcode (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crocode
  64. Microsequencer (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crosequencer
  65. Maurice Wilkes (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mau­rice_Wilkes
  66. Micro-operation (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­cro-operation
  67. b16 stack processor
    http://www.jwdt­.com/~paysan/b16­.html
  68. Color Forth (Chuck Moore home page)
    http://www.co­lorforth.com/
  69. colorForth Instructions
    http://www.co­lorforth.com/in­st.htm
  70. SEAforth 40C18
    http://www.in­tellasys.net/in­dex.php?option=com_con­tent&task=view&id=60&I­temid=75
  71. Bit slicing
    http://en.wiki­pedia.org/wiki/Bit_sli­cing
  72. Bitslice DES
    http://www.dar­kside.com.au/bit­slice/
  73. Great Microprocessors of the Past and Present: Part VII: Advanced Micro Devices Am2901, a few bits at a time …
    http://www.cpushac­k.com/CPU/cpu­1.html#Sec1Par­t7
  74. Cray History
    http://www.cra­y.com/About/His­tory.aspx?404;http:­//www.cray.com:80/a­bout_cray/his­tory.html
  75. Cray Historical Timeline
    http://www.cra­y.com/Assets/PDF/a­bout/CrayTime­line.pdf
  76. Seymour Cray Biography
    http://www.cra­y.com/Assets/PDF/a­bout/SeymourCra­y.pdf
  77. Company: Cray Research, Inc. (Computer History)
    http://www.com­puterhistory.or­g/brochures/com­panies.php?al­pha=a-c&company=com-42b9d5d68b216
  78. Cray Wiki
    http://www.cra­ywiki.com/index­.php?title=Ma­in_Page
  79. Seymour Cray
    http://www.cra­ywiki.com/index­.php?title=Se­ymour_Cray
  80. Cray (Wikipedia)
    http://en.wiki­pedia.org/wiki/Cray
  81. Cray-1 (Cray Wiki)
    http://www.cra­ywiki.com/index­.php?title=Cra­y_1S
  82. Cray-1 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Cray-1
  83. Cray X-MP (Wikipedia)
    http://en.wiki­pedia.org/wiki/Cra­y_X-MP
  84. Cray-2 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Cray-2
  85. What Limits Forecast Accuracy?
    http://weather­.mailasail.com/Fran­ks-Weather/Forecast-Accuracy-Limitations
  86. Remembering the Cray-1
    http://www.the­register.co.uk/2008/01/­05/tob_cray1/
  87. Cray Supercomputer FAQ and other documents
    http://www.spi­kynorman.dsl.pi­pex.com/CrayW­WWStuff/index­.html
  88. Cray Research and Cray computers FAQ Part 1
    http://www.spi­kynorman.dsl.pi­pex.com/CrayW­WWStuff/Cfaqp1­.html#TOC
  89. Cray Research and Cray computers FAQ Part 2
    http://www.spi­kynorman.dsl.pi­pex.com/CrayW­WWStuff/Cfaqp2­.html#TOC1
  90. Cray Research and Cray computers FAQ Part 3
    http://www.spi­kynorman.dsl.pi­pex.com/CrayW­WWStuff/Cfaqp3­.html#TOC1
  91. Cray Research and Cray computers FAQ Part 4
    http://www.spi­kynorman.dsl.pi­pex.com/CrayW­WWStuff/Cfaqp4­.html#TOC1
  92. Cray Research and Cray computers FAQ Part 5
    http://www.spi­kynorman.dsl.pi­pex.com/CrayW­WWStuff/Cfaqp5­.html#TOC1
  93. The making of a CRAY-3
    http://www.cis­l.ucar.edu/doc­s/SCD_Newslet­ter/News_summer93/04e­.cray3.html
  94. Computer Speed Claims 1980 to 1996
    http://homepa­ge.virgin.net/ro­y.longbottom/mip­s.htm

Autor článku

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