(link to https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX2) |
(→Current status: noting fesco rejection, for clarity) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 25: | Line 25: | ||
* Targeted release: [[Releases/32 | Fedora 32 ]] | * Targeted release: [[Releases/32 | Fedora 32 ]] | ||
* Last updated: <!-- this is an automatic macro — you don't need to change this line --> {{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}} | * Last updated: <!-- this is an automatic macro — you don't need to change this line --> {{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}} | ||
* Rejected by FESCO https://pagure.io/fesco/issue/2198 | |||
* Superceded by [[Changes/Additional_buildroot_to_test_x86-64_micro-architecture_update]] | |||
<!-- After the change proposal is accepted by FESCo, tracking bug is created in Bugzilla and linked to this page | <!-- After the change proposal is accepted by FESCo, tracking bug is created in Bugzilla and linked to this page | ||
Bugzilla states meaning as usual: | Bugzilla states meaning as usual: | ||
Line 83: | Line 85: | ||
It is possible to not implement this change, or implement a smaller subset of it (adopting the CMPXCHG16B instruction only, for example). | It is possible to not implement this change, or implement a smaller subset of it (adopting the CMPXCHG16B instruction only, for example). | ||
* Contingency mechanism: Mass rebuild with different/previous compiler | * Contingency mechanism: Mass rebuild with different/previous compiler flags. | ||
* Contingency deadline: Final mass rebuild. | * Contingency deadline: Final mass rebuild. | ||
* Blocks release? No. | * Blocks release? No. | ||
Line 94: | Line 96: | ||
Release notes must mention how users can determine whether their system supports AVX2 prior to upgrading, for example by running <code>grep avx2 /proc/cpuinfo</code>. | Release notes must mention how users can determine whether their system supports AVX2 prior to upgrading, for example by running <code>grep avx2 /proc/cpuinfo</code>. | ||
[[Category: | [[Category:ChangePageIncomplete]] | ||
<!-- When your change proposal page is completed and ready for review and announcement --> | <!-- When your change proposal page is completed and ready for review and announcement --> | ||
<!-- remove Category:ChangePageIncomplete and change it to Category:ChangeReadyForWrangler --> | <!-- remove Category:ChangePageIncomplete and change it to Category:ChangeReadyForWrangler --> |
Latest revision as of 20:36, 6 February 2020
x86-64 micro-architecture update
Summary
Fedora currently uses the original K8 micro-architecture (without 3DNow! and other AMD-specific parts) as the baseline for its x86_64
architecture. This baseline dates back to 2003 and has not been updated since. As a result, performance of Fedora is not as good as it could be on current CPUs.
This change to update the micro-architecture level for the architecture to something more recent.
Owner
- Name: Florian Weimer
- Email: fweimer@redhat.com
Current status
- Targeted release: Fedora 32
- Last updated: 2020-02-06
- Rejected by FESCO https://pagure.io/fesco/issue/2198
- Superceded by Changes/Additional_buildroot_to_test_x86-64_micro-architecture_update
- Tracker bug: <will be assigned by the Wrangler>
- Release notes tracker: <will be assigned by the Wrangler>
Detailed Description
After preliminary discussions with CPU vendors, we propose AVX2 as the new baseline. AVX2 support was introduced into CPUs from 2013 to 2015. See 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.
A test rebuild of a distribution largely based on Fedora 28 showed that there is only a small number of build failures due to the baseline switch. Very few packages are confused about the availability of the CMPXCHG16B instruction, leading to linking failures related to -latomic
, and there are some hard-coded floating point results that could change due to vectorization. (The latter is within bounds of the usual cross-architecture variation for such tests.)
Benefit to Fedora
Fedora will use current CPUs more efficiently, increasing performance and reducing power consumption.
Moreover, when Fedora is advertised as a distribution by a compute service provider, users can be certain that their AVX2-optimized software will run in this environment.
Scope
- Proposal owners: Update the
gcc
andredhat-rpm-config
package to implement the new compiler flags. It is expected that the new baseline will be implemented in a new GCC-march=
option for convenience.
- Other developers: Other developers may have to adjust test suites which expect exact floating point results, and correct linking with
libatomic
. They will also have to upgrade their x86-64 machines to something that can execute AVX2 instructions.
- Release engineering: #8513
- All Fedora builders need to be AVX2-capable.
- Infrastructure ticket: #7968
- Policies and guidelines: No guidelines need to be changed.
- Trademark approval: N/A (not needed for this Change)
Upgrade/compatibility impact
Fedora installations on systems with CPUs which are not able to execute AVX2 instructions will not be able to upgrade.
How To Test
General system testing will provide test coverage for this change.
User Experience
User should observe improved performance and, likely, battery life. Developers will benefit from the knowledge that code with AVX2 optimizations will run wherever Fedora runs.
Dependencies
There are no direct dependencies on this change at this time.
Contingency Plan
It is possible to not implement this change, or implement a smaller subset of it (adopting the CMPXCHG16B instruction only, for example).
- Contingency mechanism: Mass rebuild with different/previous compiler flags.
- Contingency deadline: Final mass rebuild.
- Blocks release? No.
- Blocks product? No.
Documentation
The new micro-architecture baseline and the resulting requirements need to be documented.
Release Notes
Release notes must mention how users can determine whether their system supports AVX2 prior to upgrading, for example by running grep avx2 /proc/cpuinfo
.