211service.com
Universo parallelo
Quando Anwar Ghuloum è arrivato a lavorare in Intel nel 2002, l'azienda era suprema tra i produttori di chip, principalmente perché forniva processori che funzionavano a velocità sempre più elevate. Eravamo già a tre gigahertz con il Pentium 4 e la road map prevedeva velocità di clock future di 10 gigahertz e oltre, ricorda Ghuloum, che ha un dottorato di ricerca alla Carnegie Mellon ed è ora uno dei principali ingegneri dell'azienda. Nello stesso anno, alla conferenza degli sviluppatori di Intel, il chief technology officer Pat Gelsinger ha dichiarato: Entro il 2010 siamo sulla buona strada per dispositivi da 30 gigahertz, 10 nanometri o meno, che forniscano un'istruzione di prestazioni tera. Sono un trilione di istruzioni per computer al secondo.
Ma Gelsinger si sbagliava. Intel e i suoi concorrenti stanno ancora realizzando processori che raggiungono il massimo a meno di quattro gigahertz, e qualcosa intorno ai cinque gigahertz è stato visto, almeno per ora, come la massima velocità possibile per la tecnologia al silicio.
Questa storia faceva parte del nostro numero di gennaio 2009
- Vedi il resto del problema
- sottoscrivi
Non è che la legge di Moore, l'idea che il numero di transistor su un chip raddoppi ogni due anni, sia stata abrogata. Piuttosto, problemi imprevisti con la generazione di calore e il consumo di energia hanno posto un limite pratico alle velocità di clock dei processori o alla velocità con cui possono eseguire le istruzioni. Le nuove tecnologie, come la spintronica (che utilizza la direzione di spin di un singolo elettrone per codificare i dati) e i transistor quantistici (o tunneling), potrebbero in definitiva consentire ai computer di funzionare molto più velocemente di quanto non facciano ora, utilizzando molta meno energia. Ma queste tecnologie sono lontane almeno un decennio dal raggiungere il mercato e richiederebbero la sostituzione di linee di produzione di semiconduttori che sono costate molte decine di miliardi di dollari per essere costruite.
Quindi, per sfruttare al meglio le tecnologie a disposizione, i produttori di chip stanno adottando un approccio diverso. I transistor aggiuntivi previsti dalla legge di Moore vengono utilizzati non per velocizzare i singoli processori, ma per aumentare il numero di processori all'interno di un chip. I chip con due processori, o core, sono ora lo standard desktop e i chip a quattro core sono sempre più comuni. A lungo termine, Intel prevede centinaia di core per dispositivo.
Ma ecco il punto: mentre il problema hardware del surriscaldamento dei chip si presta bene alla soluzione hardware del calcolo multicore, quella soluzione dà origine a sua volta a un complicato problema software. Come si programma per più processori? È compito di Anwar Ghuloum capirlo, con l'aiuto dei gruppi di programmazione che gestisce negli Stati Uniti e in Cina.
Le aziende di microprocessori corrono un enorme rischio nell'adottare la strategia multicore. Se non riescono a trovare modi semplici per scrivere software per i nuovi chip, potrebbero perdere il supporto degli sviluppatori di software. Questo è il motivo per cui la macchina da gioco multicore PlayStation 3 di Sony era in ritardo sul mercato e ha ancora meno titoli di gioco rispetto ai suoi concorrenti.
Il problema con il silicio
Per i primi 30 anni di sviluppo del microprocessore, il modo per aumentare le prestazioni era realizzare chip con caratteristiche sempre più piccole e che funzionassero a velocità di clock sempre più elevate. Il computer Apple II originale del 1977 utilizzava un processore a otto bit che funzionava a un megahertz. Lo standard per PC odierno è un chip a 64 bit che funziona a 3,6 gigahertz, 28.800 volte più veloce. Ma è qui che questa traiettoria sembra finire. Intorno al 2002, le caratteristiche più piccole che potevano essere incise su un chip utilizzando la fotolitografia si erano ridotte a 90 nanometri, una scala alla quale effetti imprevisti causavano la fuoriuscita di gran parte dell'elettricità pompata in ciascun chip, producendo calore ma senza alcun lavoro. . Nel frattempo, i transistor erano stipati così strettamente sui chip che il calore che generavano non poteva essere assorbito e portato via. I produttori di chip si sono resi conto che quando la velocità dell'orologio raggiungeva i cinque gigahertz, i chip sarebbero diventati così caldi che senza sistemi di raffreddamento elaborati, il silicio da cui erano fatti si sarebbe sciolto. L'industria aveva bisogno di un modo diverso per migliorare le prestazioni.
A causa dei progetti complessi che ora richiedono i chip single-core ad alta velocità, più core possono fornire la stessa quantità di potenza di elaborazione consumando meno elettricità. Meno elettricità genera meno calore. Inoltre, l'uso di più core diffonde qualsiasi calore ci sia.
La maggior parte dei programmi per computer, tuttavia, non è stata progettata pensando a più core. Le loro istruzioni vengono eseguite in una sequenza lineare, senza che nulla accada in parallelo. Se il tuo computer sembra fare più di una cosa alla volta, è perché il processore passa da un'attività all'altra più rapidamente di quanto tu possa comprendere. Il modo più semplice per utilizzare più core è stato quindi attraverso una divisione del lavoro, ad esempio, l'esecuzione del sistema operativo su un core e un'applicazione su un altro. Ciò non richiede un modello di programmazione completamente nuovo e potrebbe funzionare per i chip di oggi, che hanno due o quattro core. Ma per quanto riguarda quelli di domani, che potrebbero avere 64 core o più?
Rivisitare il Vecchio Lavoro
Fortunatamente, afferma Leslie Valiant, professore di informatica e matematica applicata all'Università di Harvard, i fondamenti del parallelismo sono stati elaborati decenni fa nel campo del calcolo ad alte prestazioni, vale a dire con i supercomputer. La sfida ora, dice Valiant, è trovare un modo per rendere utile quel vecchio lavoro.
I supercomputer che hanno ispirato l'elaborazione multicore erano dispositivi di seconda generazione degli anni '80, realizzati da aziende come Thinking Machines e Kendall Square Research. Quei computer usavano centinaia o addirittura migliaia di processori standard, che li eseguivano in parallelo. Alcuni sono stati commissionati dalla US Defense Advanced Research Projects Agency come alternativa più economica ai supercomputer Cray. Le lezioni apprese nella programmazione di questi computer sono una guida per far funzionare la programmazione multicore oggi. Quindi Grand Theft Auto potrebbe presto trarre vantaggio dalla ricerca sul software fatta due decenni fa per aiutare la progettazione di bombe all'idrogeno.
Negli anni '80, divenne chiaro che il problema chiave del calcolo parallelo è questo: è difficile separare il software, in modo che possa essere elaborato in parallelo da centinaia di processori, e poi rimontarlo nella sequenza corretta senza consentire il risultato previsto per essere danneggiato o perso. Gli scienziati informatici hanno scoperto che mentre alcuni problemi potevano essere facilmente parallelizzati, altri no. Anche quando i problemi potrebbero essere parallelizzati, i risultati potrebbero ancora essere restituiti fuori ordine, in quella che è stata definita una condizione di gara. Immagina due operazioni in esecuzione in parallelo, una delle quali deve finire prima dell'altra affinché il risultato complessivo sia corretto. Come ti assicuri che vinca quella giusta? Ora immagina duemila o due milioni di tali processi.
Quello che abbiamo imparato da questo lavoro precedente nel calcolo ad alte prestazioni è che ci sono problemi che si prestano al parallelismo, ma che le applicazioni parallele non sono facili da scrivere, afferma Marc Snir, condirettore dell'Universal Parallel Computing Research Center (UPCRC) presso il Università dell'Illinois a Urbana-Champaign. Normalmente, i programmatori utilizzano linguaggi e strumenti di programmazione specializzati per scrivere istruzioni per il computer in termini più facili da comprendere per gli esseri umani rispetto agli 1 e agli 0 del codice binario. Ma quei linguaggi erano progettati per rappresentare sequenze lineari di operazioni; è difficile organizzare migliaia di processi paralleli attraverso una serie lineare di comandi. Per creare programmi paralleli da zero, sono necessari linguaggi che consentano ai programmatori di scrivere codice senza pensare a come renderlo parallelo, per programmare come al solito mentre il software capisce come distribuire efficacemente le istruzioni tra i processori. Non ci sono ancora buoni strumenti per nascondere il parallelismo o per renderlo ovvio [come ottenerlo], dice Snir.

Luci brillanti: Nel 1987, Thinking Machines ha rilasciato il suo supercomputer CM-2 (sopra), in cui 64.000 processori funzionavano in parallelo. La società dichiarò bancarotta nel 1994, ma il suo impatto sull'informatica fu significativo.
Per aiutare a risolvere tali problemi, le aziende hanno richiamato per fornire assistenza ad alcuni barbuti del supercalcolo degli anni '80. David Kuck, ad esempio, è un professore emerito dell'Università dell'Illinois noto come sviluppatore di strumenti per la programmazione parallela. Ora lavora alla programmazione multicore per Intel. Così fa un intero team assunto dall'ex Digital Equipment Corporation; in una precedente vita professionale, ha sviluppato l'implementazione di Digital dell'interfaccia di passaggio dei messaggi (MPI), lo standard software dominante per il supercalcolo multimacchina oggi.
In un certo senso, per questi vecchi giocatori è più facile rispetto all'ultima volta. Questo perché molte delle applicazioni multicore odierne sono molto diverse da quelle immaginate dal leggendario progettista di mainframe Gene Amdahl, che ha teorizzato che il guadagno di velocità ottenibile utilizzando più processori fosse limitato dal grado di parallelizzazione di un determinato programma.
I computer gestiscono volumi di dati più grandi che mai, ma i loro compiti di elaborazione sono così idealmente adatti alla parallelizzazione che i vincoli della legge di Amdahl, descritta nel 1967, stanno cominciando a sembrare nessun vincolo. L'esempio più semplice di un'attività massicciamente parallela è la determinazione a forza bruta di una password sconosciuta provando tutte le possibili combinazioni di caratteri. Dividere le potenziali soluzioni tra 1.000 processori non può fare a meno di essere 1.000 volte più veloce. Lo stesso vale per le odierne applicazioni ad alta intensità di processore per la codifica di dati video e audio. La compressione dei fotogrammi dei filmati in parallelo è quasi perfettamente efficiente. Ma se l'elaborazione parallela è più facile da trovare per gli usi di oggi, non è necessariamente molto più facile da fare. Renderlo più semplice richiederà uno sforzo concertato da parte di produttori di chip, sviluppatori di software e scienziati informatici accademici. In effetti, l'UPCRC dell'Illinois è finanziato da Microsoft e Intel, le due società che hanno più da guadagnare se il calcolo multicore ha successo e più da perdere se fallisce.
Inventare nuovi strumenti
Se il software continua a diventare più complesso, non è solo perché vengono aggiunte più funzionalità; è anche perché il codice è costruito su sempre più livelli di astrazione che nascondono la complessità di ciò che i programmatori stanno realmente facendo. Questo non è semplice: i programmatori hanno bisogno di astrazioni per fare in modo che il codice binario di base svolga il lavoro sempre più avanzato che vogliamo che svolga. Quando si tratta di scrivere per processori paralleli, tuttavia, i programmatori utilizzano strumenti così rudimentali che James Larus, direttore dell'architettura software per il progetto Data Center Futures presso Microsoft Research, li paragona al linguaggio di livello più basso e più difficile che un programmatore può usare .
Non potremmo immaginare di scrivere il software di oggi in linguaggio assembly, dice. Ma per qualche ragione pensiamo di poter scrivere software parallelo di pari sofisticatezza con i pezzi nuovi e critici scritti in quello che equivale a un linguaggio assembly parallelo. Non possiamo.
Ecco perché Microsoft sta rilasciando strumenti di programmazione parallela il più velocemente possibile. F#, ad esempio, è la versione parallela di Microsoft del linguaggio di programmazione ML generico. Non solo parallelizza determinate funzioni, ma impedisce loro di interagire in modo improprio, quindi il software parallelo diventa più facile da scrivere.
Intel, nel frattempo, invia Ghuloum all'estero una settimana al mese per parlare con gli sviluppatori di software sull'architettura multicore e sui modelli di programmazione parallela. Abbiamo adottato la filosofia che il 'problema' della programmazione parallela non sarà risolto nel prossimo anno o due e richiederà molti miglioramenti incrementali - e un piccolo numero di salti - ai linguaggi esistenti, afferma Ghuloum. Tendo anche a pensare che non possiamo farlo nel vuoto; cioè, senza un significativo feedback del programmatore, finiremo senza dubbio con la cosa sbagliata in qualche modo.
Sia nel mercato commerciale che in quello open source, altri nuovi linguaggi e strumenti sfruttano la potenza dell'elaborazione multicore o ne mascherano la complessità. Tra questi ci sono il framework MapReduce di Google, che semplifica l'esecuzione di calcoli paralleli su cluster di computer, e Hadoop, un'implementazione open source di MapReduce in grado di distribuire applicazioni su migliaia di nodi. Nuovi linguaggi di programmazione come Clojure ed Erlang sono stati progettati da zero per il calcolo parallelo. La popolare applicazione di chat di Facebook è stata scritta in parte in Erlang.
Nel frattempo, lo spinoff del MIT Cilk Arts può suddividere i programmi scritti nel linguaggio consolidato C++ in thread che possono essere eseguiti in parallelo su più core. E Appistry, con sede a St. Louis, afferma che il suo Enterprise Application Fabric distribuisce automaticamente le applicazioni per il framework di programmazione .Net di Microsoft su migliaia di server senza richiedere ai programmatori di modificare una singola riga del loro codice originale.
I limiti dell'informatica multicore
Proprio come il sogno di Intel di chip da 10 e 30 gigahertz ha lasciato il posto alla ricerca dell'elaborazione multicore, tuttavia, il multicore stesso potrebbe essere in circolazione per una questione di anni anziché di decenni. L'efficienza dei sistemi paralleli diminuisce con ogni processore aggiunto, poiché i core competono per gli stessi dati; arriverà un punto in cui l'aggiunta di un core aggiuntivo a un chip lo rallenterà effettivamente. Ciò potrebbe porre un limite pratico alla strategia multicore molto prima di iniziare ad acquistare PC a cento core.
Ha importanza, però? Sebbene possano esserci applicazioni che richiedono la potenza di molti core, la maggior parte delle persone non utilizza tali applicazioni. A parte i giocatori hard-core, poche persone si lamentano che i loro PC sono troppo lenti. In effetti, Microsoft ha sottolineato che Windows 7, il successore del problematico Windows Vista, utilizzerà meno potenza di elaborazione e memoria rispetto a Vista, una mossa resa necessaria dalla popolarità delle piattaforme di mobile computing a basso consumo e dalla prevista migrazione delle applicazioni per PC a Server basati su Internet. Un cinico potrebbe dire che la ricerca di una potenza di elaborazione sempre maggiore è strettamente commerciale: che le aziende di semiconduttori e computer, i fornitori di software e i produttori di telefoni cellulari hanno bisogno di noi per acquistare nuovi aggeggi.
Quindi qual è lo svantaggio se il calcolo multicore fallisce? Qual è il probabile impatto sulla nostra cultura se prendiamo uno zig zag tecnico che avrebbe dovuto essere uno zag e improvvisamente non siamo in grado di utilizzare tutti i 64 core del processore nei nostri futuri computer notebook?
non vedo l'ora! dice Steve Wozniak, l'inventore dell'Apple II. L'abrogazione della legge di Moore creerebbe una rinascita per lo sviluppo del software, afferma. Solo allora saremo finalmente in grado di creare un software che funzionerà su una piattaforma stabile e duratura.
Nelle scuole, dice Woz, la durata di una scrivania è di 25 anni, un libro di testo è di 10 anni e un computer è di tre anni, al massimo. Quale di questi dispositivi costa di più per l'acquisto e l'utilizzo? Perché, il PC, ovviamente. Quale ha un valore residuo al termine della sua vita utile? Non il PC: lo smaltimento costa denaro. Almeno i libri possono essere bruciati per il calore. Fino a quando la tecnologia non rallenterà abbastanza da consentire alle piattaforme di elaborazione di durare abbastanza a lungo da essere economicamente sostenibili, non saranno veramente intrinseche all'istruzione. Quindi la fine della Legge di Moore, anche se può sembrare brutta, sarebbe in realtà molto buona.
Robert X. Cringely scrive di tecnologia da 30 anni. È l'autore di Imperi accidentali: come i ragazzi della Silicon Valley guadagnano milioni, combattono la concorrenza straniera e non riescono ancora a trovare un appuntamento .
