Od osmibitu k transputeru a zase zpátky

Nejlepší světová věda se prostě dělá v britské Cambridgi. Kapesní kalkulačka, ZX Spectrum, Sinclair QL, Z88, waffer scale integration, procesory ARM a transputery.
A co že je to ten transputer?

Počítače pronikající mezi sprostý lid (kurva) sestávaly většinou z jednoho procesoru.
To se týká PDP-8, Atari 800, VIC-20 i ZX Spectra.
Pokud vám někdo bude tvrdit, že má jeho počítač procesorů víc, pak slouží jako jednoúčelové čipy pro generování zvuku nebo čtení klávesnice (8048 v prvních Apple klávesnicích nebo klávesnicový koprocesor 8049 v Sinclairu QL, kde se stará i o sériovou komunikaci a zvuk, Z80 u Sega megadrive pro generování zvuku nebo stejná Z80 na síťových kartách u IBM PC XT).
S výjimkou několika málo konstrukcí na více procesorech nebylo něco takového normálně dostupného, dokonce i Risc PC, které má sloty pro dvě procesorové karty, neumožňuje běh obou procesorů najednou a  musí se mezi nimi přepínat (typicky jedna karta obsahuje ARM/StrongARM, a druhá buď 486 pro provoz Windows, nebo druhý procesor ARMovské rodiny kvůli možnosti přepínání pro programy, které jsou psány pro starý ARM a se StrongARMem si neporadí).

Přitom ale dobové počítačové časopisy referovaly o projektech, testujících paralelní procesing jako cestu pro budoucnost – paralelní počítače byly stroje Cray stejně, jako velmi fotogenický (protože se spoustou blikajících světýlek) Thinking Machines CM-5 (který díky těm světýlkům můžete vidět ve filmu Jurský Park, kde hraje místo méně blikajícího Cray X-MP, který je zmíněn v literární předloze k filmu).
I dnešní superpočítače  nemají jeden super rychlý a super výkonný procesor, ale jsou poskládané z mnoha procesorů nebo dokonce z mnoha jednotlivých počítačů (ať už formou jednotlivých desek v racku, nebo propojených kompletních počítačů včetně case a zdroje).
A že to byla cesta do budoucnosti, ukazují i dnešní vícejádrové procesory, případně víceprocesorové stroje (i když to není vždy úplně jedno a to samé).

Jak do toho zapadá transputer?

V 80. letech přišla firma INMOS s produktem v mnoha směrech inovativním.
Transputer měl být procesor, a jako takový schopen pracovat i samostatně, ale navíc obohacen o možnost jednoduše a rychle se bavit se svými sourozenci, které mělo být možné do systému dle potřeby přidávat.

Transputery od INMOSu díky své jednoduchosti jako jedny z prvních realizovaly SoC – system on a chip – kdy se procesor zdařilo nacpat na jeden čip i s potřebnými periferiemi. Takové čipy bez velké potřeby mít hodně “bižuterie okolo” se pak snadno propojovaly do síťové struktury (nejčastěji “hyperkrychle”).
Aby spolu mohly procesory snadno komunikovat, měly samozřejmě vestavěné komunikační linky a přímo v instrukční sadě instrukci pro zahájení přenosu, který dál probíhal “na pozadí” během další činnosti procesoru.
Aby byly transputery co nejjednodušší, byly 32bitové (pozdější měly dokonce FPU pro zpracování pohyblivé řádové čárky), ale s jednoduchou instrukční sadou – v jendom bajtu byly 4 bity nibblu kódem instrukce a další 4 bity představovaly data (instrukcí nebylo 16, ale 31, protože jedna z “instrukcí” (zazvaná OPR) vlastně jen říkala, že “datový” nibble se má interpretovat jako druhá sada dalších 16 instrukcí (což je myšlenka vzdáleně podobná stejně pojmenované instrukci OPR pro mikrokódově skládané operace na PDP-8).

Vypadá to možná šíleně, ale pokud byl někdo nadšenec a chtěl si pořídit opravdový počítač, který něco počítá (a ne otřesné IBM PC), koupil si (za nemalé peníze) jeden transputer (míněno jeden INMOS procesor – to představovalo výdaj asi jeden až dva tisíce liber), připojil k terminálu (nebo nějakému osobnímu počítači, ze kterého transputer ovládal) a pokud se mu náhodou podařilo našetřit si víc, mohl si přikupovat další a další transputerové procesory.
Pro účely paralelních výpočtů se používal jazyk Occam, případně C nebo Fortran s Occamovskými funkcemi pro podporu multiprocesingu. Stalo se ovšem, že byl na transputery portován i operační systém Minix, a tak je bylo možno využít i jako unixový počítač.

Důvodů, proč se Transputery neujaly, je několik:
Vysoká cena. Šlo nejen o křemík – na ceně procesoru se podílí i cena pouzdra, a několik malých procesorů vycházelo dráž, než velký procesor. Dále jejich spojování jak výhod, tak nevýhod embedded procesorů a výkonných procesorů – s nástupem RISC architektury došlo k urychlení klasických procesorů a nebylo potřeba minimalistických jednoduchých konstrukcí.
A psýcha programátorů, kteří jsou zvyklí uvažovat a pracovat lineárně a
paralelní programování by pro ně bylo složité, nehledě na to, že by to
nemusel ustát zrovna ten jejich oblíbený programovací jazyk, který s
paralelizací nejspíš nepočítá. Podle mne stále ještě nejsme na paralelizaci dostatečně psychicky připraveni.

Kromě nadšenecky sestavených transputerových farem nebylo moc jasných komerčních aplikací, které by se zaryly do běžnějšího povědomí.
Snad jedinou je Atari Transputer Workstation 800.
To byla velká bedna, kam se daly strkat karty s transputery, a celé to bylo řízeno miniaturizovaným Atari Mega STE.
Pro představu, holá bedna s Atari STE a operačním systémem (bez transputerů) stála skoro 5 tisíc liber.
Jako operační systém byl použit HeliOS, unix-like operační systém, vyhovující POSIXu. Neřešil ale ochranu paměti a virtuální paměť, protože programy přeci běžely na více procesorech v oddělených paměťových prostorech. Většina unixových utilit na něm ale byla schopna běhu.
Přiložené Atari Mega STE poskytovalo grafiku, X-Window server a styk s okolním světem.
Transputeroví nadšenci sice tvrdí, že HeliOS zbytečně snižuje výkon systému tím, že na jednotlivých transputerech běží kromě samotné úlohy i jakási jádra systému, ale je to asi nejschůdnější cesta k tomu, do transputerů proniknout (protože aspoň svou podobností unixu připomíná něco poměrně důvěrně známého).

Protože je HeliOS uvolněn, a dá se stáhnout na webu, není teoreticky problém posbírat někde jednotlivé transputerové moduly, na PC nebo Sun (pro které je HeliOS v nejnovější verzi 1.3.1 k dispozici) nainstalovat systém a pak už jen vesele paralelně computerizovat.

Další možností je softwarová emulace. A tím se oklikou dostáváme zpět k osmibitům.
Transputery se totiž delší dobu nevyrábí a ty, co se dají poshánět u sběratelů, jsou stále velmi drahé (i když asi už ne tak, jako v době svého vzniku).
Daly by se tedy realizovat na FPGA nebo emulovat softwarově na nějakém současném embedded procesoru. Softwarová kompatibilita by dodržením instrukční sady byla zajištěna.
Má ale smysl dodržovat instrukční sadu komerčně neúspěšných třicet let starých procesorů? (Řečnická otázka, odpovím si později sám.)

Podívejme se ale na něco modernějšího. Na Amigu.
Amiga je dnes už, co si budeme říkat,  PowerPC platforma.
I když amigisti přešli na PowerPC asi jen proto, že po opuštění 68k procesorů na něj přešel Apple s Macintoshem, a někteří zatvrzelí tento přechod nikdy nepřijali, přeci jen 68k procesory se už normálně nevyrábí a na hraní starých Amigáckých her stačí FPGA napodobeniny typu Minimig (i když Minimig nese krom FPGA, kde je nacpán chipset, i reálný 68000 procesor).

Autoři nové Amiga One X-1000 šli ale dál.
Kromě PowerPC, na kterém se spouští Amiga OS 4.1, obsahuje jako koprocesor i procesor XMOS XS1-L2 (dvoujádro, 16 hardwarově podporovaných threadů, 1000 MIPS, 128 kB SRAM).
XMOS nabízí i procesory jednojádroové a čtyřjádrové (jako XS1-G – čtyřjádro, 32 threadů, 256 kB SRAM).
Procesory XMOS jsou určeny jako koprocesory nebo jako náhrada DSP procesorů. Jeden procesor stojí asi 15 dolarů, což není málo, ale ani moc.
Ale hlavně – stejně jako transputery od INMOSu se dají spojovat do uzlů.
Do Xorro slotu nové Amigy jde tedy teoreticky zapojovat karty s dalšími XMOS procesory a měnit ji tak pomalu na výkonnou transputerovou stanici, ne nepodobnou právě Atari ATW-800, která bude provádět efektování zvuku nebo práci s obrazem takřka levou zadní a ještě v reálném čase.
Místo Occamu se XMOS procesory programují v C doplněném o funkce, které se starají o distribuci kódu mezi jednotlivá jádra. Firma šíří i překladač xcc.

Ještě jednu drobnost ale XMOS nabízí. Vývojovou kartu XK-XMP-64.
Ta obsahuje 16 čtyřjaderných procesorů spojených do hyyperkrychle, tedy 64 jader, což dává dohromady 512 threadů a 25.6 GIPS.
S kartou se dá komunikovat pomocí dvou ethernetů nebo ji programovat přes USB.
Akorát že stojí asi 30 tisíc korun, což s cenou jednoho procesoru úplně nekoresponduje (ani v nejdražší verzi 36 USD za procesor). Levnější by bylo nakoupit procesory a navrhnout si desku samo domo.
Nicméně, něco takového připojit k nějakému počítači, daly by se s tím dělat právě ty úžasné věci, jaké bude umět nová Amiga.
A klidně by to přitom mohla být stará Amiga šestistovka. Nebo Atari ST. Anebo ZX Spectrum.
Upřímně řečeno, myslel jsem v tom okamžiku na Sinclair QL.
Jenomže QL nemá žádný Ethernet, aby do a z karty sypalo data.
A kód pro kartu by stejně bylo potřeba připravit předem bokem někde na PC nebo Macu s xcc překladačem.
Jenže jaký jiný procesor má takovu podporu vzájemné komunikace, aby se dal transputerizovat a zapojit do rozumné struktury třeba té hyperkrychle?

Když jsem psal o tom, že v podstatě neexistují osmibitové inkarnace multiprocesorových strojů, taktně jsem zamlčel, že vím o existenci Apple Crate II.
Původní Apple Crate byl osmibitový paralelní počítač postavený z osmi desek Apple II. Apple Crate II je pak postaven ze 17 desek vzájemně propojených jednoduchou sítí (na kterou je použit konektor pro připojení joysticku).
ApppleCrate II má doplněno rozšíření Basicu pro komunikaci po síti (PUTMSG, GETMSG) a umožňuje šířit jednoduché Basicové a strojové programy po jednotlivých deskách (BPRUN) a sbírat od nich výsledky.
Hezká demonstarce toho, že to není celé nesmysl a že to i na osmibitu funguje.

Protože Apple II desky nemám, přemýšlel jsem dál. Je opravdu potřeba skládat k sobě hotové počítače?

Tímto způsobem by šlo propojit třeba Atari 800 XL/XE, na jehož SIO konektoru lze síť realizovat, viz BeWeNet (na tomto hardware lze dokonce hrát síťové hry, jako Multidash nebo závody aut – serverové Atari nabootuje z ne-SIO zařízení, třeba z ROM cartridge, a ostatním Atari, která bootují ze SIO, rozešle kód hry, a pak po síti běhají herní data – další možnost je nabootovat ze SIO, třeba z disketovky, tu pak odpojit, přičemž hrozí odpálení počítače, připojit BeWeNet a pak rozeslat kód ostatním stanicím).
Ovšem nějaké větší množství levnějších Atari se dejme tomu na Aukru neobjevuje (lidi za ně žádají šíleně) a navíc že bych si paralelní počítání musel programovat v 6502 assembleru, který není můj nativní, taky trochu odrazuje.
Tak jsem musel své paralelní choutky směrovat jinam. O propojení třeba ZX-81 desek jsem ale ani neuvažoval, protože ZX-81 nemá žádnou rozumnou síť (možnost propojení přes zdířky magnetofonu nepočítám).

Jako ekonomičtější se jeví jít cestou XK-XMP-64 karty – t.j. vzít haldu nějakých dostupných procesorů, nahulákat je na desku nebo na vzájemně propojitelné desky, nahrát do nich nějaký firmware a nějak (přes sériák třeba) s nimi komunikovat.

Jaké procesory by se nabízely?
* Z80. Dají se najít taktovatelné až na 20 MHz, jejich instrukční sadu znám velmi dobře a už bych si s nimi nějak poradil, navíc po připojení k Z80 počítači (ZX Spectru) by zpracovávaly jeho nativní kód, enbylo by tedy nutno trápit se s dvěma různými programovacími technikami, různými vývojovými prostředími nebo s různými instrukčními sadami. Není to ale system-on-chip a bude potřeba dodat RAM, ROM a podpůrné obvody.
* Nějaké embedded jednočipy, třeba osmibitové SX, 8051, Z8 a další – které jsou ale moc jednoduché a mají malou zabudovanou paměť.
* Nějaké Atmegy, které jsou relativně levné, přitom jde o slušné mnohobitové procesory s RISC jádrem.
* Propeller od Parallaxu – osmijádrový (!) šestnáctibitový procesor se slušnou výbavou (má i vlastní krystal) – programuje se v bytekódu, což znamená mírnou ztrátu výkonu. Sice umí inline assembler, ale aspoň začátek programu musí být bytekódový. Výhodou je více jader a slušný výkon (procesor zvládne softwarově generovat VGA obraz a je použit v terminálových aplikacích Vince Briela – tedy v zařízení PockeTerm a v počítačích Replica-1 a Altair 8800 Micro).
* Silnější moderní procesor – nějaký embedded ARM nebo embedded PowerPC od Freescale.
Jeho výhodou by byl vysoký výkon – však PowerPC nadarmo není v PowerMacintoshích a v Amigách (potažmo v Pegasosu) a i embedded PPC procesory mívají vektorové jednotky AltiVec a další vymoženosti.
Jenže – jenže by bylo potřeba psát programy v příslušném assembleru nebo je kompilovat v příslušném C. Jak jsem tak myslel na Sinclair QL, bylo by jistě hezké, kdyby se dal vyexportovat program v SuperBasicu, jenže to by znamenalo napsat interpret SuperBasicu pro jiný procesor – a to nejde, protože na SuperBasicu je super právě to, že je rozšířitelný, a tato rozšíření by prostě nefungovala.
Takže by nezbylo než se na SuperBasic vykašlat a programovat přídavné procesory třeba pomocí Forthu (což by šlo, Forth pro Propeller s podporou více jader určitě existuje).

No a jak jsem tak hledal ten vhodný procesor, a měl pořád na mysli, jak ho připojit k Sinclairu QL, našel jsem u Freescale, že 68k procesory jsou vlastně taky považovány za embedded (i když už se standardně vyrábí jen ColdFire).
Nojo, ale i když by se použila 68000, co s tím? Kdo se bude otravovat s psaním programů pro 68k v assembleru (kromě mne)?
Zase je potřeba vymyslet, jak se popasovat se SuperBasicem.

A tak mne napadlo:
Mějme jednoduchý počítač sestávající z 68000, RAM a ROM. není potřeba, aby to bylo celé QL. Ale na minimální funkčnost to bude potřebovat ještě dvě věci:
Komunikaci se světem – ideálně Q-Network, na propojení více uzlů by byl vhodnější, než sériák. Hodil  by se i nějaký switch na nastavení síťové adresy.
Náplň do ROMky – Minerva ROM (nečeká po spuštění na klávesu, narozdíl od starších ROM), Toolkit II (podpora sítě) a doplnění autoloadu (přidělení síťové adresy a boot ze sítě).

To vypadá velice pěkně. Takových jednoduchých modulů se dá klasickými Sinclairovými síťovými kabely (stíněná dvoulinka s jacky) pospojovat několik.
Nebo se jich dá realizovat víc na jedné desce, třeba 16 procesorů. Pak by stačil sí’tový kabel jen jeden na připojení základního QLka.
Nebo druhý na připojení dalších 16 procesorů.

Má to ale háček.
Zrovna připojení sítě je realizováno přes ZX 8302, jeden ze zákaznichých obvodů QLka, o kterém nevím, co dělá. Bude to vyžadovat další analýzu.
Navíc nejsem schopen si desku s 68000 procesorem ani sám nakreslit, natož postavit.

Ale nebude těžké zjistit, jak by se to celé chovalo. V podstatě staří vzít několik Sinclairů QL, propojit je sítí a napsat nějaký program, který by výpočetní zátěž rozložil mezi více strojů.

Z pohledu normálních lidí to ale bude pořád blbost, u které bude nejlepší, když zůstane ve fázi teoretických úvah.