I would like to be proficient at identifying places for and applying SIMD in my C/C++ programs. The domain is primarily centered around graphics, but I am open to resources from other domains too.<p>Ideally what I would like is some sort of progression for problems that may benefit from application of SIMD. From reading case studies online, it seems like there's lots of little tricks and stuff, almost like there's a different way of thinking about types, values and operations on them that you have to know.
I would first learn a couple of Array Programming Languages, first a mainstream one, e.g. Julia/R/Matlab/Octave, and then one from the APL-family (APL/J/K/Q/etc.)<p>Lear how to write algorithms using vectorization only (without if-s and for-s).<p>Look into OpenCL / CUDA programming models.<p>Then it will be much easier to learn native SIMD programming for specific ISAs.<p>---<p><a href="https://en.wikipedia.org/wiki/Array_programming" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Array_programming</a><p><a href="https://en.wikipedia.org/wiki/Category:Array_programming_languages" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Category:Array_programming_lan...</a>
get a profiler, pick an algorithm, and parallellize it using simd<p>then compare before / after using the profiler<p>learn about the intrinsics as you work on it