Pensieri e parole su HCI, home computing, tecnologie desktop e sul Progetto Lobotomy

sabato 15 marzo 2008

... e vissero tutti paralleli e contenti

Sebbene negli ultimi due giorni avrei dovuto scrivere un po' di roba (documentazione, articoli e quant'altro...), ho "perso" un po' di tempo a leggere un paio di interessantissimi documenti che segnalo qui su questo blog.

Il primo e' una serie di slides in merito a OpenMP, framework dedicato alla computazione parallela e da non molto tempo incluso anche in GCC.
La cosa fenomenale di questa tecnologia e' che e' sufficiente aggiungere nel proprio codice C poche direttive di preprocessore laddove si voglia suddividere la computazione su piu' blocchi da eseguire contemporaneamente (sfruttando magari un processore multicore...), e lasciare al compilatore il compito di occuparsi di immettere le istruzioni necessarie a caricare i threads, chiuderli, pescarli da un pool permanente, proteggere le variabili condivise per evitare race conditions, schedulare e molto altro. Il set di direttive e' limitato, e dunque facilmente maneggevole (soprattutto per me che ho scarsa memoria ;-) ), eppure appaiono strumenti per ogni sfumatura e per tutte le necessita'.
Mi spiace non avere sottomano un processore multicore su cui sperimentare pienamente i vantaggi della parallelizzazione, ma mi ripropongo comunque di metter mano a questa potente tecnologia, e chissa' che non finisca con l'usarla pesantemente in Lobotomy... Sarebbe interessante scrivere addirittura una libreria standalone di "utility" che implementi algoritmi e strutture dati disegnate a priori per la parallelizzazione...

Il secondo documento, piu' di carattere teorico ma comunque ricco di spunti di riflessione ed ispirazione, e' in merito ad un kernel scritto con finalita' di sperimentazione e ricerca da quello che era uno studente universitario qualche decennio fa': Synthesis.
In esso sono descritti una quantita' di concetti di fine computazione ed ottimizzazione estrema del codice, soprattutto riguardanti l'implementazione del kernel ma usabili in parte anche a piu' alto livello logico. Anche qui, ampio spazio e' riservato a divagazioni sulla parallelizzazione delle operazioni, col fine di ridurre la latenza e massimizzare la computazione pura, e sulla loro sincronizzazione.
E' un peccato che il tutto sia stato scritto in assembler, e su una architettura hardware oggi visibile al piu' in qualche museo...

Buona lettura :-)

Nessun commento: