Circuiti e Algoritmi per il Calcolo Distribuito, Distributed Computing for Circuits and Systems (Laurea Magistrale in Ingegneria Elettronica, Ingegneria delle Comunicazioni)


AVVISO URGENTE! A seguito delle recenti disposizioni governative, da oggi martedì 10 marzo 2020 tutti i ricevimenti e gli esami in presenza sono SOSPESI fino a nuova ulteriore comunicazione. Consultare gli avvisi relativi al ricevimento nella pagina principale della didattica per ricevere ulteriori indicazioni.

ATTENZIONE! Questa è la scheda del corso "Distributed Computing for Circuits and Systems" (A.A. 2018/2019) e del corso "Circuiti e Algoritmi per il Calcolo Distribuito" (A.A. 2019/2020). Successivamente avrà unico riferimento la scheda del corso "Circuiti e Algoritmi per il Machine Learning" che si trova nella relativa pagina.

  • Obiettivi del modulo e capacità acquisite dallo studente. Lo scenario delle tecnologie ICT sta rapidamente evolvendo verso sistemi in cui i dispositivi tecnologici, di diversi tipi e grandezze, costituiscono parte integrante dell’ambiente in cui sono immersi. Scopo dell’insegnamento è fornire le nozioni di base riguardanti le problematiche teoriche, tecniche e pratiche di progettazione e realizzazione di circuiti e algoritmi per la soluzione di problemi avanzati di trattamento dell’informazione, basati sul learning statistico e data-driven, in sistemi di calcolo paralleli e distribuiti. Saranno in tal senso approfondite le tematiche riguardanti le tecnologie basate su sistemi di calcolo GPU e multicore, reti di sensori e attuatori, smart devices, wearable computers, etc. Attraverso un’intensa e sistematica attività pratica e di laboratorio, nel corso saranno considerate le metodologie relative alla progettazione e alla realizzazione di architetture di calcolo parallele e di sistemi di agenti distribuiti, mediante circuiti e algoritmi basati in particolare su intelligenza computazionale, Deep Learning e calcolo quantistico, focalizzando l’attenzione sulla necessità di rendere efficienti tali sistemi sia dal punto di vista della robustezza numerica sia della scalabilità circuitale/computazionale, nonché della fault tolerance e della self-organization.
  • Prerequisiti. Conoscenze di base riguardanti la teoria dei circuiti, l'elaborazione dei segnali e l'elettronica digitale.
  • Risultati di apprendimento attesi. Capacità di analisi e soluzione delle problematiche relative a progettazione, realizzazione e test di architetture di calcolo e modelli computazionali, con particolare riferimento allo sviluppo in linguaggio Matlab/Python, per la realizzazione di sistemi di apprendimento in ambienti paralleli e distribuiti.
  • Programma A.A. 2019/2020 (ovviamente fa riferimento TUTTO E SOLO quanto presentato, spiegato e discusso durante le lezioni del corso):
    • Generalità sul trattamento dei segnali analogici e digitali, segnali aleatori multi-dimensionali.
    • Fondamenti di DSP: sistemi e segnali tempo-discreti; trasformata z; analisi di sistemi LTI ed elaborazione di segnali analogici.
    • Strutture di elaborazione e filtraggio: architetture FIR, IIR e a traliccio, effetti di quantizzazione, processori per DSP.
    • Metodi di progettazione di array processors.
    • Dependence Graph e analisi delle dipendenze negli algoritmi.
    • Proiezione e scheduling da DG a SFG; mapping canonico da DG a SFG e relativi esempi.
    • Array sistolici: pipelining e sistolizzazione.
    • Virtualizzazione delle risorse in ambienti di calcolo distribuiti, cloud computing.
    • Introduzione al calcolo quantistico: quantum gate e quantum gate array; algoritmi quantistici per l’ottimizzazione e il trattamento dell’informazione (QFFT, Grover, Schor); Quantum Machine Learning, Quantum Neural Networks.
    • Introduzione al Machine Learning e all'intelligenza Computazionale: reti neurali, logica fuzzy e algoritmi evolutivi.
    • Apprendimento supervisionato e non supervisionato: data preparation, clustering, classificazione, regressione e predizione.
    • Modelli lineari per regressione e classificazione, regolarizzazione dei parametri. Cross-validazione e k-folding.
    • Metodi non parametrici per problemi supervisionati e non supervisionati: C-Means, k-NN e relative implementazioni parallele in ambiente Matlab.
    • Deep Learning e Deep Neural Networks.
    • Apprendimento su architetture parallele e distribuite: tecnologie e tecniche di acquisizione dei dati; learning distribuito e relative applicazioni.
    • Studi di caso per applicazioni parallele e distribuite e introduzione ai progetti monotematici: 
      • quantizzazione, classificazione, predizione, approssimazione, interpolazione e filtraggio di dati meccatronici, biologici, energetici, economici e ambientali;  
      • implementazione di reti neurali e neurofuzzy;
      • architetture ottimizzate per il Deep Learning;
      • utilizzo di librerie in ambiente Matlab/Python per il calcolo parallelo su architetture multi-core e GPU CUDA;
      • utilizzo di Intel Math Kernel Library for Deep Learning (MKL-DNN) per il calcolo parallelo su architetture multi-core Intel di ultima generazione;
      • utilizzo di nodi di calcolo e reti di sensori distribuiti basati su tecnologia Raspberry Pi.
  • Calendario appelli A.A. 2019/2020. Gli esami potranno essere sostenuti per appuntamento nel momento in cui si ritiene più opportuno a partire da gennaio 2020; la verbalizzazione avverrà nelle finestre ufficiali previste dal calendario di Facoltà come si seguito riportato:
    • 1° appello ordinario: gennaio 2020
    • 2° appello ordinario: febbraio 2020
    • Appello straordinario: marzo/aprile 2020
    • N.B.: Appello riservato a studenti part-time, fuori corso nell’A.A. 2019-2020, studenti con disabilità e con D.S.A.
    • 3° appello ordinario: giugno 2020
    • 4° appello ordinario: luglio 2020
    • 5° appello ordinario: settembre 2020
      • Appello straordinario: ottobre/novembre 2020
      • N.B.: Appello riservato a studenti part-time, fuori corso, iscritti per l’A.A. 2019-2020 al secondo anno della laurea magistrale, studenti con disabilità e con D.S.A.
    • Materiale didattico
      • Appunti e dispense forniti dal docente
      • Materiale integrativo (lucidi del corso, articoli) disponibili sul sito web
      • Letture facoltative suggerite:
        • H.T. Kung, R. Sproull e G. Steele, VLSI Systems and Computations, Springer.
        • J.C. Principe, N.R. Euliano e W.C. Lefebvre, Neural and Adaptive Systems: Fundamental through simulations, J. Wiley & Sons.
        • M. Sipser, Introduction to the Theory of Computation, 3rd Edition.
        • M. Barr e A.J. Massa, Programming embedded systems: with C and GNU development tools, O'Reilly.
        • G. Strang, Linear Algebra and Its Applications, 4th Edition.
        • C.M. Bishop, Pattern Recognition and Machine Learning, Springer.
        • S.O. Haykin, Neural Networks and Learning Machines (3rd Ed.), Pearson.
    [slide 1-2]    [slide 3-4]    [slide 5-8]    [slide 9-10]    [slide 11]    [slide 12-13]    [slide 14]

    AVVISOper ogni tipo di comunicazione legata al corso, gli interessati sono pregati di inviarmi una e-mail indicando nell'OGGETTO "Distributed Computing" e nel testo i seguenti dati: nome, cognome e numero di matricola. Cercherò di rispondere al più presto.