INMOS Transputer: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Phas (discussione | contributi)
mNessun oggetto della modifica
m rilettura
Riga 1:
Il '''INMOS Transputer''' era un pioneristico design di un [[microprocessore]] per il [[calcolo parallelo]] prodotto dalla [[INMOS]], una piccola azienda inglese, negli [[Anni 1980|anni '80]]. Per qualche tempo, fin quasi al termine neldi tardoquel 1980decennio, molti considerarono il Transputer come il nuovo grande progetto per il calcolofuturo del futurocalcolo. 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 questoquel 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 limite massimo possibile, e non era ben chiaro se si sarebbe potuto sorpassarlesuperarlo.
 
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 [[sistema operativo|sistemi operativi]].
Riga 9:
 
== Design==
Il transputerTransputer (Transistor'''Trans'''istor ComputerCom'''puter''') fu il primo microprocessore ad uso generico progettato scpecifificatamentespecificatamente 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: moltomolti di loro sarebbero stati usati come "mattoni di base", proprio come i transistor lo erano stati precentementeprecedentemente.
 
Originariamente il piano era di far costare i Transputer solo pochi dollari a unità. La INMOS li vide usati praticamente per praticamente tutto, dall'operare(operazioni cometipiche ladi una CPU per quanto riguardava un computer, dae agirefunzioni comedi [[channel controller]] per i disk drive nella stessa macchina). I cicli inutilizzati su ogniunoognuno di questi Transputer avrebbeavrebbero 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 [[microcontrollore|microcontrollori]]. L'idea, in questo caso, era di permettere ai Transputer di essere connessi assieme il più facilefacilmente possibile, senza bisogno di un un [[bus]] (o una [[scheda madre]]) complesso. InveceAl semplicementecontrario, bastava semplicemente 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.
 
=== Link ===
Il progetto di base del Transputer includeva dei link seriali che gli permettevano di comunicare con altri Transputer (fino a quattro altri Transputer), ogniunoognuno 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 [[Input/output|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ìcosicché 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èe ciò includeva due livelli di priorità per evitare i [[deadlock]]. Lo stesso sistema logico era usato per comunicare fra progranniprogrammi 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 SOsistemi operativi 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 sopstandospostando lo [[stack pointer]] sulla parte di memoria assegnata a un altro programma (una tecnica usata ida 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, oconteneva 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ùcon piccole,''context'' comunque,più piccoli giravano più velocemente, ma l'idea intera del Transputer era comunque di far girare molti piccoli processi.
 
=== Programmazione ad alto livello ===
Per la programmazione dei transputer, la INMOS ha progettato un linguaggio apposito, ispirato ai [[Communicating Sequential Processes|CSP]] di [[C. A. R. Hoare]] e chiamato [[linguaggio di programmazione Occam|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_%28linguaggio%29Pascal (linguaggio)|Pascal]] o [[C_%28linguaggio%29C (linguaggio)|C]]. L'Occam supportava lo sviluppo di applicazioni divise in più processi e spesso semplicementela scriveresemplice scrittura di 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]]/[[1985|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'[[MMU|Unità di gestione della memoria]], anche se in un sistema basato sullo stack questo non è molto importante, siccomepoiché gli indirizzi sono quasi sempre offset e non richiedono modifiche complesse.
 
=== [[16-bit]] ===
Il prototipo a 16 bit del transputer fu l<nowiki>'</nowiki>'''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.
 
=== [[32-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]].
 
=== [[Virgola mobile]] ===
La successiva versione fu il '''T800''', nel [[1987]], la quale includeva un'unità a [[virgola mobile]] da [[64-bit]] e 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 rilasciatorilasciate nei successivi anni per migliorare la programmazione e il debug. Lo switch a 32 link '''C004''' fu inoltre aggiunto alla linea di prodotti.
 
== Competizione ==
 
Nonostante il Transputer fosse semplice ma allo stesso 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,. ancheAnche il T-2s era troppo potente e costoso per la maggior parte degli utenti. La mancanza di supporto del Transputer per la memoria vertualevirtuale impedì il [[porting]] delle principali varianti dei sistemi operativi [[Unix]] (anche se vennero prodotte varianti come [[Minix]] e [[Idris_%28sistema_operativo%29Idris (sistema operativo)|Idris]] di [[Whitesmiths]].)
 
Nel campo [[desktop]] / [[workstation]] il Transputer era abbastanza veloce, operando a circa 10 [[MIPS]] a 20MHz, un'eccellente performanche''performance'' per i primi anni ottantaOttanta, ma, al momento in cui venne venduto il T800, fornito di una [[FPU]], le altre architetture RISC l'avevano già sorpassato. Questo avrebbe potuto essere miticatomitigato dalla possiblità di creare macchine con più Transputer, ma il T800 costava circa 400$ al pezzo quando venne rilasciato, quindi il rapporto prezzo/potenza era svantaggioso.
 
== T9000 ==
 
L'INMOS cercò di correggeremigliorare ciòla sua linea di prodotti con l'introduzione del '''T9000'''. Il T9000 aveva in comune molte ''feature'' con il T800, ma implementava alcune innovazioni e aggiungeva delle caratteristiche per il supporto della [[superscalarità]]. Diversamente dai modelli precedenti, il T9000 aveva una vera [[cache]] da 16kB ad alta velocità al posto della RAM,; inoltre permetteva di usare questa come meriamemoria e includeva funzionalità stile MMU per controllare tutto ciò (conosciute come ''PMI''). Per aumentare ancora la velocità il T9000 spostava in cache le prime 32 locazionelocazioni dello stachstack, inveceal contrario delle tre delle versioni precedenti.
 
Il T9000 usava una [[pipeline]] a cinque stadi per aumentare la velocità. Un'intaressanteinteressante aggiunta fu il ''raggruppatore'' il qualeche raccoglieva le istruzioni in uscita dalla cache e le raggruppava in pacchetti più larghi, da 4 bytes, per alimentare più velocemente la pipeline. I gruppi venivano poi completati in un singolo ciclo, come se fossero una singola istruzione più grossa su una CPU più veloce.
 
Questo fu il colpo finale per la INMOS, che non aveva i fondi necessari per continuare lo sviluppo. La compagnia fu venduta alla [[ST Microelectronics|SGS-Thomson]] (oggi [[ST Microelectronics]] ) che cancelloeliminò il T9000 e produsse l'architettura 212/414 per linee di microcontrollori come le famiglie '''ST10''' e '''ST20''', ora non più in produzione, anche se parti di questa tecnologia sono incluse in chipset per applicazioni speciali ( ad esempio [[GPS]] ).
 
Ironicamente, fu in gran parte grazie al parallelismo che le architetture delle CPU convenzionali divennero più veloci. Invece di usare un pesante sistema esplicito come il Transputer, le CPU moderne lavorano in parallelo solo a livello di istruzioni, dividendo il codice fra un numero di fissato di core. Pare che questa forma di parallelismo, conosciuta come [[superscalarità]], sia molto più adatta al calcolo d'uso generale.
 
=== Vedi anche ===