Fastware for C++--Scott Meyers

Fastware for C++

Scott Meyers

Fastware is software that's fast — that gets the job done quickly. Low latency is the name of the game, and achieving it calls for insights from software engineering, computer science, and the effective use of C++. This presentation addresses crucial issues in each of these areas, covering topics as diverse as CPU caches, speed-sensitive use of the STL, data structures supporting concurrency, profile-guided optimization, and more.

Much of the material in "Fastware for C++" is unique to this seminar, i.e., unavailable in Scott's publications or his other training courses. However, as the successor to Scott's acclaimed "High-Performance C++ Programming" seminar, "Fastware for C++" also includes updated discussions of topics from that course as well as from Scott's books, Effective C++, More Effective C++, and Effective STL.

Course Highlights

Participants will gain:

  • Recognition of the importance and implications of treating performance as a correctness criterion.
  • Understanding of how effective use of third-party APIs can improve system performance.
  • Knowledge of specific C++ practices that improve the speed of both the language and the STL.
  • Familiarity with concurrent data structures and algorithms poised to become de facto standards.

Who Should Attend

Systems designers, programmers, and technical managers involved in the design, implementation, and maintenance of performance-sensitive libraries and applications using C++. Participants should already know the basic features of C++ (e.g., classes, inheritance, virtual functions, templates), but expertise is not required. Knowledge of common threading constructs (e.g., threads, mutexes, condition variables, etc.) is helpful. People who have learned C++ recently, as well as people who have been programming in C++ for many years, will come away from this seminar with useful, practical, proven information.

Format

Lecture and question/answer. There are no hands-on exercises, but participants are welcome — encouraged! — to bring computers to experiment with the material as it is presented.

Length

Two full days (six to seven lecture hours per day).

Detailed Topic Outline

Treating speed as a correctness criterion.

  • Why "first make it right, then make it fast" is misguided.
  • Latency, initial and total.
  • Other performance measures.
  • Designing for speed.

Optimizing systems versus optimizing programs. ◦Most system components are "foreign."

  • Exercising indirect control over "foreign" components.
  • Examples.

CPU Caches and why they're important. ◦Data caches, instruction caches, TLBs.

  • Cache hierarchies, cache lines, prefetching, and traversal orders.
  • Cache coherency and false sharing.
  • Cache associativity.
  • Guidelines for effective cache usage.

Optimizing C++ usage: ◦Move semantics.

  • Avoiding unnecessary object creations.
  • When custom heap management can make sense.

Optimizing STL usage: ◦reserve and shrink_to_fit.

  • Range member functions.
  • Using function objects instead of function pointers.
  • Using sorted vectors instead of associative containers.
  • A comparison of STL sorting-related algorithms.

An overview of concurrent data structures. ◦Meaning of "concurrent data structure."

  • Use cases.
  • Common offerings in TBB and PPL.
  • Writing your own.

An overview of concurrent STL-like algorithms. ◦Thread management and exception-related issues.

  • Common offerings in TBB and PPL.
  • OpenMP.
  • Other TBB and PPL offerings.

Exploiting "free" concurrency.

  • Meaning of "free."
  • Multiple-approach problem solving.
  • Speculative execution.

Making use of PGO (profile-guided optimization) and WPO (whole-program optimization).

Resources for further information.

For more information on this course, contact Scott directly.

Adventures in Perfect Forwarding--Scott Meyers

From Scott Meyers' blog:

On Saturday, June 2, Facebook sponsored a one-day C++ conference and asked me (and others) to give a presentation.  I chose an abridged and updated version of a talk from C++ and Beyond 2011, "Adventures in Perfect Forwarding."  Judging by the dates on the comments below the video, it's been available since July, but I found out about it being online only today...

Read more at Scott's blog.

User-Defined Literals, Part 2--Andrzej KrzemieĊ„ski

Andrzej Krzemieński's latest:

User-defined literals -- Part II

In the previous post on user-defined literals, we have seen what user-defined literalsare for and how you define a cooked literal operator, i.e., where compiler that sees literal 12_kg extracts value 12 of type long double and calls your function operator"" _kg(12.L) to transform the result.

In this post we will explore other aspects of user-defined literals: raw literal operators, which allow you to inspect every character in the literal...

C++11 Style: A Touch of Class -- Bjarne Stroustrup

C++11 Style: A Touch of Class -- Bjarne Stroustrup

How do we write good code in idiomatic C++11? What principles, techniques, and idioms can we exploit to make it easier to produce quality code? In this presentation, I make an argument for type-rich interfaces, compact data structures, integrated resource management and error handling, and highly-structured algorithmic code. I illustrate my ideas and guidelines with a few idiomatic code examples.

I use C++11 freely. Examples include auto, general constant expressions, uniform initialization, type aliases, type safe threading, and user-defined literals. This presentation reflects my thoughts on what "Modern C++" should mean in the 2010s: a language for programming based on light-weight abstraction with direct and efficient mapping to hardware, suitable for infrastructure code.

POCO 1.5.0 available

Development release 1.5.0 of POCO is now available. See the changelog or download here.

Major new features include:

  • a significantly improved Data framework
  • the new JSON library
  • lots of other improvements

Please note that this is a development release and not considered stable. Interfaces may change, backwards compatibility may be broken, not all platforms may work and there may be some rough edges.

C++ Rvalue References Explained--Thomas Becker

What are rvalue references and move semantics, and how do they work again, exactly?

If you haven't read Thomas Becker's nice explanation (or even if you have), be sure to check it out:

C++ Rvalue References Explained

Thomas Becker

1. Introduction
2. Move Semantics
3. Rvalue References
4. Forcing Move Semantics
5. Is an Rvalue Reference an Rvalue?
6. Move Semantics and Compiler Optimizations
7. Perfect Forwarding: The Problem
8. Perfect Forwarding: The Solution
9. Rvalue References and Exceptions
10. The Case of the Implicit Move
11. Acknowledgments and Further Reading

Parameter Types in Constructors -- Scott Meyers

From the keyboard of Scott Meyers:

Parameter Types in Constructors

by Scott Meyers

I recently went through Sumant Tambe's presentation materials from his Silicon Valley Code Camp presentation, "C++11 Idioms."  He argues that an emerging idiom is to pass arguments to constructors by value, because this takes advantage of move opportunities when they are available.

I was surprised to read about this emerging idiom, in part because I had not heard of it (I'm supposed to be clued in about this kind of stuff) and in part because it runs contrary to my own thinking on the subject, which is to use perfect forwarding...

Universal References in C++11 -- Scott Meyers

Recorded live at C++ and Beyond 2012:

Universal References in C++11

Scott Meyers

Given that rvalue references are declared using "&&", it seems reasonable to assume that the presence of "&&" in a type declaration indicates an rvalue reference. That is not the case...

In this article, I describe the two meanings of "&&" in type declarations, explain how to tell them apart, and introduce new terminology that makes it possible to unambiguously communicate which meaning of "&&" is intended. Distinguishing the different meanings is important, because if you think "rvalue reference" whenever you see "&&" in a type declaration, you'll misread a lot of C++11 code...

Poll: Portland attendees and subgroups

If you are planning to attend the Portland meeting, please fill out this brief poll to help us allocate rooms and plan for the week. Thanks!

 

 

Using Strings in C++ Template Metaprograms -- Abel Sinkovics and Dave Abrahams

Fresh off the press at C++ Next:

Using strings in C++ template metaprograms

by Abel Sinkovics and Dave Abrahams

Of all the reasons to love metaprogramming, probably the most compelling is that it lets us embed “little languages” in our programs... Instead of C++ expressions, of course, strings could be used to represent the DSL code snippet in the embedding C++ code. In fact, that’s an approach used by many “traditional” libraries:

auto all_caps = std::regex("[A-Z]+"); // OK

The only problem is, the contents of that string are only known at runtime, which means the language has to be interpreted at runtime, and we lose the benefit of being able to translate the structure into compiled code. The “delayed evaluation” has been delayed too long.

If, however, these strings could be parsed at compile-time, the resulting programs could have optimal performance again...

[more]