Obsah
1. Historie superpočítače Cray-1
3. Konstrukce superpočítače Cray-1
4. Superpočítač sestavený z pouhých čtyř typů čipů?
5. Pracovní registry a formát zpracovávaných numerických hodnot
6. Cray-1 Fortran Compiler (CFT)
7. Optimalizace operací prováděných s vektory
8. Naměřené rychlosti provádění vektorizovaných bloků kódu
1. Historie superpočítače Cray 1
V předchozí části seriálu o historii výpočetní techniky jsme si řekli základní informace o superpočítačích Cray, zejména pak fakt, že se jednalo o stroje navržené s ohledem na dosažení co nejvyššího výpočetního výkonu při provádění numerických operací s číselnými hodnotami reprezentovanými v systému plovoucí řádové tečky (FP – floating point). Výpočetní výkon počítače se při provádění těchto operací většinou měří a uvádí v MFLOPS, tj. milionech FP operací provedených za sekundu. Dnes si řekneme, jak vlastně první počítač Cray vznikl, jaké byly jeho technické parametry a na závěr se zmíníme i o překladači programovacího jazyka FORTRAN, který byl upravený takovým způsobem, aby mohl provádět některé operace (zapisované ve FORTRANU formou programové smyčky DO) s využitím rychlého „vektorizovaného“ kódu, při jehož provádění se výsledky operací ukládaly do některého z osmi vektorových registrů, z nichž každý měl kapacitu pro 64 numerických hodnot.
Obrázek 1: Konstruktéři superpočítačů v minulosti a vlastně i v současnosti nešetřili místem, jak je to ostatně patrné z této dobové fotografie. O to více Seymour Cray překvapil své současníky tím, že Cray-1 byl podle tehdejších měřítek velmi kompaktní.
Historie počítačů Cray začala již v letech 1968 až 1972, během nichž Seymour Cray pracoval ve firmě Control Data na vývoji počítačů řady CDC, konkrétně na modelech CDC 6600, CDC 7600 (ve své době se jednalo o nejvýkonnější počítač na světě, jehož cena v základním vybavení překročila pět milionů dolarů) a posléze i na CDC 8600. Právě na těchto počítačích Seymour Cray se svými spolupracovníky implementoval funkční jednotky, které mohly zpracovávat data uložená ve vektorech – díky upravené aritmeticko-logické jednotce bylo možné některé operace s vektory urychlit dvakrát až čtyřikrát oproti klasickému sekvenčnímu zpracování. Ovšem firma CDC začala mít kvůli soudnímu sporu s IBM finanční problémy a i z těchto důvodů (navíc kvůli nespokojenosti s bující byrokracií) Cray firmu Control Data nakonec v roce 1972 opustil a založil Cray Research a později i Cray Computer Corporation.
Obrázek 2: Superpočítač CDC 6600.
„The goal as you might imagine is for me to get rid of all the official functions – paper signing and things. That was accomplished well with the contract simply because I don't have to sign anything anymore. I'm still very involved in the company, and I think there's a feeling that it's a mutually satisfactory arrangement.“
2. Smaller means faster
Po odchodu Seymoura Craye z firmy CDC projekt počítače CDC 8600 ještě dva roky skomíral a nakonec byl v roce 1974 ukončen a firma CDC se namísto toho zaměřila na vývoj počítačů CDC STAR-100. Seymour Cray se naproti tomu ve svém startupu konečně mohl soustředit na vývoj nového typu vysněného superpočítače, přičemž se poučil z nedostatků strojů CDC. Samotný styl vývoje, který Seymour Cray preferoval, byl poměrně zajímavý – nejraději používal tužku a obyčejný čtverečkovaný papír a odmítal se zabývat (či možná lépe řečeno zdržovat) v té době nepříliš propracovanými systémy CAD pro návrh zapojení ani simulátory elektronických obvodů. Každý jeho (papírový) návrh byl následně prohlédnut třicetičlenným týmem jeho spolupracovníků, kteří samozřejmě mohli uplatňovat svoje změny v zapojení. Jednou z poměrně podstatných změn navržených a implementovaných v Cray-1 oproti CDC bylo zavedení nových typů registrů, do nichž mohly být uloženy výsledky vektorových operací.
Obrázek 3: Superpočítač CDC 7600.
Každý z těchto registrů měl šířku 4096 bitů a jejich použití mělo za výsledek mnohem vyšší výpočetní rychlost celého počítače oproti jeho předchůdcům CDC 6600 a CDC 7600, kde se výsledky všech operací musely ukládat přímo do operační paměti.
Obrázek 4: Rozměry superpočítače Cray-1.
3. Konstrukce superpočítače Cray-1
Další změnou, která byla patrná na první pohled, byl naprosto nový (a velmi pravděpodobně i unikátní) design celého superpočítače. Cray-1 byl totiž sestaven z dvanácti vysokých skříní, které byly spojeny takovým způsobem, že tvořily tříčtvrteční kruh (270°), tj. půdorys celého superpočítače měl tvar velkého písmene C. Seymour Cray se držel zásady, že menší počítač znamená – samozřejmě při jeho správném návrhu – i rychlejší počítač (smaller means faster), takže celkové rozměry Craye-1 byly poměrně malé, především při porovnání s mainframy firmy IBM nebo s již několikrát zmíněnými počítači CDC. Menší rozměry stroje a taktéž jeho rozdělení do skříní umístěných v kruhu měly za cíl zmenšit vzdálenost, kterou musely binární signály urazit při vzájemné komunikaci jednotlivých modulů. Navíc chybějící čtvrtkruh umožňoval vstup „do počítače“, jak pro návštěvníky (kteří se po několika krocích ocitli uvnitř stroje za několik milionů dolarů :-), tak i samozřejmě pro techniky.
Obrázek 5: Celkový pohled na superpočítač Cray-1.
Pod dvanácti skříněmi byly umístěny sedačky, v nichž bylo zabudováno kapalinové chlazení (používající kombinaci vodního a freonového okruhu) a taktéž část napájecího systému. Spotřeba počítače byla „pouze“ 115kW a i díky použité technologii ECL byla spotřeba téměř konstantní, bez ohledu na to, zda se prováděly nějaké výpočty či zda počítač čekal na vstup dat. Použití sedaček nám mimochodem něco prozrazuje o filozofii Seymoura Craye – zatímco mainframy firmy IBM byly jako téměř božští vladaři uzavřeny ve výpočetních sálech a jejich uživatelé (kromě několika privilegovaných) k nim neměli přístup (pouze přes vzdálené terminály nebo děrovačky štítků/pásek), Cray umožnil uživatelům přímý kontakt s počítačem, i když samotné pořizování dat, jejich dlouhodobá úschova a v neposlední řadě i překlad programů musel být ve skutečnosti prováděn na jiném stroji, typicky na mainframu IBM/370.
Obrázek 6: Detail spodní části superpočítače CRAY-1S, kde můžeme mj. vidět i jeho chladicí systém.
4. Superpočítač sestavený z pouhých čtyř typů čipů?
Superpočítač Cray-1 byl, což je možná poněkud překvapivé, sestaven z pouhých čtyř typů integrovaných obvodů. Jednalo se o velmi rychlou statickou paměť (SRAM) s organizací 16×4 bity a dobou přístupu pouhých šest nanosekund, která byla použita pro konstrukci registrů procesoru. Druhým typem čipů byla opět statická, ale o řád (50 ns) pomalejší paměť s organizací 1024×1 bit, z nichž byla sestavena operační paměť. Třetí a čtvrtý typ čipů byla různě rychlá hradla typu NAND implementovaná bipolární technologií ECL. Zatímco „konkurenční“ technologie TTL používá taková zapojení hradel, v nichž jsou bipolární tranzistory buď uzavřeny, nebo naopak saturovány, v ECL pracují tranzistory ve své aktivní oblasti (podobně jako v zesilovačích). To má tu výhodu, že se obchází poměrně pomalý přechod tranzistoru do a ze saturace, na druhou stranu protékají hradly vytvořené technologií ECL větší proudy, což může vést k potřebě použití výkonnějšího zdroje a taktéž výkonnějšího chlazení (ovšem se zvyšujícím se kmitočtem spotřeba TTL hradel roste, na rozdíl od ECL, kde je závislost na kmitočtu menší).
Obrázek 7: Jedno z možných zapojení hradla vytvořeného technologií ECL.
Všechny čtyři typy integrovaných obvodů byly napájeny na plošných spojích konstantních rozměrů 6×8 palců. Jednalo se o pětivrstvé plošné spoje; obě okrajové vrstvy sloužily pro přenos binárních signálů a na třech vnitřních vrstvách bylo rozvedeno napájecí napětí: –5,2V, –2,0V a 0V (důvod, proč jsou použita právě tato napětí, hledejte v použité technologii ECL). Každý plošný spoj byl vybaven konektorem a byl tedy poměrně snadno vyměnitelný. Celkem 288 čipů tvořilo jeden modul (počet různých modulů se ustálil na čísle 113, což není mnoho, když si uvědomíme, že z nich byly složeny všechny obvody počítače) a 72 modulů se vkládalo do jednoho šasi. Vzhledem k tomu, že všech 12 skříní bylo tvořeno 24 šasi, skládal se celý Cray-1 v maximální možné konfiguraci celkem z 1662 modulů z celkového teoretického počtu 1728 modulů. Dodávku potřebných čipů (snadno lze spočítat, že v maximální konfiguraci se jedná o několik set tisíc kusů) zajistily firmy Motorola a Fairchild (které se mimochodem obě angažovaly i ve vývoji vlastních mikroprocesorů).
Obrázek 8: Deska plošných spojů superpočítače Cray-1.
5. Pracovní registry a formát zpracovávaných numerických hodnot
Již v předchozí části tohoto seriálu jsme si řekli, že Seymour Cray ve svých počítačích nešetřil na počtu ani rozsahu pracovních registrů. Platí to samozřejmě také pro počítač Cray-1, který obsahoval poměrně velké množství různých typů registrů. Jednalo se především o sadu osmi 24bitových adresových registrů A0 až A7, osm registrů určených pro zpracování skalárních hodnot S0 až S7, 64 registrů pro uchování skalárních hodnot Tx a v neposlední řadě též o osm registrů, z nichž každý mohl uchovat šedesát čtyři 64bitových hodnot (celkem tedy 4096 bitů). Tyto takzvané vektorové registry se označovaly symboly V0 až V7. Pokud bychom spočítali celkovou kapacitu všech registrů (několik jsem jich pro jednoduchost neuvedl), dojdeme k překvapivě velkému číslu 4888 bajtů. Porovnejte si tuto hodnotu s osmibitovými mikroprocesory, které v té době kralovaly (7 bajtů u 6502, 10 bajtů u 8080)…
Obrázek 9: Detail spodní části superpočítače CRAY-1S. Na pravé straně fotografie je patrný „vstup“ do vnitřního prostoru stroje.
Počítače Cray-1 používaly pro skalární i vektorové operace numerické hodnoty uložené v systému plovoucí řádové čárky (FP). Tyto hodnoty byly sice uložené v 64 bitech, podobně jako je tomu u formátu double v normě IEEE 754, ovšem význam jednotlivých bitů je poněkud jiný, takže se liší jak rozsah uchovávaných hodnot, tak i počet platných míst, což je patrné z následující tabulky:
Min | Max | Počet míst | |
---|---|---|---|
IEEE single | 1.17E-0038 | 3.40E+0038 | 7 |
IEEE double | 2.22E-0308 | 1.79E+0308 | 16 |
Cray single | 3.67E-2466 | 2.73E+2465 | 15 |
Obsazení bitů v 64bitovém slovu (registru) je u počítačů Cray-1 následující:
1 1 14 48 +-+-+--------------+------------------------------------------------+ |s|t| e | m | +-+-+--------------+------------------------------------------------+
kde:
- s: znaménko mantisy
- t: znaménko exponentu
- e: exponent
- m: mantisa
Obrázek 10: Formulář používaný pro formalizovaný zápis programu ve Fortranu. Tento zápis byl vyděrován na štítky/pásky a přeložen, výsledkem byla většinou opět sada děrných štítků či děrných pásek.
6. Cray-1 Fortran Compiler (CFT)
„A computer without COBOL and FORTRAN is like a piece of chocolate cake without ketchup or mustard.“
Pro efektivní využití všech technických prostředků, které superpočítač Cray-1 svým uživatelům nabízel, bylo nutné vytvořit i vhodné základní vývojové nástroje. Vzhledem k tomu, že Cray-1 byl určen především pro provádění numerických výpočtů a také kvůli tomu, že se pro tyto účely již od poloviny padesátých let minulého století používal programovací jazyk FORTRAN, není divu, že byl tento jazyk, navržený a implementovaný poprvé v IBM týmem Johna W. Backuse, portován i na superpočítače Cray-1 pod názvem CRAY-1 Fortran Compiler neboli zkráceně CFT. FORTRAN byl již od svých prvních verzí, určených původně pro mainframy IBM 704, vybaven všemi základními aritmetickými i relačními operátory, možností práce s komplexními čísly, takzvaným „aritmetickým IF“ (variantou podmíněného příkazu IF, v němž byla podmínka vyjádřena aritmetickým výrazem, nikoli výrazem pravdivostním), poměrně bohatými možnostmi formátování numerických hodnot při jejich tisku atd., což plně vyhovovalo oboru, ve kterých se měly superpočítače Cray používat.
Obrázek 11: Manuál k první verzi FORTRANu určeného pro mainframy IBM 704.
Překladač CFT byl založen na FORTRANu IV a posléze byl upraven tak, aby odpovídal normě ANSI z roku 66 (FORTRAN 66). Od mnoha ostatních překladačů Fortranu se CFT odlišoval především v tom ohledu, že se snažil některé programové smyčky typu DO (jedná se o počítané smyčky zhruba odpovídající Céčkovým či Javovským smyčkám typu FOR) překládat do takové podoby, aby se při jejich provádění využilo zřetězení výpočtů a využití vektorových registrů V0 až V7, z nichž každý, jak již víme z předchozích kapitol, dokázal uchovat 64 prvků (numerických hodnot). První verze CFT sice dokázaly „vektorizovat“ pouze určité příkazy v programových smyčkách (viz též další kapitolu), ovšem pro další typy superpočítačů Cray byly k dispozici překladače s vylepšenými algoritmy pro rozpoznání vektorizovatelných a nevektorizovatelných částí kódu. V případě, že strojový kód generovaný CFT programátorům nevyhovoval, mohla být část programu (nebo i celý program) samozřejmě napsána i v jazyku symbolických instrukcí a přeložena pomocí makro assembleru nazvaného přímočaře Cray Assembler Language neboli CAL (neplést s INTERCALem :-).
Obrázek 12: Spolu s rozšiřováním Fortranu z mainframů firmy IBM na další architektury (později i na superpočítače Cray) se zvyšovala potřeba standardizace tohoto jazyka. Postupně vzniklo několik norem, například ANSI norma FORTRAN 66, FORTRAN 77, či ANSI/ISO standard Fortran 90 (názvy standardů jsou uvedeny správně – jméno jazyka se skutečně postupem času změnilo z „FORTRAN“ na „Fortran“).
7. Optimalizace operací prováděných s vektory
„Real Programmers don't write in PL/I. PL/I is for programmers who can't decide whether to write in COBOL or FORTRAN.“
V předchozí kapitole jsme si řekli, že první překladač programovacího jazyka FORTRAN pro superpočítače Cray-1, který měl zkratku CFT, dokázal vektorizovat pouze některé typy smyček. Jednalo se o počítané smyčky typu DO obsahující takové výrazy, v nichž se manipulovalo s poli a výsledky operací se taktéž ukládaly do (obecně jiného) pole. Použité aritmetické výrazy mohly obsahovat volání některých funkcí, o nichž překladač předem věděl, že je možné je volat zřetězeně (jednalo se například o některé goniometrické funkce, výpočet absolutní hodnoty atd.). Aritmetických výrazů mohlo být ve smyčce uvedeno větší množství, jejich maximální počet kolísal podle toho, jak se podařilo obsadit vektorové registry V0 až V7 (to záleželo nejenom na počtu výrazů v programové smyčce, ale i na jejich složitosti, což je ostatně logické). Ovšem první verze CFT nedokázala plně vektorizovat takové smyčky, které obsahovaly podmínku (IF), příkaz pro provedení skoku GOTO či volání nevektorizovatelné funkce (CALL).
Obrázek 13: Ukázka programu napsaného ve FORTRANu II, ve kterém můžeme mj. vidět i použití aritmetického IF, formátování výsledků, rozdělení řádků zdrojového kódu do sekcí (návěští, začátek komentáře, začátek příkazu) a taktéž použití čísel řádků (návěští) v těch případech, kdy je řádek cílem skoku.
Především nemožnost použít příkaz IF uvnitř programové smyčky poněkud omezovala možnosti efektivního použití CFT pro některé typy výpočtů, ovšem na druhou stranu je vhodné říci, že v mnoha případech bylo možné podmíněný příkaz nahradit výpočtem, který sice mohl na první pohled vypadat složitě, ale ve výsledku mohl být proveden mnohem rychleji než regulární podmíněný programový blok (popř. skok na základě splnění či nesplnění nějaké podmínky). Pokud byly splněny výše uvedené podmínky pro vektorizaci, byly výsledky ukládány do vektorových registrů V0 až V7, popř. byly některé tyto registry použity i pro zdrojová data. Až po zpracování všech 64 prvků v registru se provedlo jeho uložení do operační paměti. Teoretický limit pro provedení jedné iterace smyčky odpovídal počtu referencí do operační paměti (výraz B(I) je příkladem provedení jednoho přístupu do paměti, naproti tomu B(I)*C(I) provádí dva přístupy) zvýšených o jeden cyklus, který trvá provedení požadované aritmetické či logické operace v jedné funkční jednotce. Výsledky reálného měření výkonnosti superpočítače Cray-1 a současně i ukázky optimalizačních schopností první verze CFT jsou uvedeny v následující kapitole.
Obrázek 14: Program ve Fortranu uložený na děrném štítku (samotný příkaz je natištěný na horním okraji štítku).
8. Naměřené rychlosti provádění vektorizovaných bloků kódu
Pro ilustraci účinnosti vektorizace podporované již od první verze překladače FORTRANu na počítači Cray-1 při provádění běžných aritmetických operací nad prvky vektoru (přesněji řečeno FORTRANovského pole) jsou v níže uvedené tabulce zapsány naměřené časy provedení jednoho kroku jednoduché počítané programové smyčky (tj. celkový čas výpočtu je vydělen počtem opakování smyčky), jejíž obecný tvar lze v klasickém FORTRANu zapsat následujícím způsobem:
DO 10 I=1,N 10 A(I)=B(I)
Tělo smyčky, tj. především pravá strana přiřazovacího příkazu na řádku s návěštím 10, je pro každý řádek tabulky odlišné, stejně jako je pro každý sloupec odlišná mezní hodnota počitadla smyčky I. Výsledky jsou získány jak pro překlad s povolenou vektorizací (pro N=1, 10, 100 a 1000), tak i pro překlad, při němž je tělo smyčky přeloženo takovým způsobem, že je prováděno sekvenčně. Ve sloupci „teoretický limit“ je zapsán počet cyklů pro každou iteraci, který by v nejlepším možném (ideálním) případě měl platit pro velmi velká N. Tato hodnota je získána na základě počtu prováděných paměťových referencí v každém kroku smyčky, ke kterému je přičtena jednička v případě jednoduchých operací (přiřazení, základní aritmetické operace, …). Výsledky uvedené v následující tabulce jsou získány z článku „The Cray-1 Computer System“, jehož autorem je Richard M. Russell z firmy Cray Research, Inc.:
# | Tělo smyčky | N=1 | N=10 | N=100 | N=1000 | teoretický limit | 1000 skalárních operací |
---|---|---|---|---|---|---|---|
1 | A(I)=1.0 | 41.0 | 5.5 | 2.6 | 2.6 | 2 | 22.5 |
2 | A(I)=B(I) | 44.0 | 5.8 | 2.7 | 2.5 | 2 | 31.0 |
3 | A(I)=B(I)+10.0 | 55.0 | 6.9 | 2.9 | 2.6 | 2 | 37.0 |
4 | A(I)=B(I)+C(I) | 59.0 | 8.2 | 3.9 | 3.7 | 3 | 41.0 |
5 | A(I)=B(I)*C(I) | 60.0 | 8.3 | 4.0 | 3.7 | 3 | 42.0 |
6 | A(I)=B(I)/C(I) | 94.0 | 10.8 | 4.1 | 3.7 | 3 | 52.0 |
7 | A(I)=SIN(B(I)) | 462.0 | 61.0 | 33.3 | 31.4 | ? | 198.1 |
8 | A(I)=ASIN(B(I)) | 430.0 | 209.5 | 189.5 | 188.3 | ? | 169.1 |
V předchozí tabulce můžeme rozeznat čtyři skupiny smyček. Na prvních třech řádcích jsou operace, které vyžadují jeden (nebo žádný) přístup do pole B(I), takže teoretický limit je v tomto případě roven dvěma cyklům pro každou iteraci. Na řádcích 4, 5 a 6 se již provádí aritmetická operace vždy nad prvky dvou vektorů (polí), což výpočet prodlužuje jak teoreticky, tak i prakticky. Povšimněte si ovšem, že zatímco jediná operace podílu trvá zhruba o 30% delší čas než operace součtu, po vektorizaci smyčky se pro dostatečně dlouhé N doby provedení jedné iterace smyčky k sobě přiblíží a pro N=1000 jsou dokonce totožné. Na řádku číslo 7 je ukázáno, že vektorizace může být účinná i v těch případech, kdy je volána nějaká funkce (zde sinus), která je sama o sobě vektorizovatelná. Ovšem již řádek následující ukazuje, že v případě volání nevektorizovatelné funkce (arkussinus skutečně nelze na Crayi-1 vektorizovat) není vektorizace programové smyčky účinná a doba provedení jedné iterace je v tomto případě dokonce delší (pro libovolné N), než sekvenční provádění smyčky. Ovšem pokud by programová smyčka obsahovala i další operace, byl by výsledek přívětivější.
Obrázek 15: Doba trvání jednoho kroku programové smyčky pro různé typy operací a pro různou délku zpracovávaného vektoru. Povšimněte si, že pro malé N (1,2) je většinou doba trvání „vektorizované“ smyčky delší, než její sekvenční provedení, což je daň za přípravu funkčních jednotek a použití vektorových registrů. Pro rostoucí N je však výhoda vektorizace zřejmá.
9. Odkazy na Internetu
- 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 - Seymour Cray Biography
http://www.cray.com/Assets/PDF/about/SeymourCray.pdf - Company: Cray Research, Inc. (Computer History)
http://www.computerhistory.org/brochures/companies.php?alpha=a-c&company=com-42b9d5d68b216 - Cray Wiki
http://www.craywiki.com/index.php?title=Main_Page - Seymour Cray
http://www.craywiki.com/index.php?title=Seymour_Cray - Cray (Wikipedia)
http://en.wikipedia.org/wiki/Cray - Cray-1 (Cray Wiki)
http://www.craywiki.com/index.php?title=Cray_1S - Cray-1 (Wikipedia)
http://en.wikipedia.org/wiki/Cray-1 - Cray X-MP (Wikipedia)
http://en.wikipedia.org/wiki/Cray_X-MP - Cray-2 (Wikipedia)
http://en.wikipedia.org/wiki/Cray-2 - What Limits Forecast Accuracy?
http://weather.mailasail.com/Franks-Weather/Forecast-Accuracy-Limitations - Remembering the Cray-1
http://www.theregister.co.uk/2008/01/05/tob_cray1/ - Cray Supercomputer FAQ and other documents
http://www.spikynorman.dsl.pipex.com/CrayWWWStuff/index.html - Cray Research and Cray computers FAQ Part 1
http://www.spikynorman.dsl.pipex.com/CrayWWWStuff/Cfaqp1.html#TOC - Cray Research and Cray computers FAQ Part 2
http://www.spikynorman.dsl.pipex.com/CrayWWWStuff/Cfaqp2.html#TOC1 - Cray Research and Cray computers FAQ Part 3
http://www.spikynorman.dsl.pipex.com/CrayWWWStuff/Cfaqp3.html#TOC1 - Cray Research and Cray computers FAQ Part 4
http://www.spikynorman.dsl.pipex.com/CrayWWWStuff/Cfaqp4.html#TOC1 - Cray Research and Cray computers FAQ Part 5
http://www.spikynorman.dsl.pipex.com/CrayWWWStuff/Cfaqp5.html#TOC1 - The making of a CRAY-3
http://www.cisl.ucar.edu/docs/SCD_Newsletter/News_summer93/04e.cray3.html - Computer Speed Claims 1980 to 1996
http://homepage.virgin.net/roy.longbottom/mips.htm - Speed of Intel 8087 co-processor in FLOPS ($100)
http://answers.google.com/answers/threadview/id/542435.html - Million instructions per second
http://en.wikipedia.org/wiki/Mflops - Million instructions per second
http://en.wikipedia.org/wiki/Million_instructions_per_second#Million_instructions_per_second - Rosetta Code – Category:Fortran
http://rosettacode.org/wiki/Fortran - IBM 36-bit computers
http://www.36bit.org/ibm/ - Symbolics 36-bit computers
http://www.36bit.org/symbolics/ - IBM System 360/370 Compiler and Historical Documentation
http://www.edelweb.fr/Simula/ - Who Was Who in IBM's Programming Research? Early FORTRAN Days
http://www.trailing-edge.com/~bobbemer/PRORES.HTM - Emitter-coupled logic
http://en.wikipedia.org/wiki/Emitter-coupled_logic - ECL – Emitter Coupled Logic
http://ppd.fnal.gov/elec/ecl/ecl.html - Cray's Mark Remains Speed With Simplicity
http://www.mbbnet.umn.edu/hoff/hoff_sc.html - 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