La vita oltre Moore.

A volte mi diletto di discutere di informatica “in generale” con persone che vengono da altri settori, come la fisica, e trovo una certa apertura mentale che fatico a trovare negli ingegneri. In una delle recenti chiacchierate siamo finiti a parlare della legge di Moore.

Come sapete, si tratta della legge empirica che vuole la potenza dei calcolatori raddoppiare ogni due anni. E come sapete, in questo momento siamo ad uno stato di stallo, dal momento che i limiti fisici (frequenza, densita' ed altro) sono molto vicini alle implementazioni attuali.

Il risultato di tutto questo e' che di fatto la potenza delle cpu e delle GPU stenta a crescere ancora ai ritmi che ci aspetteremmo. Il problema e' che effettivamente si tratta di questioni che per i fisici soffrono di problemi insanabili.

  • Materiali diversi dal silicio con cui fare circuiti piu' piccoli. Si parla di grafene, che e' infiammabile e si ossida facilmente. Sinora ci sono dei materiali in sperimentazione, ma nessuno ha ancora superato quella fase.

  • Computer quantistici. Ancora in alto mare. Il problema e' che se lo pensiamo in teoria un computer quantistico fa questo e quello, ma in pratica scopriamo che i qbit perdono misurabilita', cioe' sbagliano, con una frequenza preoccupante.

  • Intelligenza artificiale. L'idea di implementare su silicone la topologia delle reti neurali sinora paga, ma solo per le applicazioni delle reti neurali. Sebbene esse possano risolvere alcuni problemi in maniera velocissima, farne delle macchine all-purpose finora si e' rivelato impossibile.

E allora?

La mia personale (e pazzesca per certi versi) posizione e' che occorrerebbe fare qualche esperimento con le cosiddette logiche ternarie. Non sono il primo ad avere questa idea: calcolatori ternari sono stati gia' realizzati, e si sono rivelati piu' efficienti.

Un esempio di calcolatore ternario fu il SETUN, costruito in URSS usando un sistema a magneti. Anche se non era completamente ternario, si rivelo' molto piu' efficace di quelli binari per quanto riguardava la parte ternaria.

C'e' un motivo per questo. Il motivo e' che quando Von Neumann inizio' a fare un modello matematico della sua idea di computers (quella che usiamo oggi, piu' o meno) , al momento di calcolare quale fosse la base di numerazione piu' efficiente non ottenne “2”, cioe' il sistema binario. Ottenne “e”, cioe' un numero che e' trascendente, quindi anche irrazionale. Nessuna divisione tra naturali puo' ottenerlo e nessun algoritmo di tempo finito puo' calcolarlo tutto.

Ma se osservate bene il valore di e, 2,71828 18284 59045 23536… , notate una cosa.

E' piu' vicino a 3 che a 2.

Esistono diverse logiche ternarie. La piu' “testata” finora e' quella simmetrica, cioe' anziche' usare {0},{1} come stati logici, si usa {-1},{0},{1}. Fu scelta anche dai russi perche' il loro calcolatore funzionava ad elettromagneti, quindi era semplice invertire nord e sud per rappresentare {-1} e {1}, e usare {0} per indicare che la bobina era spenta, cioe' non aveva polarita' perche' non passava corrente.

I vantaggi di una logica ternaria sui sistemi di calcolo sono ENORMI.

Per prima cosa, e' semplice rappresentare numeri negativi. Chi ha studiato come funziona un calcolatore sa bene che per rappresentare un numero negativo usando un bit di segno il silicio del calcolatore spreca un sacco di tempo.

In una logica ternaria basta mettere {-1} dove prima c'era {1}. E la cosa buffa e' che in un sistema ternario, questo e' esattamente quello che fa l'operazione NOT. In pratica se 5 e' {1},{0},{1} in ternario, con un NOT bit a bit diventa {-1},{0}{-1} . Un solo ciclo per il NOT.

Avrete notato pero' che continuo ad usare delle caselle come quelle binarie per indicare il 5: ogni casella rappresenta ancora una potenza di due (altrimenti 5 non sarebbe 101), quello che cambia e' il possibile valore di ogni casella, che si arricchisce. Sto quindi supponendo un'algebra di Kleene.

Ma il problema sta nelle performance, e nella facilita' con cui una logica ternaria puo' essere usata per simulare un calcolatore quantistico. Il nostro “trit”, un bit a due valori, puo' essere letto anche come “quando e' zero, potrebbe essere sia {-1} che {1}”. Certo, non abbiamo un vero sistema quantistico, ma sarebbe interessante testare in che modo si possa simularne uno usando il classico silicio, di cui siamo esperti.

Ovviamente anche lo storage ci guadagna: in un sistema binario con 8 bit ci salvate 256 valori, se usiamo un'algebra di Kleene il numero sale a 512 se dovessimo usare (solo per lo storage) una circuitazione che ci consente di usare tutti e 3 i valori come base di numerazione otterremmo 6561 valori. Non male come aumento di densita'.

Non sono io l'unico a dirlo, sia chiaro: Donald Knuth e Howard Aiken furono quelli che ne iniziarono gli studi.

Ci sono svantaggi? Beh, si. Gli svantaggi sono che ad un certo punto occorre una circuitazione che prenda i numeri ternari e li riporti a binari, in modo da poterli usare sui dispositivi che lavorano su due stati. Occorre quindi che ci siano dei convertitori: nei primi esperimenti si usavano delle tabelle di conversione che non erano pero' grandissime. Sarebbe interessante studiare se la loro implementazione vanifichi o meno i vantaggi computazionali.

Di certo ora che gli storage stanno andando verso lo stato solido, diventando storage in silicio (nvram, SSD, etc), i vantaggi sullo storage(a parita' di densita' e frequenza) sono evidenti.

Di conseguenza, se siete una startup di ggiuovani e volete in qualche modo rivoluzionare le cose con un'idea disruptive, quello che dovreste fare e' iniziare a disegnare una circuitazione in logica ternaria , e costruirci una minima macchina di turing, almeno su FPGA.

Io sono troppo vecchio classico per fare una startup, quindi lo scettro passa a voi. Magari se ci riuscite fatemi avere una birra.