Obsah
1. Funkční jednotky superpočítače CDC 6600
2. Popis jednotlivých funkčních jednotek stroje CDC 6600
3. Formát numerických hodnot zpracovávaných procesorem superpočítače CDC 6600
4. Numerické hodnoty s plovoucí řádovou čárkou
6. Grafický subsystém superpočítače CDC 6600
7. CDC 7600 aneb důstojný nástupce superpočítače CDC 6600
8. Miniaturizace a pipeline jako cesta k nejrychlejším superpočítačům?
1. Funkční jednotky superpočítače CDC 6600
V předchozích dvou pokračováních seriálu o historii vývoje výpočetní techniky jsme se seznámili se základními parametry superpočítače CDC 6600, který byl navržen Seymourem Crayem a posléze vyráběn společností CDC (Control Data Corporation) v šedesátých letech minulého století. Řekli jsme si, že tento ve své době nejvýkonnější superpočítač na světě využíval operační paměť sestavenou z feritových jader, která byla rozdělena na samostatně pracující moduly, a to takovým způsobem, aby se při sekvenčním čtení dat nebo strojových instrukcí z operační paměti přistupovalo k jednotlivým paměťovým modulům v takzvaném prokládaném režimu (každé slovo bylo přečteno z jiného modulu), což vedlo k tomu, že za ideálních podmínek bylo možné v každém strojovém cyklu přečíst či zapsat jedno šedesátibitové slovo. Z předchozích dílů seriálu taktéž již víme, že kromě hlavního procesoru (CPU) se v superpočítači CDC 6600 nacházelo ještě deset procesorů určených pro ovládání periferních zařízení a taktéž pro přístup do operační paměti.
Ovšem ani samotná hlavní procesorová jednotka (CPU) použitá v superpočítači CDC 6600 nebyla tvořena monolitickým obvodem, který by pomocí nějaké „magie“ dokázal provádět všechny potřebné operace se všemi možnými typy operandů. Ve skutečnosti se totiž tato procesorová jednotka skládala celkem z deseti specializovaných a relativně samostatně pracujících funkčních jednotek, jejichž názvy a stručný popis jsou uvedeny v následující kapitole. Seymour Cray k využití této struktury přistoupil z toho důvodu, že jednoúčelové funkční jednotky bylo možné lépe optimalizovat po obvodové stránce a navíc se některé často používané jednotky mohly zduplikovat, což je levnější, než duplikace funkcí celého procesoru (s tímto přístupem – multiplikací celých CPU, tj. ALU i řadiče – se můžeme setkat v současnosti, ovšem na rozdíl od šedesátých let minulého století je dnes cena jednoho logického obvodu přibližně stotisíckrát menší).

Obrázek 1: Paměť s feritovými jádry použitá v superpočítači CDC 6600.
2. Popis jednotlivých funkčních jednotek stroje CDC 6600
# | Název jednotky | Popis |
---|---|---|
1 | Branch | provádění všech instrukcí skoku a pro rozvětvení (podmíněné skoky) |
2 | Boolean | vyčíslení veškerých logických operací |
3 | Shift | provádění aritmetických a bitových posuvů |
4 | Add | sčítačka a odčítačka hodnot s plovoucí řádovou čárkou (float 60 bitů) |
5 | Long add | sčítačka a odčítačka hodnot s pevnou řádovou čárkou (integer 60 bitů) |
6 | Multiply #1 | násobička hodnot s plovoucí řádovou čárkou |
7 | Multiply #2 | pokud předchozí jednotka Multiply #1 ještě provádí operaci, použije se tato „záložní“ jednotka |
8 | Divide | dělička hodnot s plovoucí řádovou čárkou (float 60 bitů) |
9 | Increment #1 | sčítačka a odčítačka 18bitových celých čísel, použito pro adresování operandů v operační paměti |
10 | Increment #2 | pokud předchozí jednotka Increment #1 ještě provádí operaci, použije se tato „záložní“ jednotka |
Při pohledu na tabulku zobrazenou před tímto odstavcem je patrné, že rozdělení funkcí mezi jednotlivé specializované funkční jednotky je odlišné od rozdělení, s nímž se můžeme setkat u moderních mikroprocesorů. Nicméně Seymour Cray moc dobře věděl, co dělá :-), protože například některé často používané jednotky zdvojil. Jedná se především o násobičku hodnot reprezentovaných v systému plovoucí řádové čárky. Násobení je relativně často používaná a přitom zdlouhavá operace, proto se v počítači CDC 6600 nacházely dvě násobičky. V případě, že první násobička už prováděla operaci s dvojicí pracovních registrů, mohlo se násobení spustit i na druhé násobičce. Další jednotkou, která byla zdvojena, byla sčítačka a odčítačka 18bitových celých čísel, tj. adres. Sčítání či odčítání sice patří mezi rychlé instrukce, ovšem nebylo ho možné provést v jediném strojovém cyklu. Tento fakt, spolu s faktem, že se adresování operandů provádělo velmi často, vedlo k tomu, že i tato relativně jednoduchá funkční jednotka byla zdvojena.

Obrázek 2: Další pohled na paměťový modul použitý v superpočítači CDC 6600.
3. Formát numerických hodnot zpracovávaných procesorem superpočítače CDC 6600
V tabulce uvedené v předchozí kapitole si můžeme povšimnout toho, že některé funkční jednotky, z nichž se skládá CPU, jsou určeny pro provádění operací s celočíselnými numerickými hodnotami (integer) a další jednotky dokážou provádět aritmetické operace s hodnotami uloženými v systému plovoucí řádové čárky (floating point). Nejprve se budeme zabývat operacemi s celočíselnými numerickými hodnotami. Ty mohou mít dva rozsahy. Pro práci s adresami se používají celočíselné hodnoty uložené v osmnácti bitech. Již v předchozí části tohoto seriálu jsme si řekli, že osmnáctibitové hodnoty jsou uloženy v pracovních registrech A0, A1 … A7 (adresování) a B0, B1 … B7 (adresování a počitadla smyček). Většina operací s těmito registry je prováděna ve funkčních jednotkách Increment #1 a Increment #2. Důvod pro zdvojení těchto jednotek je prostý – výpočet adres je velmi frekventovaná operace, takže bylo žádoucí, aby byl procesor schopen provádět více těchto výpočtů současně.
Zajímavé je, že osmnáctibitové hodnoty byly v pracovních registrech uložené ve formátu jedničkového doplňku, což znamenalo, že v nejvyšším bitu (s indexem 17) bylo umístěno znaménko čísla, za nímž následovalo sedmnáct číselných bitů (absolutní hodnota čísla). Díky tomuto kódování čísel bylo možné rozpoznávat kladnou a zápornou nulu. Poněkud méně časté byly celočíselné operace prováděné ve funkčních jednotkách Shift a Long Add. Tyto jednotky pracovaly s celočíselnými hodnotami uloženými v registrech s šířkou 60 bitů, tj. jednalo se o registry X0, X1 … X7. I v tomto případě byl použit jedničkový doplněk, takže rozsah zpracovávaných hodnot byl roven –576460752303423488 až 576460752303423488 (na rozdíl od FP hodnot zde nebylo detekováno přetečení). V případě, že se měla s celými čísly provést jiná operace, než prostý součet či rozdíl, popř. posun, musely se tyto hodnoty nejprve převést na čísla reprezentovaná v systému plovoucí řádové čárky.

Obrázek 3: Unifikovaný modul počítače CDC 6600 – pohled na vrchní část modulu.
4. Numerické hodnoty s plovoucí řádovou čárkou
Mnohem zajímavější než celočíselný formát popsaný v předchozí kapitole je však formát čísel s plovoucí řádovou čárkou (floating point). Podpora těchto čísel (jedná se o podmnožinu čísel reálných) procesorem superpočítače CDC 6600 je logická a očekávaná, protože tyto stroje byly určeny zejména pro řešení složitých numerických úloh z oblasti (nukleární) fyziky. Numerické hodnoty reprezentované v systému plovoucí řádové čárky byly ukládány v registrech o šířce 60 bitů, což je mimochodem i šířka slov ukládaných v operační paměti. V těchto slovech bylo uloženo znaménko čísla, mantisa a exponent, protože jakoukoli reprezentovatelnou číselnou hodnotu bylo možné vyjádřit vztahem s×m×2e, kde s je znaménko (+1, –1), m je mantisa (celé číslo) a e je exponent (taktéž celé číslo), přičemž hodnota exponentu byla posunuta o 210. Způsob rozdělení 60bitového slova na jednotlivá bitová pole je uveden pod tímto odstavcem:
+---+--------------------+------------------------------------+ | s | exponent (11 bitů) | mantisa (48 bitů) | +---+--------------------+------------------------------------+ 59 58 48 47 0
Po všech aritmetických operacích s numerickými hodnotami s plovoucí řádovou čárkou bylo možné provést normalizaci, tj. posun bitů v mantise takovým způsobem, aby nejvyšší bit mantisy měl hodnotu 1. Každý posun mantisy o jeden bit doprava či doleva samozřejmě musel být korigován změnou hodnoty exponentu o jedničku. Ve skutečnosti se výpočty prováděly s mantisou o dvojité přesnosti (double precision), protože interně měla mantisa šířku plných 96 bitů a nikoli pouze 48 bitů. Některé instrukce procesoru počítače CDC 6600 bylo možné použít jak k získání horních 48 bitů výsledku (ty se běžně ukládaly zpět do pracovního registru), tak i k získání spodních 48 bitů, jejichž hodnota by byla v opačném případě zahozena (resp. by se některé bity použily při normalizaci).

Obrázek 4: Unifikovaný modul počítače CDC 6600 – pohled na spodní část modulu s plošným spojem.
5. Práce s nulou a nekonečnem
Pokud při jakékoli aritmetické operaci s hodnotami reprezentovanými v systému plovoucí řádové čárky došlo k tomu, že exponent překročil či dosáhl hodnoty 2047 (nesmíme zapomenout na posun jeho hodnoty o deset bitů), byla taková číselná hodnota považována za kladné či záporné nekonečno. Nulový exponent naopak sloužil pro reprezentaci „skutečné“ nuly, na rozdíl od hodnot, které se k nule pouze přibližují. Kromě těchto dvou speciálních hodnot existovala ještě hodnota značící neurčitý výsledek – tato hodnota byla reprezentována číslem s nulovou mantisou a exponentem rovným záporné nule (i exponent byl totiž ukládán ve formátu jedničkového doplňku). Funkční jednotky počítače CDC 6600 byly zkonstruovány takovým způsobem, aby jak nekonečno, „skutečná“ nula či neurčitý výsledek byly uloženy se všemi bity mantisy nulovými – tak bylo možné poznat, zda je nekonečno/nula/neurčitá hodnota vypočtena či zda byla získána jiným způsobem.
Naproti tomu hodnoty s nulovými exponenty a nenulovými mantisami představovaly denormalizovaná čísla, s nimiž sice bylo možné provádět aritmetické operace, ovšem jejich normalizace byla nemožná, protože exponent neměl dostatečný rozsah na to, aby bylo možné normalizaci provést. Při součtu, rozdílu, násobení i dělení detekovaly funkční jednotky použití nekonečna a pracovaly s ním podle pravidel vypsaných v následující tabulce (x je libovolné racionální číslo):
Operace | Výsledek |
---|---|
∞+∞ | ∞ |
∞-∞ | neurčitý výsledek |
∞×∞ | ∞ |
∞/∞ | neurčitý výsledek |
∞*0 | neurčitý výsledek |
∞/0 | ∞ |
0/0 | neurčitý výsledek |
∞+x | ∞ |
∞-x | ∞ |
∞×x | ∞ |
∞/x | ∞ |
x+∞ | ∞ |
x/∞ | 0 |
x/0 | ∞ |
0/∞ | 0 |
Tvůrci normy IEEE 754 se do velké míry opírali o zkušenosti získané právě při konstrukci mainframu CDC 6600.

Obrázek 5: Fragment manuálu k superpočítači CDC 6600.
6. Grafický subsystém superpočítače CDC 6600
Dalším modulem superpočítače CDC 6600, s nímž se na závěr jeho popisu seznámíme, je jeho grafický subsystém. Ten je z dnešního pohledu poněkud neobvyklý, protože hlavní součástí grafického subsystému byla dvojice kulatých obrazovek (klasických CRT), které byly určeny pro zobrazení vektorové grafiky. Namísto toho, aby elektronový paprsek přecházel postupně všemi řádky obrazovky s regulací jeho intenzity na mřížce CRT, se používalo řízení elektronového paprsku známé například z osciloskopů nebo – pokud zůstaneme u výpočetní techniky – z herní konzole Vectrex či z minipočítače PDP. Jeden z periferních procesorů mohl být ovládán speciálním programem nazvaným DSD, neboli Dynamic System Display. Tento program dokázal převádět textová data na sekvenci krátkých vektorů zobrazovaných na první nebo druhé obrazovce. DSD používal různé optimalizace, aby cesta elektronového paprsku při vykreslování jednoho snímku byla co nejkratší, protože jen tak bylo možné zabránit nepříjemnému poblikávání obrazovky (na rozdíl od zobrazení rastrových obrazů s fixní frekvencí se u vektorových obrazovek určovala maximální celková délka vykreslovaných vektorů).

Obrázek 6: Fotografie superpočítače CDC 6600 s typickým řídicím panelem obsahujícím dvojici obrazovek.
Použití vektorové grafiky v superpočítači CDC 6600 vycházelo z toho, že tato technika byla v šedesátých letech minulého století již poměrně propracovaná, a to jak u osciloskopů, tak i u analogových počítačů. Navíc nebylo pro ukládání rastrového obrázku nutné využívat framebuffer, který by byl velmi drahý. Oproti prakticky všem dalším dobovým počítačům, především mainframům, bylo použití grafických obrazovek nepochybně krokem vpřed, protože u ostatních počítačů se pro výstup informací o běžícím systému používaly panely se žárovkami, popř. (rychlo)tiskárny. Obě obrazovky se v případě CDC 6600 typicky používaly pro výstup systémových informací, později pro ně vznikl i jeden z prvních celoobrazovkových textových editorů O26 (možná se jednalo o skutečně první program svého druhu). Kromě těchto „vážných“ aplikací však pro CDC 6600 vzniklo i několik her a hříček, například jednoduchá simulace basketbalu nebo program, který každou obrazovku přeměnil v jedno mrkající oko (použití počítače v ceně 5 milionů dolarů na zobrazení očí svědčí o tom, že programátoři byli vždycky hračičkové).

Obrázek 7: Zrekonstruovaný (a v současnosti funkční) počítač PDP-1 s vektorovou obrazovkou.
7. CDC 7600 aneb důstojný nástupce superpočítače CDC 6600
Dalším superpočítačem, o němž se v našem seriálu o historii vývoje výpočetní techniky zmíníme, je superpočítač CDC 7600. Jak již jméno i číselné označení tohoto počítače napovídá, jedná se o stroj, který je následovníkem superpočítače CDC 6600 a nejedná se o následovníka ledajakého. Špičkový výpočetní výkon tohoto stroje byl totiž až desetkrát vyšší než u CDC 6600. Ručně optimalizované programy běžně dosahovaly výpočetního výkonu 10 MFLOPS (3 MFLOPS u CDC 6600, „pouze“ 1/2 MFLOPS u Fortranovských programů) a teoretický výpočetní výkon při současné práci všech funkčních jednotek a provádění jedné instrukce v jednom taktu mohl dosahovat až hodnoty 36 MFLOPS. I hodinová frekvence používaná procesorem tohoto počítače převýšila frekvence používané u jiných dobových počítačů, protože dosahovala hodnoty 36,4 MHz, zatímco u většiny mainframů hodinová frekvence nepřekročila 10 MHz a u mnoha mainframů se dokonce pohybovala pod hranicí jednoho MHz.

Obrázek 8: Detailní pohled na funkční moduly superpočítače Cray-2 ponořené do chladicí kapaliny. Tento superpočítač byl vzdáleným potomkem zde popisovaného superpočítače CDC 7600. Některé konstrukční prvky jsou dokonce u obou počítačů téměř shodné.
(zdroj: Cray Research)
8. Miniaturizace a pipeline jako cesta k nejrychlejším superpočítačům?
Práce na konstrukci superpočítače CDC 7600 začaly prakticky ihned poté, co byl jeho předchůdce CDC 6600 uveden na trh. Právě v tomto okamžiku totiž Seymour Cray ztratil veškerý zájem o další osudy CDC 6600 a rozhodl se zkonstruovat počítač nový, který by byl „o něco“ rychlejší, než CDC 6600. Díky použití integrovaných obvodů (což byla na konci šedesátých let minulého století stále ještě novinka) a rychlejších typů polovodičových tranzistorů všichni jeho kolegové očekávali, že nový počítač CDC 7600 bude zhruba dvakrát až třikrát rychlejší, než CDC 6600. Ovšem Seymour Cray se s tímto (ostatně velmi slušným) zrychlením nehodlal smířit a začal se zabývat problémy, které zůstaly u CDC 6600 nevyřešeny a jejichž vyřešení by mohlo vést k dalšímu nárůstu výpočetního výkonu.
U počítače CDC 6600 totiž poměrně často nastával problém s vytížením všech deseti funkčních jednotek popsaných v předchozích kapitolách. V mnoha případech vždy některá z těchto jednotek zahálela, zatímco se čekalo na dokončení operace v jiné jednotce. Cray si uvědomil, že pouhé přidání dalších funkčních jednotek by pravděpodobně nevedlo k jím plánovanému skokovému nárůstu výpočetního výkonu a je tedy nutné hledat jiné řešení. To spočívalo na jedné straně ve zmenšení celého počítače a tím pádem i ke zkrácení všech datových vodičů (ostatně většina superpočítačů sestrojených Seymourem Crayem zdaleka neodpovídala představám o superpočítači jako obrovském sálovém počítači) a na straně druhé k vytvoření instrukční pipeline, což byla taktéž jedna z novinek. Podrobnější informace o tomto velmi zajímavém stroji si řekneme v následující části tohoto seriálu.

Obrázek 9: Superpočítač Cray-2 – pohled na výpočetní moduly a moduly s operační pamětí.
(zdroj: Cray Research)
9. Odkazy na Internetu
- CONTROL DATA 6400/6500/6600 COMPUTER SYSTEMS Reference Manual
http://ed-thelen.org/comp-hist/CDC-6600-R-M.html#P2–1 - IBM 7302 Oil Core Memory
http://www.piercefuller.com/library/img00085.html?id=img00085 - IBM 7302 Air Core Memory
http://www.piercefuller.com/library/img00090.html?id=img00090 - Control Data Corporation (CDC) 6600: 1966–1977
http://www.cisl.ucar.edu/computers/gallery/cdc/6600.jsp - Control Data Corporation (CDC) 7600: 1971–1983
http://www.cisl.ucar.edu/computers/gallery/cdc/7600.jsp - John Mauchly
http://en.wikipedia.org/wiki/John_Mauchly - J. Presper Eckert
http://en.wikipedia.org/wiki/J._Presper_Eckert - BINAC
http://en.wikipedia.org/wiki/BINAC - Description of the BINAC
http://www.palosverdes.com/lasthurrah/binac-description.html - UNIVersal Automatic Computer (UNIVAC)
http://www.thocp.net/hardware/univac.htm - BUNCH
http://en.wikipedia.org/wiki/BUNCH - Mainframe computer
http://en.wikipedia.org/wiki/Mainframe_computer - Cray History
http://www.cray.com/About/History.aspx?404;http://www.cray.com:80/about_cray/history.html - Cray Historical Timeline
http://www.cray.com/Assets/PDF/about/CrayTimeline.pdf - Company: Cray Research, Inc. (Computer History)
http://www.computerhistory.org/brochures/companies.php?alpha=a-c&company=com-42b9d5d68b216 - General Electric GE-400
http://www.feb-patrimoine.com/PROJET/ge400/ge-400.htm - GE-400 Time-sharing information systems:
http://www.computerhistory.org/collections/accession/102646147 - GE 225 vs. IBM 1401
http://ed-thelen.org/GE225-IBM1401.html - A GE-225 is found
http://ed-thelen.org/comp-hist/GE225.html - G.E. 200 Series Computers
http://www.smecc.org/g_e__200_series_computers.htm - GE-200 series (Wikipedia)
http://en.wikipedia.org/wiki/GE-200_series - GE-400 series (Wikipedia)
http://en.wikipedia.org/wiki/GE-400_series - GE-600 series (Wikipedia)
http://en.wikipedia.org/wiki/GE-600_series - Mainframe – Introduction
http://www.thocp.net/hardware/mainframe.htm - Honeywell 800 (1958)
http://www.cs.clemson.edu/~mark/h800.html - Real Machines with 24-bit and 48-bit words
http://www.quadibloc.com/comp/cp0303.htm - Honeywell ARGUS
http://en.wikipedia.org/wiki/Honeywell_ARGUS - Honeywell Datamatic 1000
http://www.smecc.org/honeywell_datamatic_1000.htm - Honeywell
http://en.wikipedia.org/wiki/Honeywell - Whatever Happened to IBM and the Seven Dwarfs? Dwarf Four: Honeywell
http://www.dvorak.org/blog/ibm-and-the-seven-dwarfs-dwarf-four-honeywell/ - Datamatic 1000 by DATAmatic Corporation (1955)
http://www.computermuseum.li/Testpage/Datamatic-1000.html - Burroughs – Third Generation Computers
https://wiki.cc.gatech.edu/folklore/index.php/Burroughs_Third-Generation_Computers - Burroughs B5000, B5500 and B5700 (original) documentation
http://www.bitsavers.org/pdf/burroughs/B5000_5500_5700/ - Burroughs B6500 and B6700 (original) documentation
http://www.bitsavers.org/pdf/burroughs/B6500_6700/ - Burroughs B8500 (original) documentation
http://www.bitsavers.org/pdf/burroughs/B8500/ - ERA 1101 Documents
http://ed-thelen.org/comp-hist/ERA-1101-documents.html - Ukázkový program pro UNIVAC 1101/ERA 1101
https://wiki.cc.gatech.edu/folklore/index.php/Engineering_Research_Associates_and_the_Atlas_Computer_(UNIVAC_1101) - UNIVAC I Computer System
http://univac1.0catch.com/ - UNIVAC I Computer System
http://univac1.0catch.com/yellowpage.htm - UNIVAC (Wikipedia)
http://en.wikipedia.org/wiki/Univac - UNIVAC I (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_I - UNIVAC II – Universal Automatic Computer Model II
http://ed-thelen.org/comp-hist/BRL61-u4.html - UNIVAC II (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_II - UNIVAC III (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_III - UNIVAC 1101 (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_1101 - UNISYS History Newsletter
https://wiki.cc.gatech.edu/folklore/index.php/Main_Page - UNIVAC Solid State (Wikipedia)
http://en.wikipedia.org/wiki/UNIVAC_Solid_State - Bi-quinary coded decimal (Wikipedia)
http://en.wikipedia.org/wiki/Bi-quinary_coded_decimal - UNIVAC III Data Processing System
http://ed-thelen.org/comp-hist/BRL61-u4.html#UNIVAC-III - The UNIVAC III Computer
https://wiki.cc.gatech.edu/folklore/index.php/The_UNIVAC_III_Computer - UNIVAC III Photos
http://jwstephens.com/univac3/page01.htm - A History of Unisys Computers (kniha)
http://www.lulu.com/product/hardcover/a-history-of-unisys-computers/4627477 - UNIVAC III Instructions Reference Card
http://www.bitsavers.org/pdf/univac/univac3/UT-2455_UNIVACIII_RefCd61.pdf