Sistemi di Calcolo Paralleli e Distribuiti 2020/21

Il corso introduce a principali modelli e strumenti per la programmazione parallela e distribuita, con maggiore enfasi sulla programmazione parallela. Obiettivo primario è fornire metodi e strumenti per dominare la complessità della progettazione di applicazioni parallele basate sui modelli di programmazione a memoria condivisa, a scambio di messaggi e SIMD.

Metodologicamente, il corso prima introduce le architetture ed i concetti fondamentali per la programmazione parallela e distribuita (attività, sincronizzazione, comunicazione), che poi vengono applicati ed esemplificati su esempi di interesse per per i curriculum dello studente (es. calcolo scientifico).



Analisi e Visualizzazione di Reti Complesse 20/21

This course is made of two different modules, namely, [netsci] and [dataviz], whose objectives are described below. [netsci]: This course introduces the fundamental concepts, principles and methods in the interdisciplinary field of network science, with a particular focus on analysis techniques, modeling, and applications for the World Wide Web and online social media. Topics covered include graphic structures of networks, mathematical models of networks, common networks topologies, structure of large scale graphs, community structures, epidemic spreading, PageRank and other centrality measures, dynamic processes in networks, graphs visualization. Additionally, students will learn how to apply the basic principles of network science to perform CNA (Complex Network Analysis) tasks on real data, with R and/or Python and many different packages/libraries such as networkx, igraph, networkx, and so on, as well as advanced graph visualization tools as GePhi. [dataviz]: Another learning objective of this class falls in the field of scientific data visualization. Students will learn basic visualization design and evaluation principles, and learn how to acquire, parse, and analyze large datasets. Students will also learn techniques for visualizing multivariate, temporal, text-based, geospatial, hierarchical, and (of coursel) network/graph-based data. Additionally, students will utilize GePhi, D3, Python, and many other tools to prototype many of these techniques on existing datasets. Full version of the course includes both modules. This is of interest for students of INF0007 "Analisi e Visualizzazione delle Reti Complesse" (Master's degree in "Computer Science", 9 credits) and FIS0127 "Analisi e Visualizzazione di Reti Complesse" (Master's degree in "Fisica dei Sistemi Complessi", 9 credits). Other students may have to consider only the [netsci] module. In particular this applies to students attending MAT0049 "Complex networks" (Master's degree in "Stocastics and Data Science", 6 credits), and MFN0954 "Reti Complesse" (Master's degree in "Computer Science", 6 credits).

Performance Evaluation: Simulation and Modelling

The purpose of this course is the introduction to the Performance Evaluation of computing systems and telecommunication networks. The course consists of two parts: the first introduces the most important techniques used to study models of the behavior of traffic systems; the second introduces the stochastic processes with special emphasis on Markov Chains as tools for conducting a deeper study of the systems discussed in the first part. The introductory level of this course does not allow to model and to analyse real systems, but provides enough information to enable the student to perform the analysis of existing systems knowing the methods that are best suited for this goal and the capabilities of existing solution techniques. The course is taught using a language and examples coming from the performance evaluation of computing systems, but the techniques discussed during the lectures are suited for the analysis of models pertaining to a much larger spectrum of application fields. The models discussed in this course correspond to probabilistic representations in which different aspects of reality are expressed in form of networks of servers in front of which queues may develop because of the existence of congestion and/or synchronization phenomena. The analysis of the behavior of these queuing networks is approached during this course using analytic and numerical techniques (in the simple cases) and simulation methods in the complex ones. The methodological part consists of two sections referring to Operational Analysis and Simulation. Operational Analysis is discussed in the first part of the course to introduce the basic concepts of this subject and to tackle the modelling and analysis of relatively simple case studies. When this technique turns out to be inadequate for tackling the complexity of real cases, Discrete Event Simulation becomes the most suitable analysis technique. The simulation of a probabilistic model consists of writing a program capable of reproducing (with a certain level of abstraction) the behavior of the model. The execution of the simulation program corresponds to the evolution of the model, starting from an initial state and ending in a predefined final state. The execution of the program is driven by random number generators and thus corresponds to one of the possible evolutions of the model. Measures performed during the simulation are instances of random variables; the statistical analysis of the simulation output is thus performed to obtain interval estimates (confidence intervals) of the performance indices of the models. The second part of the course starts from the observation that, under specific conditions, the probabilistic characteristics of these models can be studied with the use of Markov Chains and shows how they can be seen as nice and elegant mathematical models for dealing with complex system, but with computational costs that may be extremely large. Integral part of the course is the periodic assignment of exercises and the proposal of a final project that will be discussed during the oral exam (possibly online).

Modelli Concorrenti e Algoritmi Distribuiti

Il corso si propone di fornire le metodologie e gli strumenti per la programmazione concorrente, ponendo l'enfasi sui vari modelli cui i linguaggi fanno riferimento e sugli strumenti tipici di ogni modello. 

Un secondo obiettivo è l'introduzione allo studio di algoritmi per ambienti distribuiti. A tal fine viene  discusso e analizzato un insieme di algoritmi distribuiti "classici" per ambienti a rete.