In the past, I was teacher of the course Programmazione I e Laboratorio (a.a. 2014/2015 and a.a. 2015/2016, Corso di Laurea in Informatica, Università di Pisa).

Since a.a. 2014/2015 I have been teacher of the course High Performance Computing (Master Degree Program in Computer Science and Networking, jointly provided by University of Pisa and Scuola Superiore Sant’Anna).

In a.a. 2014/2015 and a.a. 2016/2017 I was teacher of the course High Level Programming with Python (Scuola Superiore Sant’Anna).

High Performance Computing (a.a. 2017/2018)


Course objectives: The course deals with two 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 shared memory multiprocessors, distributed memory multicomputers, clusters, and others. Both issues are studied in terms of structural models, static and dynamic support to computation and programming models, performance evaluation, capability for building complex and heterogeneous applications and/or enabling platforms, also through examples of application cases. Technological features and trends are studied, in particular multi-/many-core technology and high-performance networks.

Course outline: the course is structured into two parts:

1. Structuring and Design Methodology for Parallel Applications: structured parallelism at applications and process levels, cost models, impact of communications, parallel computations as queueing systems / queueing networks, parallel paradigms (Pipeline, Data-flow, Farm, Function partitioning, Data parallel), parallel systems at the firmware level, instruction level parallelism (Pipeline, Superscalar, Multithreaded CPUs), SIMD architectures and GPUs;

2. Parallel Architectures: shared memory multiprocessors (SMP and NUMA architectures), distributed memory multicomputers (Clusters and MPP architectures), run-time support to interprocess communication, interconnection networks, performance evaluation and multicore architectures.

Text book: M. Vanneschi, High Performance Computing: Parallel Processing Models and Architectures. Pisa University Press, 2014.

Appendix of the book: attending and studying this course requires proper background knowledge in Structured Computer Architecture. The appendix of the text book contains a detailed review of basic concepts and techniques in Structured Computer Architecture according to the approach used at the Computer Science Department of the University of Pisa.

Question time: Monday 14:30-16:30 in my room (287), Department of Computer Science.

Course material:

1. Organization of the course and exam rules 

2. Errata corrige of the text book 

3. Collection of past exams with solutions 

4. Course introduction 

5. Overview of the course approach 

6. Level structuring 

7. Parallelism and metrics 

High Level Programming with Python (a.a. 2016/2017)

The course is for the internal students of the Scuola Sant’Anna institute. It consists of 32 hours (16 of lectures and 16 hours of exercises) in which the Python language is introduced by providing the basic knowledge to write good programs and to understand the bahavior of the interpreter. The last lectures are devoted to presenting additional libraries (Numpy and Scipy mainly) useful for scientific programming.

Lecture 1: SLIDE and Homework

Lecture 2: SLIDE and Homework

Lecture 3: SLIDE and Homework

Lecture 4: SLIDE and Homework

Lecture 5: SLIDE and Homework

Lecture 6: SLIDE and Homework

Lecture 7: SLIDE and Homework

Lecture 8: SLIDE

© Gabriele Mencagli 2017