diff --git a/EESSI-extend-easybuild.eb b/EESSI-extend-easybuild.eb index 2890ff49..5955e8e5 100644 --- a/EESSI-extend-easybuild.eb +++ b/EESSI-extend-easybuild.eb @@ -96,12 +96,24 @@ sysroot = os.getenv("EESSI_EPREFIX") -- Check if we have GPU capabilities and configure CUDA compute capabilities eessi_accelerator_target = os.getenv("EESSI_ACCELERATOR_TARGET") if (eessi_accelerator_target ~= nil) then - cuda_compute_capability = string.match(eessi_accelerator_target, "^accel/nvidia/cc([0-9][0-9])$") + cuda_compute_capability = string.match(eessi_accelerator_target, "^accel/nvidia/cc([0-9]+)$") if (cuda_compute_capability ~= nil) then - easybuild_cuda_compute_capabilities = cuda_compute_capability:sub(1, 1) .. "." .. cuda_compute_capability:sub(2, 2) + -- The last digit should be the minor version, insert a dot in the one-but-last position + major_version = cuda_compute_capability:sub(1, #cuda_compute_capability - 1) + minor_version = cuda_compute_capability:sub(#cuda_compute_capability) + easybuild_cuda_compute_capabilities = string.format("%s.%s", major_version, minor_version) else LmodError("Incorrect value for $EESSI_ACCELERATOR_TARGET: " .. eessi_accelerator_target) end + + -- If architectures are 9.0, 10.0 or 12.0, enable architecture or family-specific optimizations + if easybuild_cuda_compute_capabilities == '9.0' then + easybuild_cuda_compute_capabilities = '9.0a' + elseif easybuild_cuda_compute_capabilities == '10.0' then + easybuild_cuda_compute_capabilities = '10.0f' + elseif easybuild_cuda_compute_capabilities == '12.0' then + easybuild_cuda_compute_capabilities = '12.0f' + end end -- Some environment variables affect behaviour, let's gather them once diff --git a/init/eessi_archdetect.sh b/init/eessi_archdetect.sh index 96f99fe1..af6c6810 100755 --- a/init/eessi_archdetect.sh +++ b/init/eessi_archdetect.sh @@ -165,11 +165,11 @@ accelpath() { # If EESSI_ACCELERATOR_TARGET_OVERRIDE is set, use it log "DEBUG" "accelpath: Override variable set as '$EESSI_ACCELERATOR_TARGET_OVERRIDE' " if [ ! -z $EESSI_ACCELERATOR_TARGET_OVERRIDE ]; then - if [[ "$EESSI_ACCELERATOR_TARGET_OVERRIDE" =~ ^accel/nvidia/cc[0-9][0-9]$ ]]; then + if [[ "$EESSI_ACCELERATOR_TARGET_OVERRIDE" =~ ^accel/nvidia/cc[0-9]+$ ]]; then echo ${EESSI_ACCELERATOR_TARGET_OVERRIDE} return 0 else - log "ERROR" "Value of \$EESSI_ACCELERATOR_TARGET_OVERRIDE should match 'accel/nvidia/cc[0-9[0-9]', but it does not: '$EESSI_ACCELERATOR_TARGET_OVERRIDE'" + log "ERROR" "Value of \$EESSI_ACCELERATOR_TARGET_OVERRIDE should match 'accel/nvidia/cc[0-9]+', but it does not: '$EESSI_ACCELERATOR_TARGET_OVERRIDE'" fi return 0 fi