For Software Performance, the Way Data is Accessed Matters!

For Software Performance, the Way Data is Accessed Matters!

In our experiments with the memory access pattern, we have seen that good data locality is a key to good software performance. Accessing memory sequentially and splitting the data set into small-sized pieces which are processed individually improves data locality and software speed. In this post, we will present a few techniques to improve the…

The memory subsystem from the viewpoint of software: how memory subsystem affects software performance 2/3

The memory subsystem from the viewpoint of software: how memory subsystem affects software performance 2/3

We continue the investigation from the previous post, trying to measure how the memory subsystem affects software performance. We write small programs (kernels) to quantify the effects of cache line, memory latency, TLB cache, cache conflicts, vectorization and branch prediction.

When vectorization hits the memory wall: investigating the AVX2 memory gather instruction

When vectorization hits the memory wall: investigating the AVX2 memory gather instruction

For all the engineers who like to tinker with software performance, vectorization is the holy grail: if it vectorizes, this means that it runs faster. Unfortunately, many times this is not the case, and the results of forcing vectorization by any means can mean lower performance. This happens when vectorization hits the memory wall: although…