Part 2: What next?
You have now begun to learn how to vectorise your code. If you want to learn more about vector intrinsics, then take a look at the Intel Intrinsics Guide. This is an excellent interactive resource that describes all of the available vector intrinsics, and which version of SSE, AVX or AVX-512 is required.
If you want to learn more about using thin wrapper classes around intrinsics
to write portable code, then take a look at the
classes that are part of Sire. These are
used in Sire to write efficient, performance- and code-portable
coulomb and LJ energy evaluations for Monte Carlo biomolecular simulations.
An example of their use can be seen
(look around line 238 in the
If you want to learn more about omp simd, then check out this article, which I found to be a really useful resource when putting this workshop together.
Finally, be aware that vectorisation is important for other (i.e. non-Intel) architectues. For example, ARM processors have Scalable Vector Extensions (SVE), which is the next generation of their previous NEON vector instructions.