Set required versions for GROMACS 2022
For GROMACS 2022, specify minimum support versions of dependencies, tools, and interacting software. Document and confirm test coverage.
Remember that they start being relevant to users when we release in 2022.There is a trade-off between what new things we can do (because we support a smaller range of things) vs what things we might require some users to do (because GROMACS no longer builds out of the box for them). Your workload as a GROMACS developer goes up for each extra version we support, even if that only shows up in what you have to do to keep CI happy, or how hard it is for you to get access to others’ feedback because they are thinking about something that is mysteriously broken in some CI combination. Also, versions that may or may not be the bases for forks that support hardware that GROMACS users might have that isn’t already shipping in early 2022 really shouldn’t factor highly.
CMake
We have previously generally adopted the minimum version of the latest Ubuntu LTS 20.04, which is cmake 3.16.3. We decided to adopt that as the minimum. Perhaps some find modules from more recent CMake versions could be back ported if there was enough need for someone to do the work.
Compilers
Minimum supported versions are currently implied by the requirement for C++17 support
gcc
We require 7, no need to change
clang
No need to change
msvc
We require 19.15 (ie Visual Studio 2017), no need to change.
icc
Remove support, Intel's direction seems to be focussed on icpx. Any benefits from better codegen from icc have to be weighed against the problems and workarounds we've introduced to our codebase to keep it happy.
icpx
See below for SYCL
xlc
Not supported because not conformant
pgi
Ignore it, it's basically been rebranded as the Nvidia hpc c++ compiler.
cray
Has no release with C++17 support
CUDA
Currently we require 9.0 (for C++14 compatibility.) For approx CUDA release dates, see https://developer.nvidia.com/cuda-toolkit-archive
- CUDA 10.0 (released Sep 2018) is the first to support graphs.
- CUDA 11.0 (released May 2020) is the first with C++17 support. (Currently gmx host-side code is restricted to C++14, which has caused minor inconveniences and inconsistencies.) It no longer supports the SM 3.0 (ie.) earlier members of the Kepler generation, but the server-grade K20/40/80 hardware still work, albeit their SM versions are deprecated.
- clang officially supports up to cuda 10.1 (though in practice gmx code probably works anyway)
Generally we have supported two major versions at the time of release, so choosing 11.0 as minimum would likely mean we also support 12.0 when GROMACS 2020 is released.
Decision: Move forward to CUDA 11.0 as minimum requirement for the improved C++17 compatibility permitting some simplification of common GPU code sometimes compiled with CUDA.
SYCL
We'll require SYCL2020 and suggest latest available compilers. We'll defer until later in the year any question of minimum required versions for dpcpp/icpx, hipSYCL, etc. These are all changing rapidly so a decision now would be premature.
OpenCL
As OpenCL support is deprecated, the version requirement will not change
MPI
2.0 is suggested at #3591 (closed) (actually 2.0 is already implicitly required by the use of MPI_THREAD_FUNNELED
)
Python interpreter
Python 3.7 is now final. Python 3.6 will receive security fixes only until December of 2021.
The gmxapi package would benefit from an update to the required version immediately (#3716 (closed)). The overall project infrastructure does not have particularly compelling need to update other than, perhaps to reduce CI image size or tested software permutations.
Decision: 3.7 is the minimum required version, but we'll aim to test others
Documentation
Doxygen
Some enthusiasm for updating to e.g. Ubuntu LTS version 18.17. But it would need some volunteers to hack together to fix all the new warnings. That might be easier if we'd already dropped the use of the Doxygen XML output for include sorting and module dependency checking.
Sphinx
No new features are needed. @acmnpv pointed out that the CMake version check is intended only as a minimum version, not a required version. @eirrgang will propose an update to the version check to try to address some spurious errors.
GoogleTest
v1.10.0 is out (and latest) and finally now requires a conformant C++11 compiler. That probably simplifies life for the compiler that compiles GROMACS. Mark will update.
Source code checking and other infrastructure
clang-format (currently 7) and clang-tidy (currently 9) may warrant coordinated clang infrastructure versioning as clangd becomes more useful and widespread. Updating to at least version 11 would help reduce future mismatch between e.g. IDE versions of clangd and our CI infra. The same .clang-format
file can produce different results with different version of the tool.