Objectives
This training proposes a pedagogical presentation of C-C++ shared memory multicore application programming. C++ in particular provides access to a substantial number of multithreading programming environments and libraries, like the native threads libraries (Pthreads in Linux-Unix, Windows threads) or the most recent C++11 standard threads library, a portable environment designed for performance. While the emphasis is put in OpenMP as a widely adopted standard, a broader vision of multithreading is useful to develop a clear vision of the strategic options open to developers.
The pedagogical objectives of this training are:
- 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 different programming environments.
- To enhance 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 environment.
Content
The training planned for 2016 puts special emphasis on two recent important developments in the multithreading area: the C++11 multithreading standard library, and the substantial extensions incorporated in the OpenMP 4.0 release.
The subjects to be developed are grouped in three categories, :
- Introduction to multithreading, overview of present hardware and software technologies. Thread management and synchronization. Memory coherency and memory consistency issues.
- Overview of the C++11 thread library, focusing on the added value that utilities implemented with this basic library can provide to higher level programming environments like OpenMP.
- A complete overview of OpenMP, including all the new features of the latest 4.0 release. In depth discussion of task centric programming in OpenMP. A number of full OpenMP examples are proposed, dealing with data parallel contexts, unbalanced and irregular applications, and applications involving pipelined threads.
Each one of these subjects is illustrated with examples exhibiting pitfalls and best practices. A library of high level utilities - written in C++11 - that simplify the programming of delicate concurrency patterns (like control parallelism and pipelines, or point to point synchronizations among individual threads) developed by the author, is made available.
Requirements
Experience in C programming and some limited knowledge of C++. Experience in advanced C++ programming is not required. The (limited) specific C++ syntax required by the C++11 threads library will be discussed when needed.
Support material
This training is based on selected subjects from a book recently published by the author (see store.elsevier.com, and search by ISBN : 9780128037614). Ex- amples and exercises are taken from the software accompanying the book (see booksite.elsevier.com/9780128037614 ).
Victor Alessandrini
Maison de la Simulation