hip support for umpire, chai, raja, camp (#19715)
* create HipPackage base class and do some refactoring * comments and added conflict to raja for openmp with hip
This commit is contained in:
		 Danny Taller
					Danny Taller
				
			
				
					committed by
					
						 Tamara Dahlgren
						Tamara Dahlgren
					
				
			
			
				
	
			
			
			 Tamara Dahlgren
						Tamara Dahlgren
					
				
			
						parent
						
							d6bd95db2e
						
					
				
				
					commit
					c42ce439e4
				
			
							
								
								
									
										138
									
								
								lib/spack/spack/build_systems/hip.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								lib/spack/spack/build_systems/hip.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | |||||||
|  | # Copyright 2013-2020 Lawrence Livermore National Security, LLC and other | ||||||
|  | # Spack Project Developers. See the top-level COPYRIGHT file for details. | ||||||
|  | # | ||||||
|  | # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||||
|  | 
 | ||||||
|  | # Troubleshooting advice for +hip builds: | ||||||
|  | # | ||||||
|  | # 1. When building with clang, go your compilers.yaml, | ||||||
|  | #    add an entry for the amd version of clang, as below. | ||||||
|  | #    This will ensure that your entire package is compiled/linked | ||||||
|  | #    with the same compiler version. If you use a different version of | ||||||
|  | #    clang which is linked against a different version of the gcc library, | ||||||
|  | #    you will get errors along the lines of: | ||||||
|  | #    undefined reference to | ||||||
|  | #       `std::__throw_out_of_range_fmt(char const*, ...)@@GLIBCXX_3.4.20' | ||||||
|  | #    which is indicative of a mismatch in standard library versions. | ||||||
|  | # | ||||||
|  | #    in compilers.yaml | ||||||
|  | #    - compiler: | ||||||
|  | #        spec: clang@amd | ||||||
|  | #        paths: | ||||||
|  | #          cc: /opt/rocm/llvm/bin/clang | ||||||
|  | #          cxx: /opt/rocm/llvm/bin/clang++ | ||||||
|  | #          f77: | ||||||
|  | #          fc: | ||||||
|  | #        flags: {} | ||||||
|  | #        operating_system: rhel7 | ||||||
|  | #        target: x86_64 | ||||||
|  | #        modules: [] | ||||||
|  | #        environment: {} | ||||||
|  | #        extra_rpaths: [] | ||||||
|  | # | ||||||
|  | # | ||||||
|  | # 2. hip and its dependencies are currently NOT picked up by spack | ||||||
|  | #    automatically, and should therefore be added to packages.yaml by hand: | ||||||
|  | # | ||||||
|  | #    in packages.yaml: | ||||||
|  | #    hip: | ||||||
|  | #      externals: | ||||||
|  | #      - spec: hip@3.8.20371-d1886b0b | ||||||
|  | #        prefix: /opt/rocm/hip | ||||||
|  | #        extra_attributes: | ||||||
|  | #          compilers: | ||||||
|  | #            c: /opt/rocm/llvm/bin/clang++ | ||||||
|  | #            c++: /opt/rocm/llvm/bin/clang++ | ||||||
|  | #            hip: /opt/rocm/hip/bin/hipcc | ||||||
|  | #      buildable: false | ||||||
|  | #    hsa-rocr-dev: | ||||||
|  | #      externals: | ||||||
|  | #      - spec: hsa-rocr-dev | ||||||
|  | #        prefix: /opt/rocm | ||||||
|  | #        extra_attributes: | ||||||
|  | #          compilers: | ||||||
|  | #            c: /opt/rocm/llvm/bin/clang++ | ||||||
|  | #            cxx: /opt/rocm/llvm/bin/clang++ | ||||||
|  | #      buildable: false | ||||||
|  | #    llvm-amdgpu: | ||||||
|  | #      externals: | ||||||
|  | #      - spec: llvm-amdgpu | ||||||
|  | #        prefix: /opt/rocm/llvm | ||||||
|  | #        extra_attributes: | ||||||
|  | #          compilers: | ||||||
|  | #            c: /opt/rocm/llvm/bin/clang++ | ||||||
|  | #            cxx: /opt/rocm/llvm/bin/clang++ | ||||||
|  | #      buildable: false | ||||||
|  | # | ||||||
|  | # 3. In part 2, DO NOT list the path to hsa as /opt/rocm/hsa ! You want spack | ||||||
|  | #    to find hsa in /opt/rocm/include/hsa/hsa.h . The directory of | ||||||
|  | #    /opt/rocm/hsa also has an hsa.h file, but it won't be found because spack | ||||||
|  | #    does not like its directory structure. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | from spack.package import PackageBase | ||||||
|  | from spack.directives import depends_on, variant, conflicts | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class HipPackage(PackageBase): | ||||||
|  |     """Auxiliary class which contains HIP variant, dependencies and conflicts | ||||||
|  |     and is meant to unify and facilitate its usage. Closely mimics CudaPackage. | ||||||
|  | 
 | ||||||
|  |     Maintainers: dtaller | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     # https://llvm.org/docs/AMDGPUUsage.html | ||||||
|  |     # Possible architectures | ||||||
|  |     amdgpu_targets = ( | ||||||
|  |         'gfx701', 'gfx801', 'gfx802', 'gfx803', | ||||||
|  |         'gfx900', 'gfx906', 'gfx908', 'gfx1010', | ||||||
|  |         'gfx1011', 'gfx1012', 'none' | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     variant('hip', default=False, description='Enable HIP support') | ||||||
|  | 
 | ||||||
|  |     # possible amd gpu targets for hip builds | ||||||
|  |     variant('amdgpu_target', default='none', values=amdgpu_targets) | ||||||
|  | 
 | ||||||
|  |     depends_on('llvm-amdgpu', when='+hip') | ||||||
|  |     depends_on('hsa-rocr-dev', when='+hip') | ||||||
|  |     depends_on('hip', when='+hip') | ||||||
|  | 
 | ||||||
|  |     # need amd gpu type for hip builds | ||||||
|  |     conflicts('amdgpu_target=none', when='+hip') | ||||||
|  | 
 | ||||||
|  |     # Make sure non-'none' amdgpu_targets cannot be used without +hip | ||||||
|  |     for value in amdgpu_targets[:-1]: | ||||||
|  |         conflicts('~hip', when='amdgpu_target=' + value) | ||||||
|  | 
 | ||||||
|  |     # https://github.com/ROCm-Developer-Tools/HIP/blob/master/bin/hipcc | ||||||
|  |     # It seems that hip-clang does not (yet?) accept this flag, in which case | ||||||
|  |     # we will still need to set the HCC_AMDGPU_TARGET environment flag in the | ||||||
|  |     # hip package file. But I will leave this here for future development. | ||||||
|  |     @staticmethod | ||||||
|  |     def hip_flags(amdgpu_target): | ||||||
|  |         return '--amdgpu-target={0}'.format(amdgpu_target) | ||||||
|  | 
 | ||||||
|  |     # https://llvm.org/docs/AMDGPUUsage.html | ||||||
|  |     # Possible architectures (not including 'none' option) | ||||||
|  |     @staticmethod | ||||||
|  |     def amd_gputargets_list(): | ||||||
|  |         return ( | ||||||
|  |             'gfx701', 'gfx801', 'gfx802', 'gfx803', | ||||||
|  |             'gfx900', 'gfx906', 'gfx908', 'gfx1010', | ||||||
|  |             'gfx1011', 'gfx1012' | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |     # HIP version vs Architecture | ||||||
|  | 
 | ||||||
|  |     # TODO: add a bunch of lines like: | ||||||
|  |     # depends_on('hip@:6.0', when='amdgpu_target=gfx701') | ||||||
|  |     # to indicate minimum version for each architecture. | ||||||
|  | 
 | ||||||
|  |     # Compiler conflicts | ||||||
|  | 
 | ||||||
|  |     # TODO: add conflicts statements along the lines of | ||||||
|  |     # arch_platform = ' target=x86_64: platform=linux' | ||||||
|  |     # conflicts('%gcc@5:', when='+cuda ^cuda@:7.5' + arch_platform) | ||||||
|  |     # conflicts('platform=darwin', when='+cuda ^cuda@11.0.2:') | ||||||
|  |     # for hip-related limitations. | ||||||
| @@ -20,6 +20,7 @@ | |||||||
| from spack.build_systems.autotools import AutotoolsPackage | from spack.build_systems.autotools import AutotoolsPackage | ||||||
| from spack.build_systems.cmake import CMakePackage | from spack.build_systems.cmake import CMakePackage | ||||||
| from spack.build_systems.cuda import CudaPackage | from spack.build_systems.cuda import CudaPackage | ||||||
|  | from spack.build_systems.hip import HipPackage | ||||||
| from spack.build_systems.qmake import QMakePackage | from spack.build_systems.qmake import QMakePackage | ||||||
| from spack.build_systems.maven import MavenPackage | from spack.build_systems.maven import MavenPackage | ||||||
| from spack.build_systems.scons import SConsPackage | from spack.build_systems.scons import SConsPackage | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| from spack import * | from spack import * | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Camp(CMakePackage, CudaPackage): | class Camp(CMakePackage, CudaPackage, HipPackage): | ||||||
|     """ |     """ | ||||||
|     Compiler agnostic metaprogramming library providing concepts, |     Compiler agnostic metaprogramming library providing concepts, | ||||||
|     type operations and tuples for C++ and cuda |     type operations and tuples for C++ and cuda | ||||||
| @@ -22,27 +22,6 @@ class Camp(CMakePackage, CudaPackage): | |||||||
|     depends_on('cmake@3.8:', type='build') |     depends_on('cmake@3.8:', type='build') | ||||||
|     depends_on('cmake@3.9:', type='build', when="+cuda") |     depends_on('cmake@3.9:', type='build', when="+cuda") | ||||||
| 
 | 
 | ||||||
|     variant('hip', default=False, description='Enable HIP support') |  | ||||||
| 
 |  | ||||||
|     # possible amd gpu targets for hip builds |  | ||||||
|     # TODO: we should add a hip build system description equivalent to |  | ||||||
|     # lib/spack/spack/build_systems/cuda.py, where possible hip amd gpu |  | ||||||
|     # architectures are defined in a similar way as for cuda gpu |  | ||||||
|     # architectures. In the meantime, require users to define |  | ||||||
|     # amd gpu type for hip builds with a variant here. |  | ||||||
|     amdgpu_targets = ( |  | ||||||
|         'gfx701', 'gfx801', 'gfx802', 'gfx803', |  | ||||||
|         'gfx900', 'gfx906', 'gfx908', 'gfx1010', |  | ||||||
|         'gfx1011', 'gfx1012', 'none' |  | ||||||
|     ) |  | ||||||
|     variant('amdgpu_target', default='none', values=amdgpu_targets) |  | ||||||
| 
 |  | ||||||
|     depends_on('llvm-amdgpu', when='+hip') |  | ||||||
|     depends_on('hip', when='+hip') |  | ||||||
| 
 |  | ||||||
|     # need amd gpu type for hip builds |  | ||||||
|     conflicts('amdgpu_target=none', when='+hip') |  | ||||||
| 
 |  | ||||||
|     def cmake_args(self): |     def cmake_args(self): | ||||||
|         spec = self.spec |         spec = self.spec | ||||||
| 
 | 
 | ||||||
| @@ -66,7 +45,7 @@ def cmake_args(self): | |||||||
|             options.extend([ |             options.extend([ | ||||||
|                 '-DENABLE_HIP=ON', |                 '-DENABLE_HIP=ON', | ||||||
|                 '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), |                 '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), | ||||||
|                 '-DHIP_HCC_FLAGS=--amdgpu-target={0}'.format(arch)]) |                 '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) | ||||||
|         else: |         else: | ||||||
|             options.append('-DENABLE_HIP=OFF') |             options.append('-DENABLE_HIP=OFF') | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ | |||||||
| from spack import * | from spack import * | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Chai(CMakePackage, CudaPackage): | class Chai(CMakePackage, CudaPackage, HipPackage): | ||||||
|     """ |     """ | ||||||
|     Copy-hiding array interface for data migration between memory spaces |     Copy-hiding array interface for data migration between memory spaces | ||||||
|     """ |     """ | ||||||
| @@ -36,6 +36,15 @@ class Chai(CMakePackage, CudaPackage): | |||||||
|     depends_on('umpire+cuda', when="+cuda") |     depends_on('umpire+cuda', when="+cuda") | ||||||
|     depends_on('raja+cuda', when="+raja+cuda") |     depends_on('raja+cuda', when="+raja+cuda") | ||||||
| 
 | 
 | ||||||
|  |     # variants +hip and amdgpu_targets are not automatically passed to | ||||||
|  |     # dependencies, so do it manually. | ||||||
|  |     amdgpu_targets = HipPackage.amd_gputargets_list() | ||||||
|  |     depends_on('umpire+hip', when='+hip') | ||||||
|  |     depends_on('raja+hip', when="+raja+hip") | ||||||
|  |     for val in amdgpu_targets: | ||||||
|  |         depends_on('umpire amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) | ||||||
|  |         depends_on('raja amdgpu_target=%s' % val, when='+raja amdgpu_target=%s' % val) | ||||||
|  | 
 | ||||||
|     def cmake_args(self): |     def cmake_args(self): | ||||||
|         spec = self.spec |         spec = self.spec | ||||||
| 
 | 
 | ||||||
| @@ -54,6 +63,15 @@ def cmake_args(self): | |||||||
|         else: |         else: | ||||||
|             options.append('-DENABLE_CUDA=OFF') |             options.append('-DENABLE_CUDA=OFF') | ||||||
| 
 | 
 | ||||||
|  |         if '+hip' in spec: | ||||||
|  |             arch = self.spec.variants['amdgpu_target'].value | ||||||
|  |             options.extend([ | ||||||
|  |                 '-DENABLE_HIP=ON', | ||||||
|  |                 '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), | ||||||
|  |                 '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) | ||||||
|  |         else: | ||||||
|  |             options.append('-DENABLE_HIP=OFF') | ||||||
|  | 
 | ||||||
|         if '+raja' in spec: |         if '+raja' in spec: | ||||||
|             options.extend(['-DENABLE_RAJA_PLUGIN=ON', |             options.extend(['-DENABLE_RAJA_PLUGIN=ON', | ||||||
|                             '-DRAJA_DIR=' + spec['raja'].prefix]) |                             '-DRAJA_DIR=' + spec['raja'].prefix]) | ||||||
| @@ -64,6 +82,13 @@ def cmake_args(self): | |||||||
|         options.append('-DENABLE_TESTS={0}'.format( |         options.append('-DENABLE_TESTS={0}'.format( | ||||||
|             'ON' if self.run_tests else 'OFF')) |             'ON' if self.run_tests else 'OFF')) | ||||||
| 
 | 
 | ||||||
|  |         # give clear error for conflict between self.run_tests and | ||||||
|  |         # benchmarks variant. | ||||||
|  |         if not self.run_tests and '+benchmarks' in spec: | ||||||
|  |             raise InstallError( | ||||||
|  |                 'ENABLE_BENCHMARKS requires ENABLE_TESTS to be ON' | ||||||
|  |             ) | ||||||
|  | 
 | ||||||
|         options.append('-DENABLE_BENCHMARKS={0}'.format( |         options.append('-DENABLE_BENCHMARKS={0}'.format( | ||||||
|             'ON' if '+benchmarks' in spec else 'OFF')) |             'ON' if '+benchmarks' in spec else 'OFF')) | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -50,17 +50,25 @@ class Hip(CMakePackage): | |||||||
|     patch('0002-Fix-detection-of-HIP_CLANG_ROOT.patch', when='@3.5.0:') |     patch('0002-Fix-detection-of-HIP_CLANG_ROOT.patch', when='@3.5.0:') | ||||||
| 
 | 
 | ||||||
|     def setup_run_environment(self, env): |     def setup_run_environment(self, env): | ||||||
|         env.set('ROCM_PATH', '') |         # NOTE: DO NOT PUT LOGIC LIKE self.spec[name] in this function!!!!! | ||||||
|  |         # It DOES NOT WORK FOR EXTERNAL PACKAGES!!!! See get_rocm_prefix_info | ||||||
|  |         rocm_prefixes = self.get_rocm_prefix_info() | ||||||
|  | 
 | ||||||
|  |         env.set('ROCM_PATH', rocm_prefixes['rocm-path']) | ||||||
|         env.set('HIP_COMPILER', 'clang') |         env.set('HIP_COMPILER', 'clang') | ||||||
|         env.set('HIP_PLATFORM', 'hcc') |         env.set('HIP_PLATFORM', 'hcc') | ||||||
|         env.set('HIP_CLANG_PATH', self.spec['llvm-amdgpu'].prefix.bin) |         env.set('HIP_CLANG_PATH', rocm_prefixes['llvm-amdgpu'].bin) | ||||||
|         env.set('HSA_PATH', self.spec['hsa-rocr-dev'].prefix) |         env.set('HSA_PATH', rocm_prefixes['hsa-rocr-dev']) | ||||||
|         env.set('ROCMINFO_PATH', self.spec['rocminfo'].prefix) |         env.set('ROCMINFO_PATH', rocm_prefixes['rocminfo']) | ||||||
|         env.set('HIP_PATH', self.prefix) |         env.set('DEVICE_LIB_PATH', rocm_prefixes['rocm-device-libs'].lib) | ||||||
|         env.set('DEVICE_LIB_PATH', |         env.set('HIP_PATH', rocm_prefixes['rocm-path']) | ||||||
|                 self.spec['rocm-device-libs'].prefix.amdgcn.bitcode) |  | ||||||
|         env.set('HIPCC_COMPILE_FLAGS_APPEND', |         env.set('HIPCC_COMPILE_FLAGS_APPEND', | ||||||
|                 '--rocm-path={0}'.format(self.prefix)) |                 '--rocm-path={0}'.format(rocm_prefixes['rocm-path'])) | ||||||
|  | 
 | ||||||
|  |         if 'amdgpu_target' in self.spec.variants: | ||||||
|  |             arch = self.spec.variants['amdgpu_target'].value | ||||||
|  |             if arch != 'none': | ||||||
|  |                 env.set('HCC_AMDGPU_TARGET', arch) | ||||||
| 
 | 
 | ||||||
|     def setup_dependent_run_environment(self, env, dependent_spec): |     def setup_dependent_run_environment(self, env, dependent_spec): | ||||||
|         self.setup_run_environment(env) |         self.setup_run_environment(env) | ||||||
| @@ -85,31 +93,42 @@ def get_rocm_prefix_info(self): | |||||||
|                 raise RuntimeError(msg) |                 raise RuntimeError(msg) | ||||||
| 
 | 
 | ||||||
|             return { |             return { | ||||||
|  |                 'rocm-path': fallback_prefix, | ||||||
|                 'llvm-amdgpu': fallback_prefix.llvm, |                 'llvm-amdgpu': fallback_prefix.llvm, | ||||||
|                 'hsa-rocr-dev': fallback_prefix.hsa, |                 'hsa-rocr-dev': fallback_prefix.hsa, | ||||||
|                 'rocminfo': fallback_prefix.bin, |                 'rocminfo': fallback_prefix.bin, | ||||||
|                 'rocm-device-libs': fallback_prefix, |                 'rocm-device-libs': fallback_prefix, | ||||||
|             } |             } | ||||||
|         else: |         else: | ||||||
|             return dict((name, self.spec[name].prefix) |             mydict = dict((name, self.spec[name].prefix) | ||||||
|                         for name in ('llvm-amdgpu', 'hsa-rocr-dev', 'rocminfo', |                           for name in ('llvm-amdgpu', 'hsa-rocr-dev', | ||||||
|                                      'rocm-device-libs')) |                                        'rocminfo', 'rocm-device-libs')) | ||||||
|  |             mydict['rocm-path'] = os.path.dirname(self.spec.prefix) | ||||||
|  |             return mydict | ||||||
| 
 | 
 | ||||||
|     def setup_dependent_build_environment(self, env, dependent_spec): |     def setup_dependent_build_environment(self, env, dependent_spec): | ||||||
|         # Indirection for dependency paths because hip may be an external in |         # Indirection for dependency paths because hip may be an external in | ||||||
|         # Spack. See block comment on get_rocm_prefix_info |         # Spack. See block comment on get_rocm_prefix_info . | ||||||
|  | 
 | ||||||
|  |         # NOTE: DO NOT PUT LOGIC LIKE self.spec[name] in this function!!!!! | ||||||
|  |         # It DOES NOT WORK FOR EXTERNAL PACKAGES!!!! See get_rocm_prefix_info | ||||||
|         rocm_prefixes = self.get_rocm_prefix_info() |         rocm_prefixes = self.get_rocm_prefix_info() | ||||||
| 
 | 
 | ||||||
|         env.set('ROCM_PATH', '') |         env.set('ROCM_PATH', rocm_prefixes['rocm-path']) | ||||||
|         env.set('HIP_COMPILER', 'clang') |         env.set('HIP_COMPILER', 'clang') | ||||||
|         env.set('HIP_PLATFORM', 'hcc') |         env.set('HIP_PLATFORM', 'hcc') | ||||||
|         env.set('HIP_CLANG_PATH', rocm_prefixes['llvm-amdgpu'].bin) |         env.set('HIP_CLANG_PATH', rocm_prefixes['llvm-amdgpu'].bin) | ||||||
|         env.set('HSA_PATH', rocm_prefixes['hsa-rocr-dev']) |         env.set('HSA_PATH', rocm_prefixes['hsa-rocr-dev']) | ||||||
|         env.set('ROCMINFO_PATH', rocm_prefixes['rocminfo']) |         env.set('ROCMINFO_PATH', rocm_prefixes['rocminfo']) | ||||||
|         env.set('DEVICE_LIB_PATH', |         env.set('DEVICE_LIB_PATH', rocm_prefixes['rocm-device-libs'].lib) | ||||||
|                 self.spec['rocm-device-libs'].prefix.amdgcn.bitcode) |         env.set('HIP_PATH', rocm_prefixes['rocm-path']) | ||||||
|         env.set('HIPCC_COMPILE_FLAGS_APPEND', |         env.set('HIPCC_COMPILE_FLAGS_APPEND', | ||||||
|                 '--rocm-path={0}'.format(self.prefix)) |                 '--rocm-path={0}'.format(rocm_prefixes['rocm-path'])) | ||||||
|  | 
 | ||||||
|  |         if 'amdgpu_target' in dependent_spec.variants: | ||||||
|  |             arch = dependent_spec.variants['amdgpu_target'].value | ||||||
|  |             if arch != 'none': | ||||||
|  |                 env.set('HCC_AMDGPU_TARGET', arch) | ||||||
| 
 | 
 | ||||||
|     def setup_dependent_package(self, module, dependent_spec): |     def setup_dependent_package(self, module, dependent_spec): | ||||||
|         self.spec.hipcc = join_path(self.prefix.bin, 'hipcc') |         self.spec.hipcc = join_path(self.prefix.bin, 'hipcc') | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Raja(CMakePackage, CudaPackage): | class Raja(CMakePackage, CudaPackage, HipPackage): | ||||||
|     """RAJA Parallel Framework.""" |     """RAJA Parallel Framework.""" | ||||||
| 
 | 
 | ||||||
|     homepage = "http://software.llnl.gov/RAJA/" |     homepage = "http://software.llnl.gov/RAJA/" | ||||||
| @@ -33,6 +33,8 @@ class Raja(CMakePackage, CudaPackage): | |||||||
|     variant('examples', default=True, description='Build examples.') |     variant('examples', default=True, description='Build examples.') | ||||||
|     variant('exercises', default=True, description='Build exercises.') |     variant('exercises', default=True, description='Build exercises.') | ||||||
| 
 | 
 | ||||||
|  |     conflicts('+openmp', when='+hip') | ||||||
|  | 
 | ||||||
|     depends_on('cmake@3.8:', type='build') |     depends_on('cmake@3.8:', type='build') | ||||||
|     depends_on('cmake@3.9:', when='+cuda', type='build') |     depends_on('cmake@3.9:', when='+cuda', type='build') | ||||||
| 
 | 
 | ||||||
| @@ -54,6 +56,15 @@ def cmake_args(self): | |||||||
|         else: |         else: | ||||||
|             options.append('-DENABLE_CUDA=OFF') |             options.append('-DENABLE_CUDA=OFF') | ||||||
| 
 | 
 | ||||||
|  |         if '+hip' in spec: | ||||||
|  |             arch = self.spec.variants['amdgpu_target'].value | ||||||
|  |             options.extend([ | ||||||
|  |                 '-DENABLE_HIP=ON', | ||||||
|  |                 '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), | ||||||
|  |                 '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) | ||||||
|  |         else: | ||||||
|  |             options.append('-DENABLE_HIP=OFF') | ||||||
|  | 
 | ||||||
|         options.append('-DBUILD_SHARED_LIBS={0}'.format( |         options.append('-DBUILD_SHARED_LIBS={0}'.format( | ||||||
|             'ON' if '+shared' in spec else 'OFF')) |             'ON' if '+shared' in spec else 'OFF')) | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
| import llnl.util.tty as tty | import llnl.util.tty as tty | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Umpire(CMakePackage, CudaPackage): | class Umpire(CMakePackage, CudaPackage, HipPackage): | ||||||
|     """An application-focused API for memory management on NUMA & GPU |     """An application-focused API for memory management on NUMA & GPU | ||||||
|     architectures""" |     architectures""" | ||||||
| 
 | 
 | ||||||
| @@ -61,6 +61,14 @@ class Umpire(CMakePackage, CudaPackage): | |||||||
|     depends_on('cmake@3.9:', when='+cuda', type='build') |     depends_on('cmake@3.9:', when='+cuda', type='build') | ||||||
| 
 | 
 | ||||||
|     depends_on('blt', type='build') |     depends_on('blt', type='build') | ||||||
|  | 
 | ||||||
|  |     # variants +hip and amdgpu_targets are not automatically passed to | ||||||
|  |     # dependencies, so do it manually. | ||||||
|  |     depends_on('camp+hip', when='+hip') | ||||||
|  |     amdgpu_targets = HipPackage.amd_gputargets_list() | ||||||
|  |     for val in amdgpu_targets: | ||||||
|  |         depends_on('camp amdgpu_target=%s' % val, when='amdgpu_target=%s' % val) | ||||||
|  | 
 | ||||||
|     depends_on('camp') |     depends_on('camp') | ||||||
| 
 | 
 | ||||||
|     conflicts('+numa', when='@:0.3.2') |     conflicts('+numa', when='@:0.3.2') | ||||||
| @@ -70,7 +78,6 @@ def cmake_args(self): | |||||||
|         spec = self.spec |         spec = self.spec | ||||||
| 
 | 
 | ||||||
|         options = [] |         options = [] | ||||||
| 
 |  | ||||||
|         options.append("-DBLT_SOURCE_DIR={0}".format(spec['blt'].prefix)) |         options.append("-DBLT_SOURCE_DIR={0}".format(spec['blt'].prefix)) | ||||||
|         options.append("-Dcamp_DIR={0}".format(spec['camp'].prefix)) |         options.append("-Dcamp_DIR={0}".format(spec['camp'].prefix)) | ||||||
| 
 | 
 | ||||||
| @@ -90,6 +97,15 @@ def cmake_args(self): | |||||||
|         else: |         else: | ||||||
|             options.append('-DENABLE_CUDA=Off') |             options.append('-DENABLE_CUDA=Off') | ||||||
| 
 | 
 | ||||||
|  |         if '+hip' in spec: | ||||||
|  |             arch = self.spec.variants['amdgpu_target'].value | ||||||
|  |             options.extend([ | ||||||
|  |                 '-DENABLE_HIP=ON', | ||||||
|  |                 '-DHIP_ROOT_DIR={0}'.format(spec['hip'].prefix), | ||||||
|  |                 '-DHIP_HIPCC_FLAGS=--amdgpu-target={0}'.format(arch)]) | ||||||
|  |         else: | ||||||
|  |             options.append('-DENABLE_HIP=OFF') | ||||||
|  | 
 | ||||||
|         options.append('-DENABLE_C={0}'.format( |         options.append('-DENABLE_C={0}'.format( | ||||||
|             'On' if '+c' in spec else 'Off')) |             'On' if '+c' in spec else 'Off')) | ||||||
| 
 | 
 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user