What is developer knowledge?

Often, software developers have deeper insights into their software’s behavior and its inputs than the compiler does. This knowledge represents a valuable optimization opportunity that can significantly improve performance when properly communicated to the compiler as boundary information.

The compiler’s challenge

When a loop’s size is determined at runtime, the compiler faces a dilemma:

  • It must generate code that works correctly for any possible input size
  • It cannot make assumptions that might enable more aggressive optimizations
  • It must take a conservative approach to ensure correctness across all scenarios

The developer’s advantage

As a developer, you often know more about your application’s runtime characteristics than the compiler can infer, such as:

  • Loop sizes that always follow specific patterns (like being multiples of 4, 8, or 16)
  • Input constraints that are enforced elsewhere in your application
  • Data alignment guarantees that enable vectorization opportunities

In this Learning Path, you’ll learn how to explicitly communicate this valuable context to the compiler, enabling it to generate more efficient code.

Environment setup

You can use any Arm Linux system to run the example application and learn about loop optimization. The only requirement is to install the g++ compiler.

Installing the compiler

If you are running Ubuntu or another Debian-based Linux distribution, you can use the commands below to install the compiler:

    

        
        
sudo apt update
sudo apt install g++ -y

    

For other Linux distributions, use the appropriate package manager to install g++.

Compiler version

This learning path uses standard C++ features and optimization techniques that work with any recent C++ compiler.

You can check your version using:

    

        
        
g++ --version

    

Continue to the next section to learn about an example application which demonstrates how to use developer knowledge for loop boundary information.

Back
Next