On Mon, Jul 22, 2019 at 11:52 AM Ben Cotton <bcotton@redhat.com> wrote:
https://fedoraproject.org/wiki/Changes/x86-64_micro-architecture_update

== Summary ==

After preliminary discussions with CPU vendors, we propose AVX2 as the
new baseline.  AVX2 support was introduced into CPUs from 2013 to
2015. See [https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX2
CPUs with AVX2].

Along with AVX2, it makes sense to enable certain other CPU features
which are not strictly implied by AVX2, such as CMPXCHG16B, FMA, and
earlier vector extensions such as SSE 4.2.  Details are still being
worked out.


In the interest of a productive discussion, could we maybe focus on what the benefits are, both of changing the baseline in general and of enabling any particular features? As I see it, there are a few classes of relevant features:

Features like SSE2: enabling SSE2 as the basic floating point mechanism changes the ABI drastically.  But x86_64 already requires SSE2, so this is irrelevant.

Things like SSSE3, SSE3, SSE4, AVX1, AVX2, FMA, etc: for the most part, these accelerate existing algorithms.  I'm sure that someone somewhere has written an algorithm that requires FMA for enhanced precision, but otherwise pretty much any code that benefits from any of these features would work just fine, if slower, without the features.

Things like CMPXCHG16B that change the set of things that can be done on the CPU.  I could easily imagine programs that use algorithms that fundamentally depend on CMPXCHG16B.  There is no drop-in replacement.

Things like FSGSBASE that change the way that software interacts with the kernel.  Don't even get me started on FSGSBASE on Linux.

So I could see a concrete benefit to Fedora from requiring CMPXCHG16B.  If FSGSBASE were actually supported and widely used, I could see that, too, but FSGSBASE is not a credible requirement for Fedora since IIRC it's not supported on Sandy Bridge.  Even Intel seems to consider Sandy Bridge to be an important CPU to support.

As for the vector features, they're always a moving target.  Even if Fedora did require AVX2, performance would be left on the table by not using AVX-512 where avaiable.  (And AVX2 isn't such a great thing anyway given certain microarchitectures' latency and power issues.)

I think that, for vector extensions, Fedora shouldn't require anything beyond SSE2 for basic functionality.  Instead, Fedora should figure out where there are material benefits to using them and find ways to make it easier for packagers to make them available.  Ideally this would all be figured out at runtime, but install-time choices could make sense, too.