Von Neumann è un nome che ricordo, da buon informatico, come associato, tanto per cambiare, ad una John Von Neumannmacchina. Un’altra, dopo quella di Turing? Beh, più propriamente si tratta di un’architettura degli elaboratori, roba dei primordi dell’informatica, quando si costruivano i primi computer e non si sapeva bene come fare.
Architettura di Von Neumann
Si dice architettura di Von Neumann quella di un elaboratore in cui programma e dati su cui opera sono contenuti nella stessa memoria (RAM, cioè “Random Access Memory”, perché quando ci serve possiamo leggerne una locazione qualsiasi, non è un nastro come quella della macchina di Turing). La CPU (“Central Processing Unit”) esegue il codice presente in memoria a partire da una certa locazione; questo codice può anche comportare il caricamento di dati, che viene fatto spostando un valore dalla memoria ai suoi registri interni, sui quali la sua ALU (“Arithmetical-Logical Unit”, la parte della CPU che esegue i calcoli) può operare.
Una volta che un valore è in un registro, quindi, un’istruzione successiva lo può manipolare. Esempio: un programma che calcola la somma di due numeri, cosa che può sembrare banale per un computer, ha in realtà bisogno di quattro istruzioni:
- Carico il valore del primo operando dalla cella di memoria M0 al registro R0 della CPU.
- Carico il valore del secondo operando dalla cella di memoria M1 registro R1 della CPU.
- Eseguo la somma del valore in R0 e R1 mettendo il risultato nel registro AC, sempre nella CPU.
- Copio il valore del registro AC nella cella di memoria M2, che quindi conterrà il risultato della somma di M0 e M1.
Sembra complicato? Se dovessi fare una moltiplicazione lo sarebbe molto di più, visto che le ALU, almeno quelle del corso di Architetture degli Elaboratori all’Università, non erano in grado di eseguire moltiplicazioni né divisioni quindi bisognava aggiustarsi con cicli di somme e sottrazioni. Eh sì, i computer sotto sotto sono proprio stupidi, il loro punto di forza è che queste operazioni elementari le possono eseguire ad una frequenza che già negli anni ’50 era dell’ordine di milioni di volte (MHz) al secondo. In quanto alla semplicità del meccanismo, Turing aveva già dimostrato che bastava anche meno per poter calcolare “qualsiasi cosa sia calcolabile”. È chiaro che potenziando il set di istruzioni si possono scrivere programmi più brevi e più semplici da leggere, ma è da vedere se convenga. Hardware più complesso può essere difficile da progettare e produrre, e potrebbe anche dover funzionare a velocità inferiori. Insomma, bisogna trovare un bel compromesso, come succede quasi sempre nella vita.
L’architettura di Von Neumann si contrapponeva, negli anni in cui fu pensata – e cioè alla fine degli anni ‘40 del secolo scorso – a quella che era venuta in mente ai cervelloni di Harvard, che invece vedeva dati e istruzioni in memorie separate (quindi la CPU accede a memoria codice e memoria dati con due bus separati e paralleli, e può contemporaneamente leggere un’istruzione e leggere/scrivere un dato: il programma della somma qui avrebbe bisogno solo di 3 istruzioni).
In realtà il mondo è molto più complesso della teoria, e nei moderni computer queste due architetture convivono a diversi livelli di astrazione, ad esempio una CPU con memoria cache (piccole memorie velocissime, mentre la RAM è piuttosto lenta) può comportarsi “internamente” secondo l’architettura Harvard (due cache separate per dati e codice) ed “esternamente“, cioè per quanto riguarda l’accesso alla memoria RAM, secondo quella di Von Neumann.
In ogni caso, lo schema proposto da Von Neumann all’epoca vinse con cappotto su quello di Harvard, ebbe una diffusione pressoché totale, e segnò sicuramente la storia dell’informatica in modo marcato ed indelebile.
Una grandissima “testa d’uovo”
Detto questo, chi era questo signor Von Neumann? Evidentemente se di lui so solo quel che ho detto prima, è perché sono nato troppo tardi. Infatti è stato un grande scienziato, ed ai suoi tempi, una vera celebrità. Nato ungherese (Neumann Janos Lajos, classe 1903) e naturalizzato americano a seguito della Seconda Guerra Mondiale, fu matematico, fisico e matematico applicato (oggi magari diremmo “informatico”), con al suo attivo 150 pubblicazioni accademiche di grande importanza.
Fu un bambino prodigio, su cui gli aneddoti si sprecano: a sei anni conversava con il padre in greco antico, a otto conosceva l’analisi, a dieci aveva finito di leggere una corposa enciclopedia storica. Leggeva in effetti molto, e con straordinaria rapidità, tanto che in bagno si portava sempre due libri, temendo di finire il primo prima di aver finito di fare la cacca.
La sua memoria era leggendaria, così come la sua capacità a far di conto: sempre a soli sei anni, era in grado di stupire amici di famiglia e parenti ripetendo a memoria nomi e numeri degli elenchi telefonici (ma non sarebbe stato meglio farlo esercitare con delle poesie?) ed eseguendo a mente divisioni tra numeri di 8 cifre. Riuscirà, da grande, su questo suo cavallo di battaglia, perfino a battere in rapidità i primi computer.
Il padre assecondava le sue doti matematiche (a 18 anni fu eletto miglior matematico d’Ungheria) ma impose che all’università egli si applicasse su qualcosa di più… concreto. Scelse chimica, al Politecnico di Zurigo, ma si iscrisse in contemporanea a matematica a Budapest. Frequentare le lezioni poteva risultare un po’ problematico, ma forse visto il tipo non era troppo necessario: all’età di 22 anni ottenne senza problemi la laurea in entrambe le facoltà.
Si traferì a Göttingen, per occuparsi dei fondamenti della matematica e di meccanica quantistica, forse affascinato dalle lezioni di Einstein che aveva potuto seguire a Berlino nel tempo libero. Qui dimostrò tra l’altro l’impossibilità di dimostrare la coerenza dell’aritmetica e pubblicò articoli che avrebbero dato inizio alla teoria dei giochi, come quello che contiene il celebre algoritmo Minimax (1), che oggi si studia ad ogni corso di intelligenza artificiale (è quello che permette di scrivere un programma per far giocare una macchina ad un gioco da tavolo sicuramente meglio di me).
Alla fine degli anni ‘20 il suo nome era già molto famoso, e nel 1930 fu invitato a Princeton ad insegnare. Come professore non doveva proprio essere un idolo degli studenti: si dice che scrivesse calcoli complessi usando piccole porzioni di lavagna che poi rapidamente cancellava, col risultato che nessuno riusciva mai a copiare. Suoi colleghi a Princeton furono, tra gli altri, Einstein, Morse e Weyl. Da lì a poco Hitler prese il potere in Germania, e John pensò che non sarebbe stata una cattiva idea rimanere lì negli USA.
Nel 1937 fu naturalizzato cittadino americano e gli fu proposto di collaborare con l’esercito; da lì in poi fu un’escalation di responsabilità politico-militari che lo portarono ad avere un ruolo di primo piano nello sviluppo dell’arma atomica e a diventare uno dei consiglieri scientifici più influenti sui governi del primo Dopoguerra.
Nel 1944 pubblicò, insieme a Oskar Morgenstern, “Theory of Games and Economic Behavior”, testo famosissimo in cui i due autori lanciavano la “Teoria dei Giochi”, ossia il tentativo di descrivere matematicamente il comportamento umano in quei casi in cui l’interazione fra uomini comporta la vincita, o lo spartirsi, di qualche tipo di risorsa. Le applicazioni in campo economico dei modelli proposti furono subito evidenti, e contribuirono ad introdurre un sacco di matematica in più nello studio dell’economia, sicuramente con gran gaudio per i suoi studenti.
Nello stesso anno Von Neumann incontrò per la prima volta i calcolatori, prima l’Harvard Mark I (2) e poi l’ENIAC (3), un primordiale computer sviluppato per conto dell’esercito per effettuare calcoli balistici. Non era programmabile (si selezionava tra i possibili l’algoritmo da utilizzare tramite una plancia su cui venivano collegati o scollegati dei cavi elettrici) ed aveva una memoria di soli 20 numeri di 10 cifre. Macchinoso e poco affidabile, era poco più utile di una grossa calcolatrice. John lo utilizzò per la prima previsione metereologica al computer della storia: 24 ore per processare i dati, e 250.000 operazioni in virgola mobile dopo, le previsioni per il giorno seguente erano pronte: non molto utile (“Che tempo farà domani a mezzogiorno?” “Te lo dico domani a mezzogiorno!” “Grazie, ma forse mi basterà mettere il naso all’insù”) ma in fondo era solamente una proof of concept. Da quel punto in poi era solo questione di potenziare la macchina. Da notare, a proposito della meteorologia, che essa era un pallino del nostro matematico: era profondamente interessato ai sistemi climatici ed ai loro meccanismi evolutivi, sognandone la manipolazione, arrivando a proporre di colorare le calotte polari per far loro assorbire più calore e quindi portare ad un riscaldamento globale del pianeta. Forse non una delle sue idee più brillanti, ma comunque ora sappiamo che in quegli anni ad una cosa del genere l’umanità stava già lavorando, anche senza rendersene conto.
John pensava che sui computer si potesse fare molto meglio; l’occasione venne nel 1945 quando fu coinvolto come consulente nello sviluppo del successore dell’ENIAC, l’EDVAC (“Electronic Discrete Variable Automatic Computer”). Per realizzare un computer programmabile, bisognava sviluppare il concetto della macchina di Turing e Von Neumann fece esattamente questo, proponendo per la nuova macchina l’architettura di cui abbiamo già parlato. L’EDVAC richiese sei anni di lavoro e venne a costare giusto un pelino in più di quanto era stato messo a budget: il quintuplo. Però era un computer di tutto rispetto, con una memoria di circa 5.5 KB, in grado di eseguire un’addizione in 864 microsecondi ed una moltiplicazione in 2900, occupava una superficie di 45,5 mq e richiedeva una potenza di 56 KW, nonché un personale di 30 persone che si occupasse di lui. Al termine del suo periodo operativo, durato una decina d’anni, era in grado di funzionare ininterrottamente senza problemi per circa 8 ore.
La tecnologia di questi primi computer, composti da valvole termoioniche e diodi (l’EDVAC ne contava rispettivamente circa 6000 e 12,000), poneva infatti notevoli problemi di affidabilità. Le valvole generavano un calore notevole che le faceva bruciare spesso (l’ENIAC era fatto di 18,000 valvole, ma in tutta la sua vita ne richiese la sostituzione di oltre 19,000), tanto che per evitare lo stress termico in fase di accensione e spegnimento si tendeva a tenere queste macchine sempre accese. Le cause di errore potevano essere diverse e molteplici, come quando il 9 settembre 1947 il tenente della Marina Americana Grace Hopper ed il suo team scoprirono che il malfunzionamento nel calcolatore Mark II era dovuto ad una falena, rimasta incastrata tra i circuiti. L’insetto venne rimosso ed incollato sul registro d’uso (una specie di screenshot ante litteram!) dove Grace annotò: “15:45. Relay #70 Panel F (moth) in relay. First actual case of bug being found”. A questo aneddoto viene fatta risalire l’etimologia del termine “bug” come errore informatico, anche se in realtà sembra che questa parola facesse già parte del gergo dei tecnici da qualche decennio.
I contributi in campo informatico di John Von Neumann furono innumerevoli. A lui si deve, ad esempio, la creazione del concetto di automa cellulare, nel corso dei suoi studi matematici sull’auto-replicazione, questo ben prima che avesse a disposizione un computer. Nel 1949 propose la struttura di un programma per computer auto-replicante, considerato il primo virus informatico.
Sognava macchine auto-replicanti da sparare sulla Luna o sugli asteroidi per estrarne i minerali. Proprio la loro crescita esponenziale, da foraggiare con le risorse estratte, avrebbe costituito il modo più rapido ed efficiente di creare un’attività mineraria spaziale su larga scala.
Un genio del male?
A causa della sua esperienza, tra le altre cose, nella modellazione matematica delle esplosioni, venne coinvolto nel Progetto Manhattan per la costruzione della bomba atomica. Il suo principale contributo fu l’ideazione della cosiddetta “lente esplosiva”, un meccanismo di cariche che avrebbe permesso di comprimere il plutonio-239 ad una pressione tale da scatenarne la fissione. Infatti gli Stati Uniti non avevano abbastanza uranio-235, più semplice da innescare, che per costruire una sola bomba atomica da impiegare in guerra. L’alternativa era usare il plutonio, e per questo bisognava impiegare il meccanismo messo a punto da Von Neumann.
Egli era peraltro un convinto fautore della guerra e dell’impiego dell’arma atomica; provava un odio profondo verso i nazisti, i giapponesi e successivamente verso i sovietici. Fece parte, insieme ad altri quattro scienziati e diversi militari, del comitato incaricato di scegliere le città bersaglio degli ordigni nucleari sul suolo giapponese. E’ terribile pensare come egli applicò tranquillamente le sua abilità matematiche nel calcolo di come massimizzare il raggio e la violenza dell’esplosione per distruggere ed uccidere quanto più possibile. La sua prima scelta fu Kyoto, risparmiata in precedenza dai bombardamenti per la sua importanza storico-culturale, bersaglio che però fu scartato dal Segretario di Guerra in persona. La sorte sarebbe toccata ad Hiroshima e poi a Kokura, che però fu sostituita all’ultimo da Nagasaki a causa di più favorevoli condizioni meteo. Come detto questa seconda bomba (al plutonio, Fat Boy) fu realizzata proprio grazie al contributo fondamentale di Von Neumann.
Il suo fervore verso lo sviluppo del nucleare bellico non si fermò con la fine della guerra. Egli sosteneva fortemente la realizzazione di armi sempre più potenti da montare su missili balistici intercontinentali, per primeggiare sui sovietici (che anzi caldeggiava di distruggere con un attacco preventivo). Seguì personalmente lo sviluppo dell’arma totale, la bomba all’idrogeno detonata nelle Isole Marshall nel 1952, test a cui prese parte personalmente come già a quelli della bomba a fissione a Los Alamos.
Insomma, una mente brillante ed eccellente al servizio della guerra e della sopraffazione, un desiderio morboso di sperimentare a costo di distruggere… E perfino di auto-distruggersi. Una strada scivolosa che conduce nell’oscurità, dove attendono sulla soglia le lugubri figure degli illustri e terribili scienziati al servizio del Terzo Reich.
Forse saranno proprio le alte dosi di radiazioni a cui è stato esposto a condannarlo a morte. Nel 1955 gli fu diagnosticato un cancro osteo-pancreatico, che lo avrebbe ucciso in diciotto mesi. Non smise mai di lavorare alle sue ricerche, lasciando incompleto sul letto d’ospedale un manoscritto poi pubblicato con il titolo “Il computer ed il cervello”. Visse i suoi ultimi giorni in un ospedale militare a Washington (DC), piantonato a vista per evitare che gli scappasse di rivelare sotto sedazione qualche segreto militare. Dopo una vita da sostanziale agnostico, una paura matta della morte lo spinse alla conversione alla chiesa cattolica (in passato aveva avuto occasione di dire che considerava l’esistenza di Dio “probabile” in quanto molte cose sarebbero ben più facili da spiegare se ci fosse che se non ci fosse).
In conclusione…
Che tipo eccezionale questo Von Neumann. Quando si dice “scienziato testa d’uovo”… Beh, era lui, senza dubbio. Bambino prodigio prima, geniaccio senza freni poi, di un’abilità matematica impressionante, mente brillante tanto da far dire a qualcuno che era sicuramente di una specie aliena, mimetizzato come umano per vivere tra noi. Aveva un vivido interesse per la storia antica, quella bizantina in particolare, riteneva che Stati Uniti ed Europa fossero come Roma e Grecia, i greci acculturati ma inconcludenti, ed i romani pratici dominatori del mondo. Vestiva sempre in modo impeccabile, con grande eleganza anche nei contesti più improbabili (tipo nel deserto). A Princeton viveva in una grande casa dove organizzava frequentemente splendidi party; gran mangiatore e bevitore, come ebbe a dire sua moglie Klara, sapeva contare tutto tranne le calorie; pessimo guidatore, gli piaceva però guidare, anche magari sbirciando nel mentre qualche libro, cosa che fu causa di non pochi incidenti. Raccontava barzellette sconce, ed era risaputa la sua predilezione per le gambe delle giovani impiegate, tant’è che a Los Alamos dovettero imporre divise più castigate per evitare distrazioni. Lavorava benissimo in ambienti rumorosi e caotici, ad esempio preferiva il salotto con la televisione ad uno studio silenzioso e ai tempi dell’insegnamento attaccava spesso marce tedesche a tutto volume sul suo grammofono, cosa che faceva andare su tutte le furie i suoi colleghi (Einstein per primo).
“Due ciclisti che distano 20 miglia l’uno dall’altro si vanno incontro ad una velocità costante di 10 miglia all’ora. Una mosca che vola alla velocità di 15 miglia l’ora parte dalla ruota di uno dei due e vola verso la ruota dell’altro e quando la raggiunge torna indietro fino alla ruota della prima bici e poi di nuovo indietro verso la seconda e così via, finché le due ruote incontrandosi non la schiacciano. Che distanza percorre in totale la mosca?” Per risolvere questo indovinello c’è un modo complicato ed un modo molto semplice: quello complicato consiste nel calcolare la distanza percorsa dalla mosca nel primo viaggio, poi quella nel secondo, poi quella nel terzo e così via, il che corrisponde ad una serie infinita la cui somma tende ad un valore finito, cioè la distanza percorsa in totale. Il modo semplice consiste banalmente nell’osservare che se i due ciclisti vanno a 10 miglia l’ora e distano inizialmente 20 miglia, si incontreranno dopo un’ora. La mosca volerà quindi per un’ora intera, e visto che viaggia a 15 miglia all’ora, in tutto percorrerà… 15 miglia.
Quando questa domanda venne fatta a Von Neumann, egli rispose in un istante. “Ah, conoscevi già il trucco…” gli dissero. “Che trucco?” – rispose lui – “Non ho fatto altro che calcolare la somma della serie geometrica”. Ma secondo me li stava prendendo in giro.
NOTE
(1) L’algoritmo minimax è un metodo per prendere decisioni originariamente sviluppato per giochi a somma zero (in cui il guadagno o la perdita di un partecipante è bilanciato da una perdita o un guadagno di un altro partecipante) con due giocatori, sia nel caso di mosse alternative (turni) che di mosse simultanee. In pratica si tratta di sviluppare tutto l’albero delle mosse possibili a partire dalla situazione corrente, e per ognuna di esse le possibili contromosse dell’avversario, e poi ancora le nostre possibili contromosse, e così via, fino ad una certa profondità (ad esempio, due o tre turni, anche se Deep Blue, famoso computer giocatore di scacchi, ne gestiva 12). Dando un “peso” ad ogni situazione raggiunta (cioè potendo definire numericamente quanto essa sia favorevole o sfavorevole per noi o per l’avversario) è possibile scegliere in questo albero di possibilità il percorso a noi più favorevole, supponendo che l’avversario cerchi di fare lo stesso (cioè scegliere sempre la mossa a lui più favorevole). La complessità di questo algoritmo è pari al fattore di diramazione (numero medio di mosse possibili in un certo stato) elevato alla profondità di ricerca (NP-completo).
(2) L’Harvard Mark I fu uno dei primi computer digitali della storia. Progettato da Howard H. Aiken del dipartimento di fisica di Harvard fu realizzato in collaborazione con la IBM. La sua costruzione richiese quattro anni (1939-1943) e 250,000 dollari. Lungo 16 metri, alto 2,4 e profondo mezzo metro, pesava circa 4 tonnellate e mezzo. Un albero rotore interno di 15 metri, fatto girare da un motore elettrico di 4KW, serviva per sincronizzare meccanicamente le varie unità calcolatrici. Poteva memorizzare 72 numeri di 23 cifre decimali ciascuno, eseguire tre addizioni o sottrazioni al secondo, una moltiplicazione in 6 secondi, una divisione in 15,3 secondi ed un logaritmo oppure una funzione trigonometrica in più di un minuto.
Leggeva le sue istruzioni su delle schede perforate e, eseguita l’istruzione corrente, passava alla successiva. Il ciclo veniva compiuto unendo con lo scotch le due estremità del nastro contenente il programma.
Inizialmente fu di uso esclusivo della Marina degli Stati Uniti, ma nel 1944 fu poi donato all’Università di Harvard, dove rimase in funzione fino al 1959.
(3) ENIAC. Commissionato intorno al 1943 dall’esercito USA, che puntava a realizzare una macchina per calcolare velocemente le traiettorie di lancio dei proiettili di artiglieria, fu completato nel 1946 con una spesa otto volte più alta del previsto (quasi 500.000 dollari). Era un mostro che occupava 200 metri quadrati per un peso di 30 tonnellate, composto da 1,500 relè e 18,000 valvole termoioniche che divoravano elettricità (200 kW, la sua prima accensione causò un black out in città) e soprattutto scaldavano, portando la temperatura della sua stanza a 50 gradi. Ciò creava seri problemi di affidabilità perché il grande calore generato faceva bruciare le valvole con una frequenza di una ogni 2 minuti.
L’ENIAC, pur essendo digitale, utilizzava il sistema numerico decimale. La sua memoria poteva contenere solo 20 numeri di 10 cifre, era di tipo flip-flop, l’input era consentito da schede di carta perforate. Era in grado di riconoscere il segno di un numero, confrontare numeri, e di eseguire le operazioni di addizione, sottrazione, moltiplicazione, divisione e radice quadrata.