From 09fa9cdaaee5649ef914bec19cae428e87cb3f8e Mon Sep 17 00:00:00 2001 From: Brian Van Essen Date: Mon, 16 Aug 2021 00:47:27 -0700 Subject: C++17 support for LBANN and HIP (#25406) * Added logic to explicitly pass the c++17 language flags to the HIP/ROCm software stack to ensure that HIP complies with the C++17 requirements. --- var/spack/repos/builtin/packages/aluminum/package.py | 12 ++++++++---- var/spack/repos/builtin/packages/dihydrogen/package.py | 3 ++- var/spack/repos/builtin/packages/hydrogen/package.py | 4 +++- var/spack/repos/builtin/packages/lbann/package.py | 1 + 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/var/spack/repos/builtin/packages/aluminum/package.py b/var/spack/repos/builtin/packages/aluminum/package.py index ea8d9e8317..4bf96ebc80 100644 --- a/var/spack/repos/builtin/packages/aluminum/package.py +++ b/var/spack/repos/builtin/packages/aluminum/package.py @@ -60,13 +60,16 @@ class Aluminum(CMakePackage, CudaPackage, ROCmPackage): def cmake_args(self): spec = self.spec args = [ - '-DCMAKE_CXX_STANDARD=14', + '-DCMAKE_CXX_STANDARD:STRING=17', '-DALUMINUM_ENABLE_CUDA:BOOL=%s' % ('+cuda' in spec), '-DALUMINUM_ENABLE_NCCL:BOOL=%s' % ('+nccl' in spec or '+rccl' in spec), '-DALUMINUM_ENABLE_ROCM:BOOL=%s' % ('+rocm' in spec)] if '+cuda' in spec: - args.append('-DCMAKE_CUDA_STANDARD=14') + if spec.satisfies('^cuda@11.0:'): + args.append('-DCMAKE_CUDA_STANDARD=17') + else: + args.append('-DCMAKE_CUDA_STANDARD=14') archs = spec.variants['cuda_arch'].value if archs != 'none': arch_str = ";".join(archs) @@ -98,13 +101,14 @@ class Aluminum(CMakePackage, CudaPackage, ROCmPackage): if '+rocm' in spec: args.extend([ '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), - '-DHIP_CXX_COMPILER={0}'.format(self.spec['hip'].hipcc)]) + '-DHIP_CXX_COMPILER={0}'.format(self.spec['hip'].hipcc), + '-DCMAKE_CXX_FLAGS=-std=c++17']) archs = self.spec.variants['amdgpu_target'].value if archs != 'none': arch_str = ",".join(archs) args.append( '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}' - ' -g -fsized-deallocation -fPIC'.format(arch_str) + ' -g -fsized-deallocation -fPIC -std=c++17'.format(arch_str) ) return args diff --git a/var/spack/repos/builtin/packages/dihydrogen/package.py b/var/spack/repos/builtin/packages/dihydrogen/package.py index 338389fee6..82844e8c4e 100644 --- a/var/spack/repos/builtin/packages/dihydrogen/package.py +++ b/var/spack/repos/builtin/packages/dihydrogen/package.py @@ -187,6 +187,7 @@ class Dihydrogen(CMakePackage, CudaPackage, ROCmPackage): if '+rocm' in spec: args.extend([ + '-DCMAKE_CXX_FLAGS=-std=c++17', '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), '-DHIP_CXX_COMPILER={0}'.format(self.spec['hip'].hipcc)]) archs = self.spec.variants['amdgpu_target'].value @@ -194,7 +195,7 @@ class Dihydrogen(CMakePackage, CudaPackage, ROCmPackage): arch_str = ",".join(archs) args.append( '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}' - ' -g -fsized-deallocation -fPIC'.format(arch_str) + ' -g -fsized-deallocation -fPIC -std=c++17'.format(arch_str) ) return args diff --git a/var/spack/repos/builtin/packages/hydrogen/package.py b/var/spack/repos/builtin/packages/hydrogen/package.py index 597624f67e..f31213d124 100644 --- a/var/spack/repos/builtin/packages/hydrogen/package.py +++ b/var/spack/repos/builtin/packages/hydrogen/package.py @@ -172,6 +172,7 @@ class Hydrogen(CMakePackage, CudaPackage, ROCmPackage): if '+rocm' in spec: args.extend([ + '-DCMAKE_CXX_FLAGS=-std=c++17', '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), '-DHIP_CXX_COMPILER={0}'.format(self.spec['hip'].hipcc)]) archs = self.spec.variants['amdgpu_target'].value @@ -180,7 +181,8 @@ class Hydrogen(CMakePackage, CudaPackage, ROCmPackage): cxxflags_str = " ".join(self.spec.compiler_flags['cxxflags']) args.append( '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}' - ' -g -fsized-deallocation -fPIC {1}'.format(arch_str, cxxflags_str) + ' -g -fsized-deallocation -fPIC {1}' + ' -std=c++17'.format(arch_str, cxxflags_str) ) # Add support for OS X to find OpenMP (LLVM installed via brew) diff --git a/var/spack/repos/builtin/packages/lbann/package.py b/var/spack/repos/builtin/packages/lbann/package.py index e8c37790e7..43f83812e1 100644 --- a/var/spack/repos/builtin/packages/lbann/package.py +++ b/var/spack/repos/builtin/packages/lbann/package.py @@ -249,6 +249,7 @@ class Lbann(CMakePackage, CudaPackage, ROCmPackage): # Environment variables cppflags = [] cppflags.append('-DLBANN_SET_EL_RNG') + cppflags.append('-std=c++17') args = [] args.extend([ '-DCMAKE_CXX_FLAGS=%s' % ' '.join(cppflags), -- cgit v1.2.3-70-g09d2