4 Days Seminar Package: Modern C++1x Design & Fastware

Summary


  • Date: 2018-10-08/09/10/11
  • Duration: 09:00 - 17:00
  • Location: Stuttgart, Hotel Steigenberger Graf Zeppelin
  • Language: EN
  • Speaker: Dr. Andrei Alexandrescu
  • Early Bird: 2.990,- € (plus 19% VAT/MwSt.) till/bis 2018-07-06
  • Price: 3.285,- € (plus 19% VAT/MwSt.)

Änderungen vorbehalten / changes reserved


 

First two days: Modern C++1x Design

 

Abstract

The book "Modern C++ Design" popularized what became colloquially known as modern C++, a refreshing style of high-level programming that gave away inheritance and polymorphism in favor of templates and compile-time metaprogramming. Over time, support for this way of writing code has been significantly enhanced in C++11 and C++14. This seminar discusses the core topics of Modern C++ Design in the context of C++1x. With better language support certain artifacts are much easier to design and implement. More importantly, new opportunities are now available.

 

Course Highlights

Participants will gain:

  • A good understanding of Design Patterns and their place in an engineer's toolchest.
  • Mastery of policy-based design that uses C++ generic programming to implement highly reusable designs.
  • A comprehensive introduction to C++1x core language features and library artifacts specifically targeted at template-based programming.
  • A good understanding of classic design patterns, their tradeoffs, and state-of-the-art generic C++ implementation for each.

 

Outline

Please note: This course is being actively developed. The actual course might contain more topics and slight variations on the topics outlined below

 

  • Recap of Design Patterns
  • Recap of Policy-Based Design
  • Variadic Templates
  • std::tuple
  • Deferred std::tuple expansion
  • Typelists and policy parameters
  • Factory Design Pattern
  • Visitor Design Pattern
  • Chain of Responsibility Design Pattern
  • Declarative Control Flow
  • Unifying Exception with Error Codes
  • Policy-Based Memory Allocation
  • Generic Locking
  • Robert Martin's Principles of Object-Oriented Design

    • SRP: The Single Responsibility Principle
    • OCP: The Open Closed Principle
    • LSP: The Liskov Substitution Principle
    • ISP: The Interface Segregation Principle
    • DIP : The Dependency Inversion Principle
    • REP: The Release Reuse Equivalency Principle
    • CCP: The Common Closure Principle
    • CRP: The Common Reuse Principle
    • ADP: The Acyclic Dependencies Principle
    • SDP: The Stable Dependencies Principle
    • SAP: The Stable Abstractions Principle

 

Following two days: Fastware

 

Abstract

This class introduces attendees to a thorough approach to optimization techniques for contemporary computing architectures. It is based on material from Andrei's upcoming book Fastware. In turn, the book is based on Andrei's career-long experience with tuning the performance of various software systems, from Machine Learning research to high-performance libraries to Facebook-scale computing backends.


Such information is scant and difficult to find. Software engineering folklore is rife with tales of optimizations. Programmers commonly discuss and argue whether a piece of code is supposed to be faster than another, or what to do to improve the performance of a system small or large.


Optimization is big. Arguably it's bigger today, when serial execution speed has stalled and, after parallelizing what's possible, we have single-thread speed as the remaining bottleneck. A large category of applications have no boundaries on desired speed, meaning there's no point of diminishing returns in making code faster. Better speed means less power consumed for the same work, more workload with the same data center expense, better features for the end user, more features for machine learning, better analytics, and more.


Optimizing has always been an art, and in particular optimizing C++ on contemporary hardware has become a task of formidable complexity. This is because modern hardware has a few peculiarities about it that are not sufficiently understood and explored. This class offers a thorough dive in this fascinating world.

 

Outline

Please note: This course is being actively developed. The actual course might contain more topics and slight variations on the topics outlined below.

  • The Art of Benchmarking
  • Conducting Time Measurements
  • Baselines
  • Strength Reduction
  • Minimizing Indirections
  • Eager Computation: Tables vs. Computation
  • Lazy Computatio

    • Memoization
    • Computation vs. Tables
    • Lazy Structuring
  • Instruction-Level Parallelism
  • Inlining
  • Smart Resource Optimizations
  • Copy Elision
  • Scalable Use of the STL
  • Building Structure on Top of Arrays
  • Large Set Operations and Derivatives
  • Contention Minimization

 

Attendee Profile

This classes target senior engineers and architects of C++-based systems and who have efficiency of generated code as a primary concern. Familiarity with the major features of C++ is required. Template programming and C++1x concepts will be introduced.

 

Format

The format is a highly interactive lecture. Questions during the lecture are encouraged. Use of laptops for trying out examples is allowed.

Dr. Andrei Alexandrescu
Dr. Andrei Alexandrescu
Dr. Andrei Alexandrescu is a researcher, software engineer, and author.



Contact


Phone
+49 (0)711 138183-0

E-Mail
seminare@qa-systems.de

Terms and Conditions
Start
Trial
QA-Systems