Luigi D'Amora

Em@il: luigi.damora1[at]gmail[dot]com

Thesis

Java 8 GPU Computing e Mason

Introduction

Si sta facendo sempre più strada nel calcolo di grosse dimensioni il GPU Computing. Le GPU sono componenti presenti in tutti i computer e molto spesso sottovalutate, nascondono infatti un grande potenziale; comprendono infatti al loro interno una grande quantità di piccoli processori (da usare per computazioni parallele) ad un costo decisamente contenuto rispetto alla creazione e gestione di un cluster. Andremo ad affrontare l'approccio sviluppato in un progetto opensource che interagisce con Java, Aparapi. Aparapi è un'API Java che trasforma il bytecode opportunamente scritto in codice OpenCL che può essere eseguito su GPU. Bisogna ovviamente tener conto del fatto che nell'utilizzo della GPU per il calcolo si va incontro ad un overhead, cioè trasportare dati dalla memoria centrale alla memoria della GPU richiede un tempo relativamente lungo, per cui bisogna ammortizzare questo costo facendo calcoli di grosse dimensioni, altrimenti non è conveniente fare calcoli sulla GPU. Mostreremo in seguito come si potrebbero sfruttare queste tecnologie per velocizzare l'operazione di ricerca del vicinato in Mason.

Seminars

[25/11/2013 16:00] Java 8 & GPU Computing

E' stata fatta una panoramica sulle potenzialità delle GPU moderne e sul perché esista il GPU Computing. Sono state presentate le novità presenti in Java 8 (rispetto alle versioni precedenti), facendo particolare attenzione alle lambda expression e alla possibilità di utilizzo con Aparapi (possibilità non ancora attuabile). Si è introdotta la Api Java, Aparapi, che trasforma uan parte del bytecode Java opportunamente scritto in codice OpenCL che sarà eseguito poi su GPU. Sono state mostrate le limitazioni di Aparapi e delle demo di esempio.
seminario_1.pptx (6.8 MB)

Note prima fase

Ho avuto diverse difficoltà per trovare una versione di netbeans/eclipse che supportasse le lambda expression, si parlava di eclipse tra i possibili candidati, ma in realtà erano voci di corridoio... quindi ho abbandonato il fidato eclipse, compagno di mille avventure, per netbeans. L'obbiettivo era quello di utilizzare le lambda expression in modo da semplificare l'utilizzo di Aparapi... ho scoperto in seguito dopo vari tentativi fallimentari che questa funzionalità non è ancora prevista, in quanto ci sarebbe bisogno di HSA(Heterogeneous Architecture System)che dovrebbe permettere la comunicazione tra i vari componenti. Ovviamente tale HSA non è ancora disponibile... fortuna che ho scoperto queste notizie nel forum di Aparapi che è ottimo, va a sopperire la documentazione generale un po' scarsa. Attualmente l'HSA sta per essere implementato nelle nuove CPU di AMD della famiglia Kaveri, tramite HSA CPU e GPU potrebbero agire direttamente sulla memoria centrale senza le onerose copie di dati (da CPU a GPU e viceversa).

[31/01/2013 15:30] Aparapi & Mason

E' stata fatta una ripetizione circa le funzionalità di Aparapi, con particolare attenzione alla gestione esplicita/implicita del buffer di dati tra cpu e gpu. Si è mostrato l'algoritmo BitonicSort con un esempio; si è mostrata anche l'implementazione di tale algoritmo tramite Aparapi. Sono stati mostrati dei grafici per confrontare le prestazioni dei vari algoritmi, in particolare l'implementazione di BitonicSort tra CPU e GPU (usando Aparapi); poi si è mostrato un confronto tra BitonicSort su GPU e la funzione di ordinamento Arrays.parallelSort, conclusasi a vantaggio del parallelSort (molto probabilmente per la superiorità della CPU rispetto alla GPU, i7 2600 vs gtx 480).
seminario_2.pptx (832 KB)

[12/03/2013 12:30] Mason & test

Sono stati mostrati ulteriori test e confronti effettuati su Mason, CUDA Thrust e Aparapi e si è deciso di utilizzare la combinazione di JNI (Java Native Interface) e CUDA nell'implementazione della ricerca del vicinato su GPU (usando forse JCUDA).
seminario_3.pptx (563 KB)