Date: 1 - 4 October 2012

The purpose of this training is to provide a pedagogical presentation of C-C++ shared memory multicore application programming. These programming languages provide access to a substantial number of multithreading programming environments and libraries, like the native threads libraries (Pthreads in Linux-Unix, Windows threads), OpenMP, the Intel Parallel Suite (Threading Building Blocks, Cilk++, ArBB), several high level libraries and, last but not least, the new C++ norm adopted in 2011 (C++11) that integrate multithreading in the language specification.The pedagogical objective of this training is to provide a unified presentation of the basic concepts of multithreading and shared memory programming, underlining the universality of these concepts and discussing the way in which they are declined in the different programming environments. This training assesses the focus, the strengths and the eventual weaknesses of the different programming environment, insisting on their complementarily as well as on their interoperability. Numerous examples are given on the usage of TBB or Pthreads based tools in an OpenMP environment, in order to cope with parallel contexts that are not easily handled in OpenMP.Content

    Introduction to multithreading, overview of present hardware and software technologies

    Creating and managing threads

    Thread safe programming

    Concurrent access to shared data: the need of mutual exclusion

    Event synchronization of threads

    Memory coherence and memory consistency issues. The role of memory consistency models.

    Pthreads based library of high level synchronization tools.

    Thread pools as high level thread management utilities. Task centric programming versus thread centric programming.

    Operation of the OpenMP thread pool. In depth discussion of task centric programming in OpenMP.

    OpenMP examples in SPMD programming : three real, relevant applications.

    OpenMP examples in pipelining threads, using interoperability with Pthreads tools: two real relevant applications

    Comments on hybrid MPI-Multicore programming.

    The Threading Building Blocks (TBB) library. Complementarily with OpenMP and Pthreads.

    Overview of Cilk++

    Overview of ArBB (Array Building Blocks)

Learning outcomesEnhanced programmer’s capabilities in application code design. Enhanced programmer's insights on threads, not multithreading languages, by focusing on parallel and concurrent patterns that occur in real applications, and by discussing useful tricks, potential pitfalls and best practices that are largely independent of the underlying programming environmentPrerequisites

    Experience in C programming and some very limited knowledge of C++.

    C++ programming is not required.

https://events.prace-ri.eu/event/60/

Event types:

  • Workshops and courses


Activity log