Nov 26 – 30, 2012
BSC, Barcelona
CET timezone
All PATC Courses do not charge fees.


The course starts with the objective of setting up the basic foundations related with task decomposition and parallelization inhibitors, using a tool to analyze potential parallelism and dependences. The course follows with the objective of understanding the fundamental concepts supporting shared-memory and message-passing programming models. The course is taught using formal lectures and practical/programming sessions to reinforce the key concepts and set up the compilation/execution environment. The course covers the two widely used programming models: OpenMP for the shared-memory architectures and MPI for the distributed-memory counterparts. The use of OpenMP in conjunction with MPI to better exploit the shared-memory capabilities of current compute nodes in clustered architectures is also considered. Paraver will be used along the course as the tool to understand the behavior and performance of parallelized codes.
For trainees with some theoretical and practical knowledge, some programming experience.

Learning Outcomes:
On completion of this course students should be able to:
  • Understand the use of task decomposition and the inhibitors of the potential parallelism in a sequential algorithm.
  • Understand the fundamentals of shared-memory and message-passing models.
  • Implement simple algorithms using OpenMP for shared-memory and MPI for message-passing.
  • Compile, execute and debug simple OpenMP and MPI codes.
  • Understand the performance of OpenMP and MPI codes.
Fortran, C or C++ programming. All examples in the course will be done in C.

BSC, Barcelona
VS 215
UPC, Campus Nord, Vertex Building
Course Program Outline:

Day 1
Session 1 / 10:00 am – 1:00 pm
1. Introduction to parallel algorithms design and performance parameters (1 hour)
2. SsGrind: tool to analyze potential parallelism and its inhibitors (2hours)
3. Practical: simple heat diffusion application

Session 2 / 2:00pm – 5:00 pm
1. Introduction to Paraver: tool to analyze and understand performance
2. Practical: hybrid MPI/OpenMP trace analysis

Day 2
Session 1 / 10:00 am - 1:00 pm
1. Introduction to MPI: Overview of MPI
2. Point-to-point communication, collective communication
3. Practical: How to compile and run MPI applications, distributed matrix computations (matrix multiply or/and heat equation)

Session 2 / 2:00 pm - 5:00 pm
1. Blocking and non-blocking communications
2. Communicators, Topologies
3. Practical: Distributed matrix computations (same examples as in session 1)

Day 3
Session 1 / 10:00 am - 1:00 pm

1. MPI I/O issues, Error handling, Parallel libraries
2. Scalability, xSim and Dimemas simulator
3. Practical: Scalability simulations using xSim and Dimemas

Session 2 / 2:00 pm - 5:00 pm
1. Practical: Scalability simulations using xSim and Dimemas (cont.)
2. Outlook - Fault tolerance, FT-MPI, MPI 3.0

Day 4
Session 5 / 10:00am – 1:00 pm

1. Shared-memory programming models, OpenMP fundamentals
2. Parallel regions and work sharing constructs
3. Synchronization mechanisms in OpenMP
4. Practical: heat diffusion

Session 6 / 2:00pm – 5:00 pm
1. Tasking in OpenMP
2. Programming using a hybrid MPI/OpenMP approach
3. Practical: heat diffusion

Day 5
Session 7 / 10:00 am – 1:00 pm

1. Introduction to the OmpSs programming model
2. Programming using a hybrid MPI/OmpSs approach
3. Practical: TBD