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 MultiFloat and MultiDouble 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 here (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.