This article addresses single-core performance optimizations that enable an efficient usage of the memory available in the hardware. We use Codee to pinpoint opportunities in the code to benefit from loop interchange, which enables sequential memory accesses and favors vectorization. Why is Loop Interchange important? Loop interchange is a performance optimization technique that is used […]
Codee
Codee joins the Intel® oneAPI for Startups Program
We are pleased to announce that Codee is now member of the Intel oneAPI for Startups Program, designed to assist startups to accelerate their growth through access to cutting-edge technology and deep expertise from Intel engineers and industry experts, Intel go-to-market and business support, as well as to provide connections with industry ecosystem partners and […]
Codee 1.2 released
We are excited to announce the release of Codee 1.2, which further improves the first static code analyzer specifically designed to boost the performance of C/C++ applications. The key highlight of this version is the new entry-level performance optimization report, which has been designed for the performance optimization roadmap. It reports the total number of […]
Codee 1.0 launched!
We are thrilled to announce the official launch of Codee 1.0, the first static code analyzer specializing in performance. During the last 2 years, over 200 early adopters have helped us shape Codee thanks to their invaluable feedback through the Early Access Program. Codee as an innovation company provides a revolutionary approach: Codee, the first […]
How to get started with Codee: Canny example
Last updated on September 15, 2022 In this blog post, we show how to get started with Codee using the Canny edge detection image processing algorithm. You will see how it supports the performance optimization roadmap by providing human-readable actionable items to enable the optimization of sequential code as well as the exploitation of the […]
Flexibility and Performance: turbocharging loop unswitching
In the previous post we talked about loop unswitching: a technique that the compilers use to make loops faster. Loop unswitching consists of detecting conditional statements whose condition never changes during the execution of the loop (loop invariant conditions) and then moving the condition outside of the loop. Loop unswitching opens the door for other […]
Flexibility and performance: introduction to loop unswitching
Flexibility is very important in the development of software. A great deal of research and education is invested into creating flexible software. However, flexibility and performance don’t often come hand in hand, as most developers have already witnessed sometime in their careers. One of the ways to achieve flexibility is to parametrize the behavior of […]
Is your algorithm running at peak performance? The roofline model
There are worlds where performance matters. For example HPC world: faster software means less wait time for the scientists. Embedded world: faster software means we can use cheaper silicon to build our product. Game world: faster software means that our game will run on slower CPUs, thus making our game more interesting to people with […]
Case Study: How we made the Canny edge detector run faster? (part 2)
In the previous post we talked about the performance improvement we obtained for the Canny edge detection algorithm. Most of the changes we did there were focused on hot loops: making memory accesses sequential and making the loops longer, which in turn allowed the compiler to autovectorize them. This made our program run significantly faster […]
A touch of parallelism: example of NPB CG Benchmark
The ultimate goal of the Codee software suite is to help users achieve the peak performance of their software. One of the ways to do it is with a touch of parallelism. This post will talk about the NPB CG benchmark, a popular benchmark for comparing supercomputers, developed by NASA. We will talk about how […]