211service.com
Programmazione più semplice per computer multicore
Il numero di core, o unità di elaborazione numerica, nei microprocessori raddoppia ad ogni generazione, fornendo un enorme potenziale di elaborazione per desktop, laptop e, infine, gadget portatili. Le attuali macchine quadcore, ad esempio, sono particolarmente utili per tali applicazioni affamate di calcolo come l'elaborazione video e i giochi. Tuttavia, le nuove macchine multicore sono fondamentalmente supercomputer su piccola scala e, per sfruttare appieno la potenza di calcolo che offrono, il software deve essere scritto con più core in mente, un compito lungo e difficile noto come programmazione parallela. E molti esperti ritengono che, a meno che la programmazione parallela non possa essere resa più semplice, i progressi informatici subiranno un brusco arresto.

Software semplificato: StreamIt è un linguaggio software e un compilatore che consente ai programmatori di programmare facilmente macchine multicore, un'attività chiamata programmazione parallela che altrimenti richiederebbe molto tempo e sarebbe difficile.
I ricercatori del MIT stanno cercando un modo per alleviare il dolore della programmazione parallela. Hanno progettato un linguaggio per computer e un compilatore, uno strumento specializzato che converte il linguaggio in istruzioni per computer, che essenzialmente nasconde le sfide della programmazione parallela, ma sfrutta la potenza di più core. Il linguaggio e il compilatore, chiamato StreamIt , sono stati sviluppati da Saman Amarasinghe , professore di ingegneria elettrica e informatica al MIT. StreamIt attualmente funziona su una macchina multicore specializzata costruita al MIT, ma entro questa estate, Amarasinghe prevede di avere il software pronto per funzionare su chip commerciali realizzati da IBM, Sony e Toshiba trovati nelle macchine PlayStation 3 di Sony.
Creare software è ancora qualcosa che molte persone possono fare, ma se hanno a che fare con il parallelismo, diventa molto più difficile, afferma Amarasinghe.
Nelle macchine single-core, il codice software viene eseguito, per la maggior parte, in sequenza. Ciò significa che le attività, come l'accesso a determinati blocchi di memoria per aprire un programma, si verificano una dopo l'altra, in modo prevedibile. In un sistema multicore, le attività vengono divise tra i core. E quando attività diverse devono accedere allo stesso blocco di memoria, le attività devono collaborare per orchestrare o sincronizzare accuratamente gli accessi. Se più attività accedono inavvertitamente agli stessi dati senza una corretta sincronizzazione, i dati verranno danneggiati, producendo risultati errati o bloccando il programma.
Nelle macchine single-core, è abbastanza facile eseguire il debug di errori di programmazione o problemi non intenzionali perché la causa può essere ricondotta a una particolare istruzione. Ma Amarasinghe dice che alcuni bug nei sistemi paralleli sono più difficili da risolvere perché sono probabilistici, nel senso che si verificano solo occasionalmente; ogni volta che il programma viene eseguito, i core multipli eseguono i loro compiti in modo indipendente, portando a miliardi di possibili ordini di esecuzione per il programma.
La soluzione di Amarasinghe si basa su un noto concetto chiamato flusso di dati, in cui i dati vengono trasmessi in modo sequenziale attraverso una sorta di pipeline di funzioni. Mentre i dati fluiscono, il compilatore vede quali funzioni sono indipendenti. Pertanto, il compilatore può posizionare compiti separati su core diversi, senza preoccuparsi che interferiscano l'uno con l'altro o tocchino lo stesso pezzo di memoria.
Un programmatore deve solo scrivere un software che operi in modo sequenziale. Il compilatore vede tutte le interazioni che devono verificarsi, in base al codice scritto dal programmatore, e alloca le istruzioni in modo appropriato per evitare l'insorgere di bug.
È un'idea valida basata su concetti ben noti, afferma Gara di Bodik , professore di informatica all'Università della California, Berkeley. Se vuoi che i programmatori che non sono esperti di parallelismo siano produttivi, se vuoi che scrivano programmi in modo efficace, vuoi dare loro un linguaggio come StreamIt, dice. Tuttavia, Bodik sospetta che gli ingegneri del software dovranno fare affidamento su una gerarchia di strumenti che operano a diversi livelli. Ad esempio, la memoria transazionale, che consente a numerose attività di condividere la stessa memoria contemporaneamente, potrebbe operare dietro le quinte, aiutando a massimizzare il potenziale di StreamIt. (Vedi Problemi con i computer multi-core .)