User Tools

Site Tools


tesi:tesi

Proposte di Tesi di Laurea

In questa sezione sono raccolti alcuni argomenti per tesi di laurea triennali e magistrali. Sono comunque disponibile a valutare anche argomenti diversi da quelli elencati sotto, purché non troppo distanti dalla mia attività di ricerca.

Se volete fare la tesi con me è utile prendere visione delle regole per lo svolgimento di una tesi.

Simulazione del sistema immunitario umano

Lo studio del sistema immunitario umano è di enorme interesse; il capostipite dei simulatori del sistema immunitario è stato ImmSim, inizialmente scritto in APL (un linguaggio di programmazione ormai scarsamente utilizzato) e successivamente tradotto in linguaggio C. Sfortunatamente, le implementazioni originali non sono più disponibili, ma nuovi e più accurati modelli sono stati sviluppati.

Lo scopo di questa tesi è lo sviluppo di un semplice prototipo di un simulatore CUDA di sistema immunitario, basato ad esempio su automi cellulari (si veda il modello Celada-Seiden tra i riferimenti).

Riferimenti:

Programmazione parallela con Halide

Halide è un linguaggio di programmazione (DSL, Domain-Specific Language) specializzato per lo sviluppo di algoritmi di tipo stencil, frequentemente utilizzati nella programmazione grafica; ad esempio, vari tipi di filtri applicabili su immagini bitmap possono essere rappresentati da computazioni di tipo stencil che è possibile realizzare con Halide.

Halide non è un linguaggio autonomo, ma sfrutta i costrutti di metaprogrammazione del linguaggio C++ per consentire all'utente di includere i kernel computazionali direttamente nei programmi in C++ che vengono poi compilati dal compilatore di sistema. Halide genera automaticamente codice ottimizzato per vari tipi di CPU e GPU, in quest'ultimo caso usando CUDA oppure OpenCL.

Lo scopo della tesi è di valutare Halide dal punto di vista dell'efficienza e della facilità d'uso, sia considerando le applicazioni per le quali è stato pensato (computazioni di tipo stencil), sia per applicazioni parallele generiche.

Questa tesi richiede un minimo di dimestichezza con il linguaggio C++, sebbene non dovrebbe essere necessario scrivere codice ad oggetti e quindi si possa utilizzare il C++ come se fosse una sorta di “linguaggio C più potente”.

Riferimenti:

[NON PIÙ DISPONIBILE] Algoritmi paralleli per analisi di reti complesse

L'analisi delle reti complesse è un tema di ricerca sempre attuale. Una rete complessa è rappresentata da un grafo di cui interessa calcolare una serie di metriche standard (es., betweenness centrality, node centrality, numero di “triangoli”, diametro della rete, distribuzione dei gradi dei nodi, eccetera). Esistono algoritmi sequenziali efficienti per il calcolo di tali metriche, che sono prontamente disponibili in diversi software liberi; uno dei più usati è probabilmente NetworkX per il linguaggio Python.

Dato che l'analisi di reti di grandi dimensioni può richiedere molto tempo, è naturale cercare di sfruttare il parallelismo multicore o basato su CUDA. Scopo della tesi è la valutazione delle prestazioni di implementazioni parallele di alcuni algoritmi per il calcolo di metriche su reti complesse presenti ad esempio nelle librerie seguenti:

Riferimenti:

Sviluppo di codice CUDA per ricostruzione di immagini in ambito biomedico

Questa tesi, in collaborazione con la collega prof. Elena Loli Piccolomini, riguarda la parallelizzazione tramite CUDA di algoritmi per la ricostruzione di immagini 3D provenienti da tomografia computerizzata (TAC) a scopi diagnostici.

Sono disponibili diversi tipi di algoritmi per applicazioni in specifici settori dell'imaging biomedico; abbiamo collaborazioni in atto con aziende del settore che sono interessate allo sviluppo e ottimizzazione di codice.

Riferimenti

[NON PIÙ DISPONIBILE] Implementazione OpenMP/CUDA di un filtro mediano in tre dimensioni

In un precedente lavoro di tesi è stato implementato un algoritmo ottimizzato per il calcolo del filtro mediano di immagini in due dimensioni. Un filtro mediano è una computazione embarrassingly parallel di tipo stencil, in cui si sostituisce il valore dei pixel di una immagini con il valore mediano di un opportuno intorno di quel pixel. Solitamente l'intorno è una regione quadrata; il valore mediano è il valore che occuperebbe la posizione centrale se l'array dei valori dei pixel della regione fossero ordinati.

Il filtro mediano è ampiamente utilizzato per l'elaborazione di immagini; tuttavia, l'implementazione efficiente non è banale nel caso in cui la dimensione dell'intorno sia elevata e la profondità dell'immagine sia di 16 o 24 bit per pixel (bpp). In questi casi, infatti, gli algoritmi efficienti descritti in letteratura non possono essere applicati.

Scopo di questa tesi è l'implementazione di un algoritmo OpenMP oppure CUDA (preferibile) per il calcolo del filtro mediano in una immagine bitmap in tre dimensioni. La definizione di filtro mediano si estende in modo banale al caso 3D (il valore di un voxel viene rimpiazzato dal valore mediano dei voxel di un intorno cubito di lato assegnato), ma l'implementazione richiede attenzione.

È disponibile l'implementazione OpenMP e CUDA della versione 2D, che può essere sfruttata come base di partenza.

Riferimenti

Analisi predittiva dello stato di job in sistemi di calcolo di grandi dimensioni

Nota: Si tratta di un argomento di tesi magistrale che richiede conoscenza di machine learning.

Contesto: Il CNAF gestisce un grande centro di calcolo utilizzato da comunità di ricercatori di fisica delle particelle, astrofisica e altro. Il centro è composto da numerosi sistemi interagenti e per ciascuno esistono informazioni di stato già raccolte o raccoglibili tramite strumenti di monitoring. In questo scenario sono possibili diverse applicazioni di ML, orientate alla failure prediction o predictive maintenance o altro ancora. Alcuni esempi

Job classification. Un centro di calcolo con circa 40K cores in O(10^3) host fisici esegue job singlecore o multicore (1 o 8). I job appartengono a diversi gruppi di utenti (O(50)) e sono accodati da un batch system (HTCondor) che ne schedula l'esecuzione in base ad algoritmi di fairshare. Lo stato dei job durante l'esecuzione viene rappresentato da alcune grandezze (tra molte disponibili) quali per es. memoria, disco, cputime campionate ogni 3 minuti e raccolte in un database. I job di interesse hanno durata tipicamente compresa tra 4 ore e 4 giorni. Si desidera classificare la famiglia di appartenenza dei job osservando l'evoluzione del loro stato x(t) nelle fasi iniziali (per es. job I/O intensive oppure CPU intensive), oppure predire se i job termineranno con successo o fallimento (per il training sono disponibili dati di accounting per i job conclusi, compreso lo stato d'uscita).

WN failure. Lo stato dei nodi di calcolo (Worker Node) è campionato ogni tre minuti sia dal punto di vista del batch system che del S.O. I WN appartengono a circa 4 o 5 modelli distinti. si desidera prevedere se un particolare WN rischia di guastarsi per problema hardware o per le correnti condizioni di carico (in tal caso si considerano anche i job in esecuzione nella macchina e nell'intero cluster).

Data Distribution Management su GPU

Il servizio di data distribution management viene utilizzato nei simulatori paralleli e distribuiti conformi allo standard High Level Architecture (HLA) per determinare in sostanza le intersezioni tra coppie di (iper-)rettangoli nello spazio. In questo lavoro, svolto in collaborazione con il collega Gabriele D'Angelo, è stato proposto un algoritmo parallelo per architetture a memoria condivisa per risolvere efficientemente il problema. Resta da esplorare la possibilità di implementare un analogo algoritmo su GPU usando CUDA.

Riferimenti:

tesi/tesi.txt · Last modified: 2024/03/18 13:00 by moreno

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki