LLVM Clang 12 Merges Support For x86_64 Microarchitecture Levels
phoronix.com
phoronix.com
https://sourceware.org/pipermail/libc-alpha/2020-July/116135...
It’s useful to know where something started, but the original reference was better at explaining the current situation.
I have a netbook bought in 2015 that has an Atom processor. Right now it runs Ubuntu 20.04 LTS. Does this mean that distros will drop support for it?
IMO instead of dropping support, LLVM should get support for fat multi-versioned binaries, providing a graceful fallback if an extension is not available. You don't have to multi-version everything, only the functions which actually do end up getting autovectorized.
Or the other possibility of compiling for all architecture and then selecting this or that function depending on what the current CPU is, or even hotpatching if the security model allows it. I remember either gcc or glibc having some support for one of these.
LLVM supports per-function subtarget attributes, so you can compile individual functions with AVX2 support versus SSE4 support. The clang frontend even has a few different ways of triggering this support, with one method allowing you to specify per-CPU dispatch, and another merely specifying target attributes on a per-function basis.
I don't think any of that would conflict with using bitcode for everything you don't have a hand-optimized machine-specific implementation of.
I could see this happening with WASM once its system interfaces and SIMD intrinsics mature... "write once, run anywhere"?
I mean, how many real world compute farms have exactly one march anyway?
While ARM has ARMv6, v7, v8... Intel has been using specific names: Nehelem, Haswell, and Skylake (not to be confused with Skylake-X).
A numerical naming scheme, of v1 (Core2), v2 (Nehelem), v3 (Haswell), and v4 (Skylake-X) will be easier to remember moving forward.
There are Comet Lake CPUs with no AVX at all: all Pentiums/Celerons.
Every 10th generation Intel CPU onwards, at least on the client side, doesn't support TSX.
Note that the SGX instructions are system only, so the compiler isn't generating them usually. The hardware lock elision instructions in TSX are specifically chosen so that they act as NOPs on processors that don't support TSX.
FMA4 extensions on Bulldozer are no longer supported, so a 2012-era CPU supports FMA4, but 2018-era Zen processors do NOT support FMA4.
Xeon Phi supported a whole slew of AVX512 stuff that no other chip will ever support. Intel experimented with some instructions, and decided against them moving forward.
The point of a "vague" number, like "v3" is just to provide a general idea. Its purposefully vague, because the details are simply too messy to keep track of.
> FMA4 extensions on Bulldozer are no longer supported, so a 2012-era CPU supports FMA4, but 2018-era Zen processors do NOT support FMA4.
I don't see how this is relevant. Isn't this the same problem that v4 supports something that v9 doesn't?