Negli ultimi anni (dal 1984) un gruppo di fisici italiani, di cui faccio parte, ha impiegato il proprio tempo nella progettazione e nella costruzione di supercalcolatori (il progetto APE). Può sembrare strano che dei fisici, prevalentemente teorici, intraprendano una simile impresa (un mio amico ingegnere una volta mi disse: "Voi fisici siete strani: un ingegnere, se gli serve un calcolatore, non se lo costruisce, se lo compra."). Tuttavia non eravamo impazziti per un colpo di sole, ma c'erano dei motivi oggettivi che rendevano i tempi propizi per una tale impresa. Esistono moltissime applicazioni dei calcolatori veloci alla fisica che richiedono un'enorme capacità di calcolo numerico. In tutti questi problemi è estremamente difficile fare progressi ulteriori utilizzando tecniche analitiche e la simulazione diretta sembra essere l'unica soluzione possibile per ottenere risultati quantitativi, da poter poi confrontare con l'esperimento. Non è strano che i fisici teorici siano sempre più interessati ad avere a loro disposizione delle risorse di calcolo di potenza sempre più crescente che cerchino di costruire dei calcolatori più veloci di quelli commerciali, essendo disposti a pagare l'aumento in velocità con una un perdita in versatilità.
In un calcolatore commerciale buona parte dello spazio all'interno del calcolatore è occupato dalla memoria. Al contrario la parte dove vengono effettuati i calcoli veri e propri e che decide cosa e dove deve essere scritto o letto in memoria (la cosiddetta CPU - central processing unit) è estremamente piccola e spesso è concentrata su un singolo chip di qualche centimetro quadro di superficie. La CPU è il cervello del calcolatore: i dati provenienti dalle memorie vengono convogliati verso la CPU, che dopo aver eseguito le operazioni opportune, rimanda nuovi dati in altre locazioni di memoria . La velocità finale alla quale il calcolatore può eseguire i suoi compiti, dipende in maniera cruciale dalla velocità della CPU.
Mentre il prezzo di CPU sempre più complicate è crollato clamorosamente in questi ultimi anni rimane estremamente difficile fare CPU molto più veloci di quelle attuali: per esempio la CPU di un personal computer come il Macintosh puo' eseguire 20 milioni di istruzioni al secondo i grandi supercalcolatori eseguono non più di 300 milioni di istruzioni al secondo. La soluzione ideale sembra non quella di fare CPU più veloci, ma di usare un numero abbastanza elevato di CPU non tanto veloci, ma a basso costo. Se ci serve un singolo calcolatore estremamente veloce, sembrerebbe una buona idea mettere per esempio cento CPU dentro lo stesso calcolatore, visto specialmente che in media il costo della CPU è estremamente basso rispetto alle altre componenti del calcolatore. In questo modo sarebbe possibile avere dei calcolatori un poco più costosi dei calcolatori attuali con una velocità estremamente più elevata. La difficoltà seria nasce dal fatto che è possibile che varie CPU vogliano leggere cose diverse sulla stessa area di memoria: questa eventualità crea un contrasto di interessi che è difficile risolvere.
In molti problemi di calcolo numerico intensivo, a cui i fisici sono interessati, la struttura delle equazioni che debbono essere risolte permette essa stessa un elevato grado di parallelismo senza contrasti fra se singole CPU. Un caso molto intuitivo in cui questa strategia può essere applicata è lo studio delle previsioni del tempo su scala planetaria. Qui possiamo pensare di assegnare a ciascuna delle nostre ipotetiche 24 CPU il compito di calcolare le previsioni del tempo dentro un fuso orario; ovviamente le varie CPU devono scambiarsi informazioni in maniera di prevedere le stesse condizioni meteorologiche sulle linee di separazione fra i vari fusi orari, ma questo fatto non crea problemi in quanto tutte le CPU possono in maniera sincrona chiede informazioni alle corrispettiva CPU che si occupano delle previsioni del tempo nel fuso orario contiguo (ad Est o a Ovest). In questo caso la natura stessa del problema permette di suddividere il compito globale in tanti compiti identici, da essere eseguiti in parallelo, e lo scambio di informazioni fra le varie CPU può effettuato in maniera sincrona e prevedibile.
Quest'ultima soluzione è estremamente più semplice da realizzare, anche se ha un interesse meno generale. Tuttavia come abbiamo visto molti problemi fisici si possono facilmente risolvere su una macchina con CPU sincronizzate Dato che una simile macchina ha uno spettro di applicazioni relativamente ristretto dal punto di vista industriale, è scarso l'interesse delle grandi case costrittrici in questo tipo di architettura, che al contrario soddisfa pienamente le esigenze di molti fisici teorici. Questa situazione spiega come mai i calcolatori di questo tipo costituiscano una specie di nicchia ecologica, non occupabile da grosse imprese, in cui dei piccoli gruppi di ricerca, ben motivati, possono prosperare.
Chiarito il quadro di riferimento generale, possiamo incominciare a parlare concretamente di APE.
L'avvenimento principale che dopo due anni di discussioni ha spinto il nostro gruppo a partire è stata l'uscita sul mercato delle unità aritmetiche della Weitek: chips, di costo inferiore al milione, capaci di fare ciascuno 8 milioni di operazioni al secondo. La tentazione di prendere 128 di questi chips e di costruire un calcolatore capare di fare un miliardo di operazioni al secondo diventava irresistibile.
Ovviamente non basta comprare dei chips, metterli in bell'ordine sul tavole, dir loro ad alta voce "calcolate" e pretendere che questi calcolino. Bisogna costruire la CPU centrale, che controlla il flusso di istruzioni e di dati alle unità aritmetiche, N copie delle memorie e delle unità aritmetiche (N essendo il grado di parallelelismo della macchina) e una rete di comunicazione, sotto il controllo della CPU centrale, fra le unità aritmetiche e le memorie. Tutto questo deva essere collegato al mondo esterno (non basta che il calcolatore calcoli, è anche necessario sapere quali sono i risultati del calcolo) mediante apposite interfaccie. I problemi hardware, appena descritti, rappresentano forse solo la metà delle difficoltà: bisogna definire un linguaggio di programmazione adeguato all'architettura non convenzionale della macchina, scrivere sia un compilatore per questo linguaggio, sia i programmi di gestione delle comunicazioni fra il mondo estremo e il nostro calcolatore specializzato. Inoltre bisogna eliminare tutti gli errori di logica che si sono infilati nei programmi: infatti un compilatore può funzionare perfettamente su tutta una serie di programmi di test e sbagliare, per motivi apparentemente casuali, sul centesimo o sul millesimo programma che viene compilato.
Nella costruzione del primo calcolatore APE, abbiamo cercato di attenerci, per quanto possibile, a schemi di massima semplicità. A questo scopo abbiamo scelto un parallelelismo non eccessivamente elevato: 16 memorie e 16 unità aritmetiche, ciascuna delle quali occupa una scheda; in questo modo le memorie e la CPU centrale possono essere ospitate in un singolo crate (un crate è essenzialmente uno scatolotto di dimensione variabile, nel nostro caso circa un cubo di una quarantina di centimetri di lato, in cui vengono messe delle schede), mentre un secondo crate ospita le 16 unità aritmetiche. Una rete di comunicazione molto semplice mette in comunicazione le memorie con le unità aritmetiche: per esempio le memorie e le unità aritmetiche possono essere ordinate sequenzialmente, con condizioni periodiche al contorno, come su di una circonferenza. A secondo degli ordini che arrivano dal controllore centrale ogni unità aritmetica può comunicare con la memoria corrispondente o con la memoria contigua, a destra o a sinistra.
La singola unità aritmetica contiene 8 unità aritmetiche ed è capace di fare 64 milioni di operazioni reali al secondo, ed il totale di 16 unità arriva a fare un miliardo di operazioni al secondo. Il progetto è costato all'INFN (Istituto Nazionale di Fisica Nucleare) circa un miliardo, cifra relativamente piccola se si tiene conto che un supercalcolatore commerciale della stessa classe costava due decine di miliardi.
Al momento attuale lo stesso gruppo che ha costruito APE è impegnato nella costruzione di APE100, un calcolatore che dovrebbe essere cento volte più veloce di APE, ovvero capace di effettuare duecento miliardi di operazioni al secondo; il costo complessivo del progetto dovrebbe aggirarsi sugli 11 miliardi. Il fattore cento si ottiene come prodotto di un fattore 12, dovuto al miglioramento della tecnologia, e di un fattore 8, dovuto all'aumento delle dimensioni. La macchina sarebbe costituita da 2048 processori aritmetici, progettati interamente, ciascuno dei quali capace di effettuare 50 milioni di operazioni al secondo, distribuiti su un reticolo cubico di lato 16. Ciascuna scheda ospiterebbe 8 processori (un cubetto di lato due) e la memoria corrispondente; il calcolatore sarebbe quindi composto da 256 schede alloggiate in 16 crate. A metà del 1991 è stato costruito il primo crate della macchina e da questo momento la strada dovrebbe essere in discesa.
Da punto di vista scientifico, questa macchina, una volta costruita, dovrebbe essere in grado di dire un parola definitiva su molte proprietà delle interazioni forti ed essere utilizzata per lo studio di molti altri sistemi fisici. Sarebbe anche estremamente interessante far partire una piccola produzione di macchine dello stesso tipo, per esempio nelle versioni più piccole, da diffondere presso gli istituti di ricerca interessati; ma per questo sarebbe necessaria una collaborazione con industrie esterne, in quanto è necessaria una capacità organizzativa e commerciale che non si può trovare in un ente di ricerca. In fondo APE è il primo supercalcolatore di progettato interamente in Europa e la sua realizzazione può spingere le ditte europee ad investire in questa direzione ed a essere meno dipendenti dagli Stati Uniti in questo settore.