BabelStream/docs/spack_instructions.md
2023-06-17 09:17:32 +00:00

4.6 KiB

Spack Instructions

Table of contents

OpenMP

  • There are 3 offloading options for OpenMP: NVIDIA, AMD and Intel.
  • If a user provides a value for cuda_arch, the execution will be automatically offloaded to NVIDIA.
  • If a user provides a value for amdgpu_target, the operation will be offloaded to AMD.
  • In the absence of cuda_arch and amdgpu_target, the execution will be offloaded to Intel.
Flag Definition
cuda_arch - List of supported compute capabilities are provided here
- Useful link for matching CUDA gencodes with NVIDIA architectures
amdgpu_target List of supported architectures are provided here
# Example 1: for Intel offload
 $ spack install babelstream%oneapi +omp 

# Example 2: for Nvidia GPU for Volta (sm_70) 
 $ spack install babelstream +omp cuda_arch=70 
 
# Example 3: for AMD GPU gfx701 
 $ spack install babelstream +omp amdgpu_target=gfx701 

OpenCL

  • No need to specify amdgpu_target or cuda_arch here since we are using AMD and CUDA as backend respectively.
Flag Definition
backend 4 different backend options:
- cuda
- amd
- intel
- pocl
# Example 1:  CUDA backend
 $ spack install babelstream%gcc +ocl backend=cuda

# Example 2:  AMD backend 
 $ spack install babelstream%gcc +ocl backend=amd
 
# Example 3:  Intel backend
 $ spack install babelstream%gcc +ocl backend=intel

# Example 4:  POCL backend
 $ spack install babelstream%gcc +ocl backend=pocl

STD

  • Minimum GCC version requirement 10.1.0
  • NVHPC Offload will be added in the future release
# Example 1:  data 
 $ spack install babelstream +stddata

# Example 2:  ranges
 $ spack install babelstream +stdranges
 
# Example 3:  indices
 $ spack install babelstream +stdindices

HIP(ROCM)

  • amdgpu_target and flags are optional here.
Flag Definition
amdgpu_target List of supported architectures are provided here
flags Extra flags to pass
# Example 1:  ROCM default
 $ spack install babelstream +rocm

# Example 2:  ROCM with GPU target
 $ spack install babelstream +rocm amdgpu_target=<gfx701>
 
# Example 3:  ROCM with extra flags option
 $ spack install babelstream +rocm flags=<xxx>

# Example 4:  ROCM with GPU target and extra flags
 $ spack install babelstream +rocm amdgpu_target=<gfx701> flags=<xxx>

CUDA

  • The cuda_arch value is mandatory here.
  • If a user provides a value for mem, device memory mode will be chosen accordingly
  • If a user provides a value for flags, additional CUDA flags will be passed to NVCC
  • In the absence of mem and flags, the execution will choose DEFAULT for device memory mode and no additional flags will be passed
Flag Definition
cuda_arch - List of supported compute capabilities are provided here
- Useful link for matching CUDA gencodes with NVIDIA architectures
mem Device memory mode:
- DEFAULT allocate host and device memory pointers.
- MANAGED use CUDA Managed Memory.
- PAGEFAULT shared memory, only host pointers allocated
flags Extra flags to pass
# Example 1: CUDA no mem and flags specified
 $ spack install babelstream +cuda cuda_arch=70

# Example 2: for Nvidia GPU for Volta (sm_70) 
 $ spack install babelstream +cuda cuda_arch=70 mem=managed
 
# Example 3: CUDA with mem and flags specified
 $ spack install babelstream +cuda cuda_arch=70 mem=managed flags=xxx