I nostri computer sono già architetture parallele. Probabilmente lo ignoriamo ma i processori attualmente in vendita hanno già un potente strumento parallelo: le istruzioni SIMD.
Secondo la tassonomia di Flynn, si tratta di istruzioni singole in grado di operare contemporaneamente su più dati. Di fatto sono istruzioni vettoriali presenti oramai in tutti i processori in commercio: i processori Intel (MMX, SSE2, SSE3, SSSE3, SSE4), gli AMD (3d Now), i Motorola Altivec.
Queste istruzioni sono lungamente usate nello streaming e nelle applicazioni multimediali, dove la loro applicazione è banale. Molto più difficile è pensare di utilizzarle nelle normali applicazioni di uso comune. Con queste istruzioni, ad esempio, è possibile eseguire 4 moltiplicazioni al costo di una (ovviamente sotto determinate condizioni).
I compilatori possono in qualche modo venirci incontro, utilizzando tecniche come il loop unrolling o il riordino delle istruzioni. Tuttavia queste tecniche sono piuttosto complesse da implementare (questo paper dell'ACM ne da una panoramica). Attualmente l'unico compilatore che le implementa seriamente è quello dell'Intel.
Inoltre solo il programmatore può essere in grado di gestire ottimizzazioni avanzate di alto livello, quali ad esempio l'allineamento della memoria (segnalo un interessante articolo al proposito).
Un ultimo esempio viene dalla computer grafica. L'utilizzo di tecniche SIMD nel ray tracing ha evidenziato un enorme aumento delle prestazioni. Queste ottimizzazioni si possono effettuare su quasi tutte le componenti di un ray tracer (intersezioni, traversal, shader), a dimostrazione di quanto il loro utilizzo possa essere applicato ovunque.
Certo, non vi aspettate di poterlo fare in Java!
Etichette: computer graphics, parallel programming, ray tracing
0 Comments:
Posta un commento
<< Home