Le moderne infrastrutture IT sono costruite come sistemi distribuiti, un concetto entusiasmante che è iniziato con i primi computer e si è evoluto rapidamente nella sua forma attuale. Dalle riunioni video online ai servizi Internet e dalle piattaforme di social media ai giochi online, tutti usiamo e interagiamo quotidianamente con sistemi distribuiti e dipendiamo sempre più da essi. Tuttavia, la progettazione e la gestione di tali sistemi distribuiti su larga scala è complessa e in genere richiede compromessi ragionevoli. Il corso introduce gli studenti al paradigma, alle tecniche e alle tecnologie per la progettazione e lo sviluppo di applicazioni distribuite scalabili sfruttando piattaforme abilitanti appropriate.

L'accento sarà posto sulle tecniche per la creazione di sistemi distribuiti funzionali, utilizzabili e scalabili. Questo corso fornisce una comprensione approfondita dei principi e dei modelli fondamentali alla base della teoria e degli aspetti sistemici del calcolo distribuito. Nel corso, gli studenti esploreranno le questioni chiave nella progettazione e implementazione di applicazioni distribuite scalabili e reattive, e impareranno come affrontare correttamente tali questioni e come affrontare le sfide comuni per i sistemi distribuiti, come prestazioni, resilienza e scalabilità.

Il corso introduce il linguaggio Scala e come può essere sfruttato per implementare applicazioni distribuite efficienti e scalabili utilizzando framework come Spark (insieme ad alcune delle sue estensioni) e Akka.


Problemi computazionali quali l'analisi di grafi,  networks e reti  complesse, lo studio di  un modello evolutivo e la discretizzazione di un problema differenziale  richiedono l'utilizzo di metodi numerici avanzati per il trattamento di matrici sparse e/o strutturate di grosse dimensioni capaci  di adattarsi ad ambienti di calcolo  distribuito.   Il corso  si rivolge a queste tematiche con i seguenti obiettivi:
a) introduzione di metodi numerici iterativi per la risoluzione di sistemi lineari ed il calcolo di autovalori di matrici di grosse dimensioni sparse e/o strutturate;  b)  analisi di schemi efficienti di vettorizzazione e parallelizzazione di algoritmi numerici  classici;  c) metodi per il trattamento di matrici sparse basati su tecniche di riordinamento  per matrici di adiacenza  di grafi.

In particolare il corso per l'anno corrente intende trattare gli aspetti teorici e computazionali inerenti la progettazione e l'implementazione di metodi efficienti  per l'approssimazione di autovalori/autovettori di matrici strutturate e/o "data-sparse" di grandi dimensioni.


Problemi computazionali quali l'analisi di grafi,  networks e reti  complesse, lo studio di  un modello evolutivo e la discretizzazione di un problema differenziale  richiedono l'utilizzo di metodi numerici avanzati per il trattamento di matrici sparse e/o strutturate di grosse dimensioni capaci  di adattarsi ad ambienti di calcolo  distribuito.   Il corso  si rivolge a queste tematiche con i seguenti obiettivi:
a) introduzione di metodi numerici iterativi per la risoluzione di sistemi lineari ed il calcolo di autovalori di matrici di grosse dimensioni sparse e/o strutturate;  b)  analisi di schemi efficienti di vettorizzazione e parallelizzazione di algoritmi numerici  classici;  c) metodi per il trattamento di matrici sparse basati su tecniche di riordinamento  per matrici di adiacenza  di grafi. 

In particolare il corso per l'anno corrente intende trattare gli aspetti teorici e computazionali inerenti la progettazione e l'implementazione delle tecniche multisplitting sincrone ed asincrone per la risoluzione iterativa di sistemi lineari.