High-performance Concurrency in C++ 2024

High-performance Concurrency in C++ is a two-day onsite training course with programming exercises, taught by Fedor Pikus.  It is offered at the Gaylord Rockies from 09:00 to 17:00 Aurora time (MDT) on Saturday and Sunday, September 21st and 22nd, 2024 (immediately following the conference). Lunch is included.

Course Description

This course is designed to empower participants with the knowledge and skills required to unlock the full potential of high-performance concurrency in C++. By delving into fundamental principles and advanced techniques, attendees will gain a profound understanding of how to design, implement, and optimize concurrent programs effectively.

The class begins by addressing the essentials of performance and guiding participants on how to evaluate and measure the efficiency of concurrent programs. Emphasis is placed on the significance of performance measurement, providing insights into practical methodologies for assessing program efficiency.

The exploration of threads and memory management goes beyond the basics, offering a nuanced understanding of threads in C++, multi-threaded memory access, and the critical aspects of avoiding data races. Participants will learn effective strategies for synchronizing memory accesses and gain insights into memory models, equipping them to navigate complex memory-related challenges in concurrent programming.

The attendees will learn the tools offered by the C++ language, including C++20 and coroutines. We will learn about thread schedulers, thread pools, and pipelines, as well as thread-safe data structures.

This class equips participants with a comprehensive skill set to harness the full potential of C++ for high-performance concurrency, covering everything from fundamental principles to advanced tools and techniques.

Prerequisites

Attendees should have an interest in learning above all, understanding of concurrency concepts, and intermediate-level C++ knowledge.

Course Topics

  1. Basics of performance
    1. How to evaluate the performance
    2. Why performance must be measured
    3. How to measure the performance of concurrent programs
  2. Threads and Memory
    1. Overview of threads
    2. Threads in C++
    3. Multi-threaded and multi-core memory access
    4. Avoiding data races and its cost
    5. Synchronization of Memory Accesses
    6. Memory Models
  3. Overview of C++ tools for concurrency
    1. C++11/14 – Threads, mutexes, conditions
    2. C++17 – Parallel STL
    3. C++20 – advanced synchronization primitives
    4. C++20 – coroutines
  4. Efficient Concurrency
    1. Locks and the cost of lock-based synchronization
    2. Advanced locks
    3. Thread-Safe Data Structures
    4. Introduction to Lock-Free Programming
    5. Examples of lock-free data structures
  5. Thread scheduling and executors
    1. What is executor
    2. Thread pools
    3. Pipelines
  6. Concurrency and Hardware
    1. Memory access in concurrent programs
    2. Concurrent programs on large systems

Register Here

Course Instructor

Fedor Pikus

Fedor G Pikus is a Technical Fellow and head of the Advanced Projects Team in Siemens Digital Industries Software. His responsibilities include planning the long-term technical direction of Calibre products, directing and training the engineers who work on these products, design, and architecture of the software, and researching new design and software technologies.

His earlier positions included a Chief Scientist at Mentor Graphics (acquired by Siemens Software), a Senior Software Engineer at Google, and a Chief Software Architect for Calibre PERC, LVS, and DFM at Mentor Graphics. He joined Mentor Graphics in 1998 when he made a switch from academic research in computational physics to the software industry.

Fedor is a recognized expert in high-performance computing and C++. He is the author of two books on C++ and software design, has presented his works at CPPNow, CPPCon, SD West, DesignCon, and in software development journals, and is also an O’Reilly author. Fedor has over 30 patents and over 100 papers and conference presentations on physics, EDA, software design, and C++ language.