INMOS Transputer

design di un microprocessore per il calcolo parallelo prodotto dalla INMOS

Il INMOS Transputer era un pioneristico design di un microprocessore per il calcolo distribuito prodotto dalla INMOS, una piccola azienda inglese, negli anni '80. Per qualche tempo nel tardo 1980, molti considerarono il Transputer come il nuovo progetto per il calcolo del futuro. Oggi, solo un decennio più tardi, questo interessante microprocessore è completamente dimenticato.

Background

Nei primi anni '80 sembrava che le CPU convenzionali avessero raggiunto il loro limite riguardo alle performance. Fino a questo momento i progettisti erano stati limitati principalmente dall'ammontare di circuiti che potevano piazzare su un chip a causa di problemi di costruzione. Ma con il continuo migliorare del "fabbing process" il problema mutò: i chip potevano contenere più circuiti di quelli che i progettisti sapevano sfruttare. Presto le tradizionali architetture CISC raggiunsero il loro massimo possibile, e non era ben chiaro se si sarebbe potuto sorpassarle.

Sembrò che l'unico modo fosse implementare l'uso del parallelismo, cioè l'uso di svariate CPU che avrebbero lavorato assieme per compiere diversi compiti allo stesso tempo. Tutto ciò dipendeva dalla possibilità della macchina di essere in grado di eseguire più processi allo stesso tempo, capacità nota come multitasking, troppo difficile da eseguire fino ad allora, ma supportata dai processori di nuova generazione. Fu chiaro che in futuro questa caratteristica sarebbe stata supportata da tutti i sistemi operativi.

Un effetto collaterale di molte architetture multitasking è che spesso permette di eseguire i processi su CPU fisicamente differenti, nel qual caso il processo è noto come multiprocessing. Una CPU a basso costo, pensata in quest'ottica, avrebbe permesso di aumentare la velocità di calcolo di una macchina aggiungendo altri processori simili, scelta potenzialmente molto più economica di una basata su un singolo e più potente processore.

Design

Il transputer (Transistor Computer) fu il primo microprocessore ad uso generico progettato scpecifificatamente per essere usato in sistemi di calcolo parallelo. L'obiettivo era di produrre una famiglia di chip, limitati in costo e potenza, che avrebbero potuto poi essere connessi tra loro per formare un computer completo. Il nome era stato scelto per indicare il ruolo che il singolo Transputer avrebbe avuto: molto di loro sarebbero stati usati come "mattoni di base", proprio come i transistor lo erano stati precentemente.

Originariamente il piano era di far costare i Transputer solo pochi dollari a unità. La INMOS li vide usati per praticamente tutto, dall'operare come la CPU per un computer, da agire come channel controller per i disk drive nella stessa macchina. I cicli inutilizzati su ogniuno di questi Transputer avrebbe potuto essere usati per altri compiti, accrescendo grandemente le performance complessive delle macchine.

Anche un singolo Transputer avrebbe avuto tutti i circuiti necessari per lavorare da solo, una caratteristica più comunemente associata ai microcontrollori. L'idea in questo caso era di permettere ai Transputer di essere connessi assieme il più facile possibile, senza bisogno di un un bus (o una scheda madre) complesso. Invece semplicemente bastava fornire energia e un segnale di clock, senza nemmeno bisogno di RAM, RAM controller, supporto dal bus e nemmeno un RTOS, tutto ciò era già incluso.

Il progetto di base del Transputer includeva dei link seriali che gli permettevano di comunicare con fino a quattro altri Transputer, ogniuno a 5, 10 o 20 Mbit/s, una velocità davvero molto elevata per quegli anni. Ogni gruppo di transputer poteva essere connesso assieme ad altri su link anche più lunghi (decine di metri) per formare una singola "computing farm". Una tipica macchina desktop poteva avere due "low end" Transputer a controllare i compiti di I/O con alcune delle sue linee seriali (connesse all'hardware appropriato) mentre dialogavano con uno dei loro "fratelli maggiori" funzionante come CPU su un'altra. I Transputer potevano essere inizializzati su link di rete (diversamente dalla memoria in molte macchine) così un singolo Transputer poteva far partire l'intera rete.

C'erano dei limiti alla grandezza di un sistema che poteva essere creato a questo modo. Siccome ogni Transputer era connesso a un altro in uno schema fisso punto-a-punto, mandare messaggi a un Transputer più distante richiedeva che questo fosse ridirezionato da ogni chip sulla linea. Questo introduceva un ritardo a ogni "hop", portando a grossi ritardi su grosse reti. Per risolvere questo problema INMOS fornì anche uno switch a ritardo-zero che connetteva fino a 32 Transputer (o switch) in reti anche più grandi

Scheduler

A supportare i link era una parte di circuito addizionale che trattava l'ordine del traffico che vi passava. I processi che aspettavano comunicazione erano automaticamente messi in pausa mentre il circuito di rete finiva le sue letture o scritture. Il tempo di elaborazione sarebbe stato dato ad altri processi, ciè includeva due livelli di priorità per evitare i deadlock. Lo stesso sistema logico era usato per comunicare fra progranni in esecuzione sullo stesso Transputer, implementato come una "rete virtuale" in memoria. Quindi un programma in richiesta di un input o un output automaticamente veniva messo in pausa mentre l'operazione era completata, un compito che normalmente richiedeva che il sistema operativo funzionasse come arbitro per l'hardware. I SO sul transputer non dovevano occuparsi dello scheduling, in pratica si poteva pensare che il chip avesse egli stesso un sistema operativo all'interno.

Per poter includere tutte queste funzionalità su un singolo chip, il core del Transputer era molto più semplice della maggior parte delle CPU: usava un'architettura RISC, ma diversamente dalle più comuni CPU RISC basate su un pesante utilizzo dei registri, il transputer usava molto lo stack. Questo permetteva di eseguire rapidamente il context switch semplicemente sopstando lo stack pointer sulla parte di memoria assegnata a un altro programma (una tecnica usata i molti sistemi contemporanei). Il Transputer inoltre includeva tre registri "normali", ma questi erano di fatto le copie delle prime tre celle dello stack, usate per permettere le istruzioni a indirizzo zero.

Set di istruzioni

Il set di istruzioni del Transputer era formato da instruzioni di 8 bit divise in due nibble. Quello superiore conteneva la codifica dell'istruzione, rendendolo un vero RISC con solo 16 istruzioni di base, quello inferiore, o una costante o più comunemente un'offset relativo allo stack pointer. Costanti e offset più lunghi potevano essere usati, ma richiedevano byte di indirizzo addizionali in fase di fetch e decodifica. Inoltre le istruzione meno frequentemente utilizzate erano supportate tramite la codifica di itruzioni chiamata Operate (Opr), la quale decodificava la costante di dati come un codice di operazione esteso, fornendo un'espansione del set di istruzione facile e quasi infinita, introdotta con una nuova implementazione del Transputer. I processi più piccole, comunque, giravano più velocemente, ma l'idea intera del Transputer era comunque di far girare piccoli processi.

Programmazione ad alto livello

Per la programmazione dei transputer, la INMOS ha progettato un linguaggio apposito, ispirato ai CSP di C.A.R. Hoare e chiamato Occam. In effetti è più corretto dire che il Transputer fu progettato specificatamente per eseguire codice Occam, in modo simile a come molti processori CISC dell'epoca erano pensati per eseguire Pascal o C. L'Occam supportava lo sviluppo di applicazioni divise in più processi e spesso semplicemente scrivere un programma in Occam risultava in un'applicazione di questo tipo. Con il supporto per i task e le comunicazioni integrati nel chip e il linguaggio di programmazione che vi interagiva direttamente, scrivere il codice per cose come controllorare un device controller divenne una banalità, anche il codice più semplice poteva controllare le porte seriali per l'I/O, e si sarebbe automaticamente messo in pausa in assenza di dati.

Implementazioni

I primi modelli di Transputer furono annunciati nel 1938 e rilasciati nel 1984/5. D'accordo con il loro ruolo come dispositivo simile a un microcontrollore, includevano 2kB di RAM e un RAM controller integrato, che permetteva di aggiungere memoria senza altro hardware. A differenza di altre architetture i Transputer includevano un'Unità di gestione della memoria, anche se in un sistema basato sullo stack questo non è molto importante, siccome gli indirizzi sono quasi sempre offset e non richiedono modifiche complesse.

Il prototipo a 16 bit del transputer fu l'S43, senza lo scheduler e senza il il trasferimento dei blocchi sui link su DMA. Al momento del lancio il T212 e il M212 (fornito di un disk controller) erano le offerte a 16 bit.

Al momento del lancio l'offerta a 32-bit consisteva nel T414'. La RAM fu più tardi portata a 4K nel T424, che includeva anche un'istruzione JO trap per aiutare il debug.

La successiva versione fu il T800, nel 1987, la quale includeva un'unità a virgola mobile da 64-bite tre registri dedicati a questo tipo di calcolo. Inoltre la RAM veniva aumentata a 4k. Molte nuove generazioni di queste CPU, conosciute come famiglie T-2, T-4 e T-8 furono rilasciato nei successivi anni per migliorare la programmazione e il debug. Lo switch a 32 link C004 fu inoltre aggiunto alla linea di prodotti.

Competition

While the Transputer was simple, but powerful, compared to many contemporary designs, it never came close to meeting its goal to be used universally in both CPU and microcontroller roles. In the microcontroller realm the market was dominated by 8-bit machines and cost was the only serious consideration. Here even the T-2s were too powerful and expensive for most users. The Transputer's lack of support for virtual memory inhibited the porting of mainstream variants of the UNIX operating system, though ports of UNIX-like operating systems (such as Minix and Idris from Whitesmiths) were produced.

COmpetizione

Nonostante il Transputer fosse semplice ma potente, rispetto a molte architetture contemporanee, non riuscì mai ad avvicinarsi al suo obiettivo di essere usato universalmente sia come CPU sia come microcontrollore. Il secondo campo era dominato da macchine a 8-bit e il costo era il solo parametro considerato, anche il T-2s era troppo potente e costoso per la maggior parte degli utenti. La mancanza di supporto del Transputer per la memoria vertuale impedì il porting delle principali varianti dei sistemi operativi Unix (anche se vennero prodotte varianti come Minix e Idris diWhitesmiths.)

Vedi anche