Teaching

"Teaching is the highest form of understanding”. Aristotele

Thesis proposals

Interested students can ask me a thesis proposal in the following main areas

  • Data stream processing on heterogeneous systems (multi-core CPUs, GPUs and FPGAs)

  • Unconventional parallel programming approaches

  • Self-* adaptive supports for parallel processing (i.e., QoS- and Energy-aware computing on IoT/Edge devices, resource allocation)

  • Operating systems (impact of scheduling, thread mapping/pinning on parallel programs)

  • Parallel programming, parallel libraries and runtime supports

Please send me an email and we can talk in person or by Skype/Teams/Meet. Below a list of possible projects (description in Italian) that are currently available (others upon request, also for foreign students)

  • [Master/Bachelor] Analisi e studio di meccanismi di microbatching adattivo nel contesto del data stream processing. Download proposal.

  • [Master] Supporto di costrutti dataflow ciclici per il data streaming in WindFlow. Download proposal.

  • [Master/Bachelor] Realizzazione di un sistema di eventi temporizzati in una libreria di data stream processing in C++ (WindFlow). Download proposal.

  • [Master/Bachelor] Confronto tra strumenti di data stream processing su sistemi scale-up. Download proposal.

  • [Master/Bachelor] Confronto prestazionale tra supporti per il data stream processing in contesti di applicazioni con stato “larger-than-memory”. Download proposal.

  • [Master] Progettazione ed implementazione di una API ad alto livello tabellare per WindFlow. Download proposal.

  • [Master/Bachelor] Analisi del consumo energetico di strumenti di data stream processing su piattaforme Edge/IoT. Download proposal.

  • [Master/Bachelor] Studio dell’integrazione di sistemi di inferenza per AI/ML in strumenti di data stream processing. Download proposal.

Teaching activities

I am currently teaching some courses in the Bachelor's Degree Program in Computer Science (Laurea Triennale in Informatica) and the Master's Degree Program in Computer Science and Networking (Laurea Magistrale in Informatica e Networking).

High Performance Computing (532AA, 9 CFU) 

hpc image

Course objectives. The course deals with some interrelated issues in high-performance computing: i) fundamental concepts and techniques in parallel computation structuring and design, including parallelization methodologies and paradigms, parallel programming models, their implementation, and related cost models; ii) architectures of high-performance computing systems, including multi-core CPUs, shared-memory systems, and GPUs; iii) programming heterogeneous computing platforms comprising multi-core CPUs and NVIDIA GPUs, CUDA programming model with advanced aspects and optimizations.

Course topics. The course is structured into two parts:

  • Part I "Parallel Processing Methodologies and Shared-Memory Systems"
    Structured parallelism methodologies, cost models, the impact on communications, parallel computations as queueing systems/queueing networks, parallel paradigms (pipeline, data-flow, farm, data-parallel), parallel systems at the firmware level, instruction level parallelism (pipeline, superscalar, multi-threaded CPUs). Shared-memory multiprocessors (SMP and NUMA architectures), memory and I/O, synchronization mechanisms, memory consistency models, interconnection networks for parallel architectures, cache coherency.

  • Part II "SIMD and GPU Architectures and NVIDIA CUDA Programming"
    SIMD model, array processors, and GPUs. NVIDIA GPU architectures, stream multi-processors, CUDA threads, global and shared memory, advanced architectural features. CUDA programming model, kernel design, multi-dimensional grids, optimizations, CUDA streams and concurrency, CUDA libraries, and advanced applications.

Microsoft Teams. Students should subscribe to the official Team of the course using their UNIPI credentials. Use the following code to join the Team: lhnph3v. Teaching material (e.g., slides, references to the textbooks) are available in the resources of the Team.

Architetture e Sistemi Operativi (725AA, prima parte 6 CFU)

aeso

Obiettivi del corso. Il corso è un fondamentale annuale del secondo anno della Laurea Triennale in Informatica. Le tematiche vertono nella prima parte sulle Architetture dei Calcolatori, mentre la seconda parte del corso è inerente alla progettazione e funzionamento dei Sistemi Operativi. La parte di mia competenza corrisponde ai primi 2/3 del programma di Architetture, svolto nel primo semestre (48 ore, 24 lezioni).

Argomenti del corso. Durante la prima parte del corso (6 CFU) affronteremo i seguenti argomenti

  • Fondamenti dei sistemi di elaborazione: rappresentazione binaria di numeri interi e in virgola fissa/mobile, logica Booleana, tabelle di verità e semplificazione delle espressioni logiche

  • Reti combinatorie e reti sequenziali

  • Linguaggi per la descrizione dell’hardware (in particolare Verilog per modellare reti combinatorie e sequenziali)

  • Linguaggio Assembler ARMv7

  • Microarchitettura base del processore ARMv7 (single-cycle)

  • Microarchitetture avanzate per ARMv7 (multi-cycle e pipeline)

  • Cenni a processori avanzati (superscalari, multithreading)

Microsoft teams. Il Team del corso è disponibile con il seguente codice (iscriversi con le credenziali UNIPI): n2iz06f. Il Team contiene anche il materiale didattico, compreso il riferimento ai libri di testo e il materiale didattico integrativo.