https://www.anandtech.com/show/11928/intels-document-points-...
https://www.anandtech.com/show/11928/intels-document-points-...
The Users who really need the feature are likely upgrading to AVX-512 computers already. IE: Mac Pro. So adoption is not as bad as my hyperbole above. But its still going to be a while before we can assume AVX512 support on machines.
Hell, with so many people running Sandy Bridge (i7-2xxx series), you can't even assume AVX2 support today.
Assuming AVX512 F, CD, VL, DQ, and BW (the expected AVX512 instructions in CannonLake):
* AVX512F -- "Standard" 512-bit arithmetic already has major improvements, above and beyond the 256bit -> 512bit upgrade. AVX512 has 32-registers per core (when AVX2 and earlier only have 16). The new set of opmask instructions also allow for way more code to turn into "branch-free" code which is friendly for pipelines. This is already a major step forward alone with huge implications for multimedia code.
* AVX512-CD: Conflict Detection. These instructions allow auto-vectorizers to "resolve loop conflicts" and auto-vectorize more code.
* VL, DQ -- Extend AVX512 to Bytes, Shorts, Longs, Long Longs.
* BW -- Extend AVX512 to operate on only 256-bit and 128-bits at a time.
--------------------
I'm certain that some code, which could not be vectorized in AVX2 (or lower), will be vectorized with AVX512. Maybe even automatically as compiler writers implement high-level features / auto-vectorizers.
DQ - Extend AVX512 to Longs, Long Longs. (double word and quadword extension)
BW - Extend AVX512 to Bytes, Shorts. (byte and word extension)
It'd be so sweet if multi-versioning became well supported across all major compilers (including MSVC)
But other AVX512 instructions don't seem very easy for compilers to automatically apply. In particular: Scatter/Gather instructions have implications on the most-efficient way to lay out data in memory. I'm sure an auto-vectorizer can take advantage of it slightly, but it'd take an AVX512 expert to determine the best memory-layout for various data-structures in this new AVX512 world.
Although I guess an auto-vectorizer could use those instructions to handle more cases... smart programmers would still have to tune their code (or really: their data-structures) to be done in such a way that the auto-vectorizer / optimizing compilers can utilize these instructions.