Il problema con i computer multi-core

I computer di fascia alta di oggi hanno processori dual-core: due unità di elaborazione in grado di gestire attività separate contemporaneamente. E entro il prossimo anno, i principali produttori di chip Intel e AMD avranno lanciato sistemi quad-core. Sebbene più processori siano teoricamente più veloci di un singolo core, scrivere software che sfrutta molti processori, un'attività chiamata programmazione parallela, è estremamente difficile.





Una recente ricerca del MIT, tuttavia, potrebbe rendere più semplice la programmazione parallela, aiutando in definitiva a mantenere le prestazioni del personal computer in pista. I ricercatori stanno proponendo un nuovo framework di elaborazione che combina istruzioni software specializzate e modifiche all'hardware multi-core che potrebbe consentire ai programmatori di scrivere software senza dover affrontare alcuni noiosi dettagli di programmazione parallela.

Storicamente, scrivere software per sistemi multi-core è stato compito di esperti nel mondo dei supercalcoli. Ma con l'avvento dei personal supercomputer, anche i programmatori medi devono essere in grado di scrivere software con più core in mente.

È una cosa spaventosa, dice Krste Asanovic , professore di ingegneria elettrica e informatica al MIT, perché la maggior parte non l'ha mai fatto, ed è piuttosto difficile da fare. Asanovic e i suoi colleghi stanno affrontando una delle principali sfide che i programmatori devono affrontare quando cercano di scrivere software che funzioni in modo efficiente su sistemi multi-core: coordinare più attività che vengono eseguite su core separati in modo da non causare il crash del sistema .



Quando un'applicazione come Microsoft Outlook o un lettore video viene parallelizzata, alcune attività vengono suddivise tra i processori. Ma spesso, queste attività separate devono attingere a una cache di memoria condivisa per accedere ai dati. Quando una transazione accede alla memoria e un'altra transazione deve accedere alla stessa parte della memoria e non vengono messe in atto misure di sicurezza adeguate, un sistema può bloccarsi. Questo può essere paragonato a una coppia con un conto corrente condiviso con fondi limitati che scrivono assegni contemporaneamente e inavvertitamente scoprono dal conto.

La programmazione parallela standard richiede che un programmatore anticipi queste attività simultanee e si assicuri che una volta che una determinata attività inizia ad accedere alla memoria, blocchi altre attività in modo che attendano fino al completamento della transazione.

Se implementati correttamente, i blocchi accelerano i sistemi paralleli, ma metterli in pratica è complicato, afferma Jim Larus, responsabile dell'area di ricerca di Microsoft. Ad esempio, spiega, due diverse applicazioni potrebbero acquisire blocchi contemporaneamente, il che li costringe ad aspettarsi l'un l'altro. Senza l'intervento di una terza parte per sbloccare lo stallo, afferma Larus, le applicazioni rimarrebbero bloccate.




I ricercatori del MIT aggirano questo problema utilizzando un approccio chiamato memoria transazionale, un'area di ricerca che è esplosa negli ultimi cinque anni, afferma Asanovic. La memoria transazionale coordina le operazioni del software in modo che i programmatori non debbano scriverla nei loro programmi. In realtà consente a numerose transazioni di condividere la stessa memoria contemporaneamente. Quando una transazione è completata, il sistema verifica che altre transazioni non abbiano apportato modifiche alla memoria che potrebbero ostacolare l'esito della prima transazione. In caso affermativo, la transazione viene rieseguita finché non ha esito positivo.

Sebbene la memoria transazionale funzioni in alcuni casi, non è ancora perfetta, spiega Asanovic. La maggior parte delle volte le transazioni sono piccole e la dimensione fissa della memoria nell'hardware può farcela rapidamente. Ma, dice, di tanto in tanto le transazioni richiedono più memoria rispetto alla quantità fissa disponibile, e quando ciò accade, il sistema si blocca. Asanovic afferma che aggiungendo una piccola cache di memoria di backup all'hardware e aggiungendo un software per riconoscere quando le transazioni stanno traboccando, la capacità della memoria transazionale può essere aumentata, alleviando i precedenti errori di sistema.

Il metodo utilizzato dai ricercatori del MIT si basa su una combinazione di software e hardware per migliorare la memoria transazionale, afferma Larus di Microsoft, e ci sono stati numerosi progetti che si basano su software o hardware a vari livelli. Non è ancora chiaro quale sia la linea giusta tra l'utilizzo di hardware e software per risolvere il problema, afferma, ma i ricercatori stanno affrontando importanti problemi irrisolti nella programmazione di sistemi multi-core.

Microsoft, AMD, Intel e università come MIT e Stanford, tra le altre, sono tutte investite nel rendere i sistemi multi-core più facili da programmare. Oltre a migliorare la memoria transazionale, i ricercatori stanno esplorando modi migliori per eseguire il debug di programmi paralleli e anche creare librerie di operazioni parallele già pronte, in modo che i programmatori possano inserire blocchi di codice nel software senza dover risolvere ogni volta i nodi.



Attualmente, i sistemi dual-core non sono così colpiti dalla mancanza di programmi veramente paralleli come saranno i prossimi sistemi quad-core, afferma Asanovic. Per la maggior parte, i sistemi operativi come Windows e Mac OS X sono in grado di suddividere efficacemente le applicazioni su un sistema dual-core. Ad esempio, uno scanner antivirus viene eseguito in modo discreto in background su un core, mentre applicazioni come Microsoft Word o Firefox vengono eseguite sull'altro core, senza che la loro velocità sia ostacolata.

Ma quando si tratta di 4, 8 o 16 core, le applicazioni stesse devono essere modificate per ottenere maggiori prestazioni. Asanovic afferma che la memoria transazionale non sarà un proiettile d'argento che renderà più semplice la programmazione di questi sistemi, ma si aspetta che sia un componente del futuro modello di calcolo parallelo. È un meccanismo che sembra essere utile, dice.

nascondere