Skip to content
This repository was archived by the owner on Nov 17, 2023. It is now read-only.
This repository was archived by the owner on Nov 17, 2023. It is now read-only.

[RFC] Raising the toolchain requirements for MXNet 2 #17968

@leezu

Description

@leezu

Description

I propose to raise our toolchain requirements for the MXNet 2 development branch to require at minimum gcc7 or clang6 on Unix systems and MSVC 2019 on Windows system. All 3 have reasonable complete C++17 support and MSVC 2019 fully supports, so that we can adopt C++17 as required language standard. gcc7 and clang6 are available on Ubuntu 18.04 LTS release.

The benefits of adopting a more recent C++ standard should be obvious, giving us access to new features and abstractions that the C++ committee has worked on over the course of 6 years. The benefits of adopting a more recent toolchain should also be obvious, as newer compilers will come with more optimizations as older ones.

There are no downsides for MXNet's users, as we can continue to build binary releases of MXNet on CentOS 6 that should work on any major Linux distribution released after 2004. This is possible based on the great work by RedHat to bring new C++ toolchains to old platforms [1].

With respect to Windows: MSVC 2019 is the first MSVC that uses an 64bit toolchain by default. You may have noticed that our Windows CI was recently blocked due to the use of a 32bit toolchain and updating it to MSVC 2019 was chosen as remedy (attempts to use the 64bit version of the 2017 toolchain failed). It also appears that MSVC 2019 16.5 is the first release to make proper use of advanced instruction sets, such as AVX2 [2].

References

1: https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/
2: https://devblogs.microsoft.com/cppblog/avx2-floating-point-improvements-in-visual-studio-2019-version-16-5/

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions