Procesory RISC v pracovních stanicích a serverech - architektura SPARC V8 a V9

21. 6. 2011
Doba čtení: 17 minut

Sdílet

V dnešní části seriálu o architekturách počítačů budeme pokračovat v popisu RISCových procesorů SPARC. Zaměříme se především na architektury SPARC-V8 (rozšíření minule popsané SPARC-V7) a taktéž na architekturu SPARC-V9, v níž došlo mj. i k přechodu z 32bitové ALU a pracovních registrů na 64bitovou šířku zpracovávaných dat, což mělo poměrně velký význam především v oblasti výkonných serverů.

Obsah

1. Architektura SPARC-V8

2. Násobení a dělení celých čísel na procesorech s architekturou SPARC-V8

3. Pracovní registry a registrová okna

4. Jednotka pro výpočty s hodnotami s plovoucí řádovou čárkou (FPU)

5. Instrukční sada jednotky pro výpočty s hodnotami s plovoucí řádovou čárkou (FPU)

6. Formáty numerických hodnot s plovoucí řádovou čárkou

7. Architektura SPARC-V9 a procesory UltraSPARC

8. Podmíněné přesuny dat (conditional moves)

9. Odkazy na Internetu

1. Architektura SPARC-V8

V minulé a předminulé části seriálu o architekturách počítačů jsme si řekli základní informace o vlastnostech RISCových mikroprocesorů založených na architektuře SPARC-V7. Po poměrně velkém úspěchu mikroprocesorů odpovídajících specifikaci SPARC-V7 vznikly na začátku devadesátých let minulého století i dvě navazující architektury (připomeňme si, že označením SPARC-Vx jsou myšleny mikroprocesory od různých výrobců majících shodnou instrukční sadu a minimální specifikovaný počet registrových oken; ostatní vlastnosti mikroprocesorů již závisely na volbě jejich výrobce). První z těchto architektur je SPARC-V8 z roku 1990. Tato architektura byla i přes některá vylepšení stále založena na 32bitové aritmeticko-logické jednotce a taktéž sadě 32bitových pracovních registrů. Zajímavé je, že ve stejném čase, tj. na přelomu let 1989 a 1990, vznikl i mikroprocesor Intel 80486, který i přes zachování původní architektury CISC obsahoval instrukční pipeline převzatou právě z RISCových procesorů.

Obrázek 1: Jeden z mikroprocesorů s architekturou SPARC-V7. Jedná se o čip Fujitsu SPARC MB86900 z roku 1986. Tento mikroprocesor vyrobený 1,3 mikronovou technologií používal frekvenci hodinového signálu 15 MHz a napájecí napětí 5V (jako většina dalších mikroprocesorů pocházejících z tohoto období).
Zdroj: cpu-collection.de

Vraťme se však zpět k architektuře mikroprocesorů SPARC. Velká změna nastala s příchodem architektury SPARC-V9, v níž je již specifikováno použití 64bitové aritmeticko-logické jednotky i 64bitových registrů. Kromě této novinky obsahovala specifikace architektury SPARC-V9 i podporu pro superskalární procesory, tj. pro procesory, které dokážou v jednom taktu zpracovávat větší množství instrukcí nacházejících se ve stejné fázi (operaci) – to je poměrně zásadní vylepšení stávající klasické RISCové architektury, v níž se sice taktéž v jednom taktu zpracovávalo více instrukcí, ovšem každá instrukce se nacházela v jiné fázi (IF: instruction fetch, ID: instruction decode, EX: execute, MA: memory access, WB: write-back).

Obrázek 2: Mikroprocesor s architekturou SPARC-V7 upravený pro použití ve vestavěných zařízeních. Frekvence hodinového signálu dosahovala 20 MHz, popř. 25 MHz.
Zdroj: cpu-collection.de

2. Násobení a dělení celých čísel na procesorech s architekturou SPARC-V8

Pravděpodobně nejviditelnější změnou, s níž se programátoři mikroprocesorů s architekturou SPARC-V8 setkali, bylo přidání nových instrukcí určených pro provedení aritmetické operace celočíselného násobení a dělení. V předchozí části tohoto seriálu jsme si řekli, že v instrukční sadě procesorů SPARC-V7 lze najít instrukci MULScc, neboli Multiply Step and Modify icc, která dokázala při svém zavolání provést jeden krok násobení dvojice 32bitových celých čísel s 64bitovým mezivýsledkem (polovina mezivýsledku se ukládala do pomocného speciálního registru Y ležícího mimo sadu 32 viditelných pracovních registrů). Optimalizovaný programový kód pro násobení dokázal s pomocí instrukce MULScc vynásobit dvě celá čísla bez znaménka za 47 strojových cyklů, popř. dvě celá čísla se znaménkem za 51 strojových cyklů, což sice není zanedbatelná doba, ale operace násobení i dělení trvaly poměrně dlouho i u dalších dobových mikroprocesorů, které je měly implementovány přímo v mikrokódu (80×86).

Obrázek 3: Mikroprocesor SuperSPARC vyráběný přímo společností Sun Microsystems. Tento čip z roku 1992 byl již založený na zde popisované architektuře SPARC-V8 a jeho hodinová frekvence dosahovala 40 MHz. I přes použití modernější 0,8 mikronové technologie však napájecí napětí zůstalo na hodnotě 5V.

U mikroprocesorů s architekturou SPARC-V8 bylo kromě výše zmíněné instrukce MULScc možné využít i další instrukce určené pro celočíselné násobení a dělení s volbou, zda se jedná o čísla se znaménkem či bez znaménka a zda se mají po provedení požadované operace nastavit i příznakové bity. Všechny tyto instrukce jsou tříadresové, tj. v instrukčním slově obsahují dva zdrojové operandy a index registru pro uložení výsledku:

# Instrukce Význam
1 MULScc provedení jednoho kroku násobení (převzato z V7)
2 UMUL násobení dvojice celočíselných hodnot bez znaménka
3 SMUL násobení dvojice celočíselných hodnot se znaménkem
4 UDIV dělení dvojice celočíselných hodnot bez znaménka
5 SDIV dělení dvojice celočíselných hodnot se znaménkem
6 UMULcc odpovídá instrukci UMUL, ovšem nastaví i příznakové bity
7 SMULcc odpovídá instrukci SMUL, ovšem nastaví i příznakové bity
8 UDIVcc odpovídá instrukci UDIV, ovšem nastaví i příznakové bity
9 SDIVcc odpovídá instrukci SDIV, ovšem nastaví i příznakové bity

Obrázek 4: Další typ mikroprocesoru SuperSPARC vyráběný společností Sun Microsystems.

3. Pracovní registry a registrová okna

V předchozí části seriálu o architekturách počítačů bylo mj. zobrazeno i schéma rozdělení sady 32 viditelných pracovních registrů na osmici registrů globálních a 24 registrů umístěných v takzvaném registrovém okně (zde se registry rozdělují do osmic nazvaných ins, locals a outs). Mikroprocesory SPARC obsahují speciální registr nazvaný PSR (což je zkratka plného názvu Processor State Register), v němž je mimo dalších informací obsaženo i bitové pole nazvané CWP (Current Window Pointer), jehož hodnota je zvyšována a snižována instrukcemi SAVE, RESTORE a RETT (RETurn from Trap). První dvě instrukce se typicky používají při volání subrutin, ovšem záleží jen na programátorovi či překladači, jestli tyto instrukce skutečně použije, protože některé subrutiny lze volat bez toho, aby se musela hodnota registrů uchovat (což neznamená nic jiného, než posun registrového okna, popř. odložení celého okna do operační paměti).

Obrázek 5: Mikroprocesor s architekturou MicroSPARC (založeno na SPARC-V8) vyráběný firmou Fujitsu pro společnost Sun Microsystems.

Na následujícím schématu je ukázáno překrytí registrových oken pro hodnotu CWP-1, CWP a CWP+1, tj. za situace, kdy je z hlavního programu volána nějaká subrutina, v níž je opět provedeno volání subrutiny. Z tohoto schématu je patrné, že do volané subrutiny lze snadno předat až čtrnáct parametrů – sedm z nich přes globální registry (osmým globálním registrem je „trvalá nula“) a dalších sedm parametrů přes překrývající se část dvou registrových oken. Osmý překrývající se registr slouží pro úschovu návratové adresy, která se zde uloží pomocí instrukce CALL automaticky, popř. lze využít i instrukcí JMPL (jump and link), u níž sice lze specifikovat libovolný pracovní registr sloužící pro uložení návratové adresy, ale většinou se jedná právě o pracovní registr s indexem 15:

CWP+1                 CWP                   CWP-1

+-----------------+
| %i7 (ret.addr.) |
+-----------------+
| %f0 (frame ptr) |
+=================+
| %i5 (arg.)      |
+-----------------+
| %i4 (arg.)      |
+-----------------+
| %i3 (arg.)      |
+-----------------+
| %i2 (arg.)      |
+-----------------+
| %i1 (arg.)      |
+-----------------+
| %i0 (arg.)      |
+=================+
| %l7 (local)     |
+-----------------+
| %l6 (local)     |
+-----------------+
| %l5 (local)     |
+-----------------+
| %l4 (local)     |
+-----------------+
| %l3 (local)     |
+-----------------+
| %l2 (local)     |
+-----------------+
| %l1 (local)     |
+-----------------+
| %l0 (local)     |
+=================+   +-----------------+
| %o7 (ra)        |   | %i7 (ret.addr.) |
+-----------------+   +-----------------+
| %sp (stack ptr.)|   | %f0 (frame ptr) |
+-----------------+   +=================+
| %o5             |   | %i5 (arg.)      |
+-----------------+   +-----------------+
| %o4             |   | %i4 (arg.)      |
+-----------------+   +-----------------+
| %o3             |   | %i3 (arg.)      |
+-----------------+   +-----------------+
| %o2             |   | %i2 (arg.)      |
+-----------------+   +-----------------+
| %o1             |   | %i1 (arg.)      |
+-----------------+   +-----------------+
| %o0             |   | %i0 (arg.)      |
+-----------------+   +=================+
                      | %l7 (local)     |
                      +-----------------+
                      | %l6 (local)     |
                      +-----------------+
                      | %l5 (local)     |
                      +-----------------+
                      | %l4 (local)     |
                      +-----------------+
                      | %l3 (local)     |
                      +-----------------+
                      | %l2 (local)     |
                      +-----------------+
                      | %l1 (local)     |
                      +-----------------+
                      | %l0 (local)     |
                      +=================+   +-----------------+
                      | %o7 (ra)        |   | %i7 (ret.addr.) |
                      +-----------------+   +-----------------+
                      | %sp (stack ptr.)|   | %f0 (frame ptr) |
                      +-----------------+   +=================+
                      | %o5             |   | %i5 (arg.)      |
                      +-----------------+   +-----------------+
                      | %o4             |   | %i4 (arg.)      |
                      +-----------------+   +-----------------+
                      | %o3             |   | %i3 (arg.)      |
                      +-----------------+   +-----------------+
                      | %o2             |   | %i2 (arg.)      |
                      +-----------------+   +-----------------+
                      | %o1             |   | %i1 (arg.)      |
                      +-----------------+   +-----------------+
                      | %o0             |   | %i0 (arg.)      |
                      +-----------------+   +=================+
                                            | %l7 (local)     |
                                            +-----------------+
                                            | %l6 (local)     |
                                            +-----------------+
                                            | %l5 (local)     |
                                            +-----------------+
                                            | %l4 (local)     |
                                            +-----------------+
                                            | %l3 (local)     |
                                            +-----------------+
                                            | %l2 (local)     |
                                            +-----------------+
                                            | %l1 (local)     |
                                            +-----------------+
                                            | %l0 (local)     |
                                            +=================+
                                            | %o7 (ra)        |
                                            +-----------------+
                                            | %sp (stack ptr.)|
                                            +-----------------+
                                            | %o5             |
                                            +-----------------+
                                            | %o4             |
                                            +-----------------+
                                            | %o3             |
                                            +-----------------+
                                            | %o2             |
                                            +-----------------+
                                            | %o1             |
                                            +-----------------+
                                            | %o0             |
                                            +-----------------+

+-----------------+   +-----------------+   +-----------------+
| %g7             |   | %g7             |   | %g7             |
+-----------------+   +-----------------+   +-----------------+
| %g6             |   | %g6             |   | %g6             |
+-----------------+   +-----------------+   +-----------------+
| %g5             |   | %g5             |   | %g5             |
+-----------------+   +-----------------+   +-----------------+
| %g4             |   | %g4             |   | %g4             |
+-----------------+   +-----------------+   +-----------------+
| %g3             |   | %g3             |   | %g3             |
+-----------------+   +-----------------+   +-----------------+
| %g2             |   | %g2             |   | %g2             |
+-----------------+   +-----------------+   +-----------------+
| %g1             |   | %g1             |   | %g1             |
+-----------------+   +-----------------+   +-----------------+
| %g0 (konstanta) |   | %g0 (konstanta) |   | %g0 (konstanta) |
+-----------------+   +-----------------+   +-----------------+

CWP+1                 CWP                   CWP-1

Obrázek 6: Mikroprocesor s architekturou MicroSPARC II (založeno na SPARC-V8) vyráběný firmou Fujitsu pro společnost Sun Microsystems.

4. Jednotka pro výpočty s hodnotami s plovoucí řádovou čárkou (FPU)

Ve specifikaci architektury SPARC-V8 jsou přesně stanoveny i parametry jednotky určené pro provádění operací s numerickými hodnotami uloženými v systému plovoucí řádové čárky. Tato jednotka – FPU (Floating Point Unit) – pracovala nezávisle na centrálním procesoru a měla i vlastní množinu instrukcí a sadu pracovních registrů. Celkem se jednalo o 32 registrů, z nichž každý měl šířku 32 bitů, podobně jako registry používané centrální procesorovou jednotkou. V 32bitových registrech se uchovávaly hodnoty ve formátu single specifikovaném v IEEE 754. Pokud rozsah a/nebo přesnost formátu single nedostačovala pro řešení dané úlohy, mohly se vždy dva sousední registry spojit a vytvořit tak 64bitový dvouregistr, v němž byly uloženy hodnoty ve formátu double (současně bylo možné využít šestnáct těchto dvouregistrů), opět podle IEEE 754. Dokonce bylo možné spojit čtyři pracovní registry a vytvořit tak 128bitovou hodnotu ve formátu quad (současně se jich mohlo použít osm).

Obrázek 7: Mikroprocesory UltraSPARC jsou sice pokračovateli původního 32bitového mikroprocesoru SPARC, ovšem aritmeticko-logická jednotka i pracovní registry již mají šířku 64 bitů (viz též kapitolu číslo 7).

Z předchozího odstavce je zřejmé, že počet pracovních registrů FPU odpovídá počtu registrů CPU, což samozřejmě není náhoda, protože i formát instrukcí FPU je prakticky shodný s CPU. Opět jsou tedy použity tříadresové instrukce pracující s registry FPU a navíc se v instrukční sadě nachází instrukce pro načtení či uložení registrů FPU do operační paměti (load and store), popř. instrukce sloužící pro provádění konverzí mezi celými čísly (integer) a typem/formátem single, double či quad. Instrukční sada FPU byla navržena s ohledem na všeprostupující filozofii RISC, tj. obsahuje pouze základní operace s numerickými hodnotami a navíc poněkud komplexnější, ale o to používanější instrukci pro výpočet druhé odmocniny, nikoli například instrukce sloužící pro výpočty goniometrických či logaritmických funkcí (v tom spočívá poměrně zásadní odlišnost od matematických koprocesorů řady 80×87, které navíc pracovaly pouze s osmicí registrů tvořících zásobník).

Obrázek 8: UltraSPARC II – další v minulosti velmi často používaný mikroprocesor s architekturou RISC.
Zdroj: Wikipedia.

5. Instrukce jednotky pro výpočty s hodnotami s plovoucí řádovou čárkou (FPU)

V následující tabulce jsou vypsány prakticky všechny instrukce jednotky FPU mikroprocesorů odpovídajících specifikaci SPARC-V8, kromě instrukcí sloužících pro načtení a uložení registrů do operační paměti a pro provedení příslušných konverzí mezi celými čísly integer a single/double/qu­ad. Pozornost si zasluhují především poslední tři instrukce pro porovnání obsahu dvou registrů, které mohou vygenerovat výjimku v případě, že alespoň jeden z těchto registrů obsahuje hodnotu NaN (Not a Number). Tato speciální hodnota vzniká například jako důsledek výpočtu druhé odmocniny z -1 nebo provedení dělení 0÷0:

Instrukce Význam
FsTOd konverze single na double
FsTOq konverze single na quad
FdTOs konverze double na single
FdTOq konverze double na quad
FqTOs konverze quad na single
FqTOd konverze quad na double
   
Instrukce Význam
FSQRTs druhá odmocnina (pro typ single)
FSQRTd druhá odmocnina (pro typ double)
FSQRTq druhá odmocnina (pro typ quad)
   
Instrukce Význam
FADDs součet single
FADDd součet double
FADDq součet quad
FSUBs rozdíl single
FSUBd rozdíl double
FSUBq rozdíl quad
FMULs součin single
FMULd součin double
FMULq součin quad
FsMULd součin single na double
FdMULq součin double na quad
FDIVs podíl single
FDIVd podíl double
FDIVq podíl quad
   
Instrukce Význam
FCMPs porovnání single
FCMPd porovnání double
FCMPq porovnání quad
FCMPEs porovnání single (s vyvoláním výjimky při NaN)
FCMPEd porovnání double (s vyvoláním výjimky při NaN)
FCMPEq porovnání quad (s vyvoláním výjimky při NaN)

Obrázek 9: Interní struktura mikroprocesoru UltraSparc T1.

6. Formáty numerických hodnot s plovoucí řádovou čárkou

V této kapitole si uvedeme bitové podoby všech tří formátů numerických hodnot uložených v systému plovoucí řádové čárky, tj. hodnot zpracovávaných FPU. U všech třech formátů je použita shodná struktura – v jednom bitu je uloženo znaménko čísla, následuje (dvojkový) exponent a ve třetím bitovém poli je uložena mantisa. Formát single odpovídá normě IEEE 754, a to včetně speciálních hodnoty typu nekonečna či NaN. 32bitové slovo je rozděleno následovně:

 +-+--------+-----------------------+
 |s|exponent|  mantisa, bity 0..22  |
 +-+--------+-----------------------+
31 30     23 22                     0

U formátu double, který taktéž odpovídá specifikaci IEEE 754, je rozšířen jak exponent (což zvyšuje rozsah reprezentovatelných hodnot), tak i mantisa (což naopak zvyšuje přesnost uložených hodnot). Číselné hodnoty jsou uloženy ve dvou 32bitových slovech:

 +-+-----------+--------------------+
 |s| exponent  |mantisa, bity 32..51|
 +-+-----------+--------------------+
31 30        20 19                  0

 +----------------------------------+
 |        mantisa, bity 0..31       |
 +----------------------------------+
31                                  0

Formát quad je poněkud méně známý. I zde došlo k rozšíření rozsahu čísel (více bitů rezervovaných pro exponent) i jejich přesnosti (více bitů rezervovaných pro mantisu). Jedna hodnota je u tohoto formátu uložena ve čtveřici 32bitových slov, tj. ve 128 bitech:

 +-+---------------+----------------+
 |s|   exponent    | mantisa 95..111|
 +-+---------------+----------------+
31 30            16 15              0

 +----------------------------------+
 |       mantisa, bity 64..95       |
 +----------------------------------+
31                                  0

 +----------------------------------+
 |       mantisa, bity 32..63       |
 +----------------------------------+
31                                  0

 +----------------------------------+
 |       mantisa, bity 0..31        |
 +----------------------------------+
31                                  0

Obrázek 10: Jedna z variant čipu MicroSPARC II založeného na 32bitové architektuře SPARC-V8.

7. Architektura SPARC-V9 a procesory UltraSPARC

V roce 1994 byly světu představeny první verze mikroprocesorů postavených na architektuře SPARC-V9. Jednalo se o mikroprocesory obsahující 64bitovou aritmeticko-logickou jednotku i sadu 64bitových pracovních registrů, ovšem díky tomu, že všechny výpočty probíhaly s čísly reprezentovanými v dvojkovém doplňku a nezměněnému formátu instrukcí, byla zaručena binární zpětná kompatibilita se staršími mikroprocesory s architekturami SPARC-V7 a SPARC-V8. Kromě rozšíření bitové šířky zpracovávaných operandů se zvětšil i adresovatelný prostor operační paměti – u těchto nových mikroprocesorů bylo možné využít 64bitový virtuální adresní prostor (i když kapacity operačních pamětí byly mnohem menší). Změny se dotkly i interní struktury mikroprocesorů, protože byla podporována programově řízená predikce skoků (branch prediction), rychlejší přepínání kontextů a navíc specifikace SPARC-V9 počítala i se superskalárními procesory schopnými v jednom taktu současně začít zpracovávat až čtyři instrukce (připomeňme si, že tato architektura vznikla v době, kdy ve světě wintelu teprve pokračoval přechod aplikací z 16bitového na 32bitový režim).

FPU byla upravena; zejména došlo k rozšíření sady registrů pro úschovu numerických hodnot s dvojitou přesností (double) celkem na 32 registrů (namísto šestnácti registrů u architektury SPARC-V8) a FPU navíc obsahovala čtveřici registrů pro úschovu příznakových bitů. To znamenalo, že bylo možné současně zpracovávat až čtyři FP operace bez toho, aby FPU musela čekat na výsledek předchozích operací. Prvním mikroprocesorem s architekturou SPARC-V9 byl čip UltraSPARC z roku 1994, který kromě CPU a FPU obsahoval i grafický subsystém s vlastní instrukční sadou VIS (Visual Instruction Set). Na tento čip navázal v roce 1997 mikroprocesor UltraSPARC II s vylepšenou podporou multiprocesingu a v roce 2001 čip UltraSPARC III s vyrovnávací pamětí na čipu a podporou vyšších hodinových frekvencí. Podrobnější informace o všech třech mikroprocesorech (možná vůbec nejznámějších čipech SPARC) si uvedeme v následující části tohoto seriálu.

Obrázek 11: Mikroprocesor UltraSPARC je jedním z nejznámějších zástupců procesorů s architekturou SPARC-V9 (viz též obrázky číslo 7 a 8).

8. Podmíněné přesuny dat (conditional moves)

V instrukční sadě mikroprocesorů s architekturou SPARC V9 se nachází i několik nových instrukcí MOVr a FMOVr (za r se dosazuje kód podmínky podle tabulky zobrazené níže) sloužících pro podmíněné přesuny dat mezi dvojicí pracovních registrů, popř. mezi dvojicí FPU registrů. Tyto instrukce tedy slouží pro implementaci operací typu:

if podmínka then %x=%y

Tyto instrukce jsou důležité hned z několika důvodů. Jedním z nich je to, že díky existenci podmíněných operací přenosu je možné z programů (psaných v assembleru či překládaných z vyšších programovacích jazyků) odstranit poměrně velké procento podmíněných skoků (branch), které pro RISCové mikroprocesory s relativně dlouhou instrukční pipeline představují problém – procesor dopředu neví, která větev se skutečně provede. Druhou zajímavou vlastností těchto instrukcí je fakt, že tyto operace jsou kódovány stejně, jako instrukce aritmetické či logické – obsahují tedy indexy trojice pracovních registrů, přičemž jeden z těchto registrů tvoří zdroj přesouvané hodnoty, druhý registr tvoří cíl (do něhož se hodnota na základě vyhodnocení podmínky přesune či nepřesune) a na základě hodnoty třetího registru se vyhodnocuje vlastní podmínka. To v praxi znamená, že se může testovat, zda je hodnota v libovolném pracovním registru nulová, nenulová, větší než nula, menší nebo rovna nule atd. – viz též následující tabulka.

bitcoin školení listopad 24

Podmínka Význam podmínky
NZ testovaný registr obsahuje nenulovou hodnotu
Z testovaný registr obsahuje nulovou hodnotu
GZ hodnota uložená v testovaném registru je větší než nula
GEZ hodnota uložená v testovaném registru je vetší nebo rovna nule
LZ hodnota uložená v testovaném registru je menší než nula
LEZ hodnota uložená v testovaném registru je menší nebo rovna nula

V případě, že je zapotřebí testovat například rovnost dvou registrů, není nic snazšího, než před podmíněný přesun dat vložit instrukci pro rozdíl hodnot těchto registrů s následným testem na nulu výsledku tohoto výpočtu.

Obrázek 12: Interní struktura mikroprocesorů UltraSPARC T1.

9. Odkazy na Internetu

  1. The SPARC Architecture Manual Version 8 (manuál v PDF formátu)
    http://www.spar­c.org/standar­ds/V8.pdf
  2. The SPARC Architecture Manual Version 9 (manuál v PDF formátu)
    http://develo­pers.sun.com/so­laris/articles/spar­cv9.pdf
  3. SPARC Pipelining
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/pipelining.html
  4. SPARC Instruction
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/inst_set.html
  5. OpenSPARC
    http://www.open­sparc.net/
  6. History of SPARC systems 1987 to 2010
    http://www.spar­cproductdirec­tory.com/histo­ry.html
  7. Sun-1 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun-1
  8. Sun-2 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun-2
  9. Sun-3 (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun-3
  10. Sun386i (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sun386i
  11. Sun 386i/250
    http://sites.in­ka.de/pcde/si­te/sun386i.html
  12. SPARC Instruction Set
    http://www.aca­demic.marist.e­du/~jzbv/archi­tecture/Projec­ts/S2002/SPAR­C/inst_set.html
  13. MIPS Architecture Overview
    http://tams-www.informatik.uni-hamburg.de/ap­plets/hades/web­demos/mips.html
  14. MIPS Technologies R3000
    http://www.cpu-world.com/CPUs/R3­000/
  15. CPU-collection: IDT R3010 FPU
    http://www.cpu-collection.de/?tn=0&l0­=co&l1=IDT&l2=R3010+F­PU
  16. The MIPS R2000 Instruction Set
    http://suraj.lum­s.edu.pk/~cs423a0­5/Reference/MIP­SCodeTable.pdf
  17. Maska mikroprocesoru RISC 1
    http://www.cs­.berkeley.edu/~pat­trsn/Arch/RIS­C1.jpg
  18. Maska mikroprocesoru RISC 2
    http://www.cs­.berkeley.edu/~pat­trsn/Arch/RIS­C2.jpg
  19. The MIPS Register Usage Conventions
    http://pages.cs­.wisc.edu/~cs354–2/beyond354/con­ventions.html
  20. 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
  21. Berkeley RISC
    http://en.wiki­pedia.org/wiki/Ber­keley_RISC
  22. Great moments in microprocessor history
    http://www.ib­m.com/developer­works/library/pa-microhist.html
  23. Microprogram-Based Processors
    http://resear­ch.microsoft.com/en-us/um/people/gbe­ll/Computer_Struc­tures_Principles_an­d_Examples/csp0167­.htm
  24. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  25. A Brief History of Microprogramming
    http://www.cs­.clemson.edu/~mar­k/uprog.html
  26. Architecture of the WISC CPU/16
    http://www.ece­.cmu.edu/~koop­man/stack_com­puters/sec4_2­.html
  27. Zásobníkový procesor WISC CPU/16 (Root.CZ)
    http://www.ro­ot.cz/clanky/pro­gramovaci-jazyk-forth-a-zasobnikove-procesory-16/#k03
  28. Writable instruction set, stack oriented computers: The WISC Concept
    http://www.ece­.cmu.edu/~koop­man/forth/roches­ter87.pdf
  29. The Great CPU List: Part X: Hitachi 6301 – Small and microcoded (1983)
    http://jbayko­.sasktelwebsi­te.net/cpu2.html#Sec2Par­t10
  30. What is RISC?
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/whatis/
  31. RISC vs. CISC
    http://www-cs-faculty.stanfor­d.edu/~erober­ts/courses/so­co/projects/2000–01/risc/risccisc/
  32. RISC and CISC definitions:
    http://www.cpushac­k.com/CPU/cpu­AppendA.html
  33. The Evolution of RISC
    http://www.ib­m.com/developer­works/library/pa-microhist.html#si­debar1
  34. SPARC Processor Family Photo
    http://thenet­workisthecompu­ter.com/site/?p=243
  35. SPARC: Decades of Continuous Technical Innovation
    http://blogs.o­racle.com/onthe­record/entry/spar­c_decades_of_con­tinuous_techni­cal
  36. The SPARC processors
    http://www.top500­.org/2007_over­view_recent_su­percomputers/spar­c_processors
  37. Maurice V. Wilkes Home Page
    http://www.cl­.cam.ac.uk/ar­chive/mvw1/
  38. 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
  39. Microprogram Memory
    http://free-books-online.org/com­puters/advanced-computer-architecture/mi­croprogram-memory/
  40. First Draft of a report on the EDVAC
    http://qss.stan­ford.edu/~god­frey/vonNeuman­n/vnedvac.pdf
  41. Introduction to Microcontrollers
    http://www.pic24mi­cro.com/cisc_vs_ris­c.html
  42. Reduced instruction set computing (Wikipedia)
    http://en.wiki­pedia.org/wiki/Re­duced_instruc­tion_set_compu­ter
  43. MIPS architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIP­S_architecture
  44. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  45. Classic RISC pipeline (Wikipedia)
    http://en.wiki­pedia.org/wiki/Clas­sic_RISC_pipe­line
  46. R2000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R2000_(mi­croprocessor)
  47. R3000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R3000
  48. R4400 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R4400
  49. R8000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R8000
  50. R10000 Microprocessor (Wikipedia)
    http://en.wiki­pedia.org/wiki/R10000
  51. SPARC (Wikipedia)
    http://en.wiki­pedia.org/wiki/Sparc
  52. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  53. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  54. Microcode (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crocode
  55. Microsequencer (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­crosequencer
  56. Maurice Wilkes (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mau­rice_Wilkes
  57. Micro-operation (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mi­cro-operation
  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

Autor článku

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