Aussie AI
C++ Optimizers
-
Book Excerpt from "Generative AI in C++"
-
by David Spuler, Ph.D.
C++ Optimizers
Every C++ compiler has optimization built into the code generation phase. Typically, there are ways to specify that a higher degree of code optimization should be performed. Methods to control the settings include:
- Command-line arguments (e.g. “
-O1
” or “/O1
”) - Configuration settings (e.g. Project Settings in the MSVS IDE)
#pragma
preprocessor directives
Take note of the meaning of the optimizer settings.
For example, on MSVS the setting “/O1
” optimizes for memory, not speed!
Also, don't be like me and assume that the defaults are going to be what you want.
Looking at the MSVS IDE optimizer settings in my AUSSIE project file, I found:
- “Optimization” was “disabled” by default.
- “Enable Intrinsic Functions” was “No” by default. Why not?
- “Favor Size or Speed” was “neither” by default. Come on, why is there no “both” option?
- “Inline Function Expansion” was “default” at least.
When to enable the optimizer? Should you run the optimizer at every build? At what level?
Note that your policy should not be to turn up the optimization to maximum level just before you ship your code to users, because your code can change in a very bad way. Don't assume that turning the optimizer mode up to super-crunch is always an easy win, as optimization can trigger latent glitches in your code by reorganizing memory or reordering instructions.
• Next: • Up: Table of Contents |
The new AI programming book by Aussie AI co-founders:
Get your copy from Amazon: Generative AI in C++ |