@@ -398,7 +398,42 @@ def override_options(self):
398398 int , 'store_or_None' , None ),
399399 'cuda-compute-capabilities' : ("List of CUDA compute capabilities to use when building GPU software; "
400400 "values should be specified as digits separated by a dot, "
401- "for example: 3.5,5.0,7.2" , 'strlist' , 'extend' , None ),
401+ "for example: 3.5,5.0,7.2. EasyBuild will (where possible) compile fat "
402+ "binaries with support for (at least) all requested CUDA compute "
403+ "capabilities, and PTX code for the highest CUDA compute capability (for "
404+ "forwards compatibility). The check on this behavior may be relaxed using "
405+ "--cuda-sanity-check-accept-missing-ptx, "
406+ "--cuda-sanity-check-accept-ptx-as-devcode, "
407+ "or made more stringent using --cuda-sanity-check-strict." ,
408+ 'strlist' , 'extend' , None ),
409+ 'cuda-sanity-check-accept-missing-ptx' : ("Relax CUDA sanity check to accept that PTX code for the highest "
410+ "requested CUDA compute capability is not present (but will "
411+ "print a warning)" ,
412+ None , 'store_true' , False ),
413+ 'cuda-sanity-check-accept-ptx-as-devcode' : ("Relax CUDA sanity check to accept that requested device code "
414+ "is not present, as long as PTX code is present that can be "
415+ "JIT-compiled for each target in --cuda-compute-capabilities. "
416+ "For example, if --cuda-compute-capabilities=8.0 and a binary "
417+ "is found in the installation that does not have device code "
418+ "for 8.0, but it does have PTX code for 7.0, the sanity check "
419+ "will pass if, and only if, this option is enabled. "
420+ "Note that JIT-compiling means the binary will work on the "
421+ "requested architecture, but is it not necessarily as well "
422+ "optimized as when actual device code is present for the "
423+ "requested architecture " ,
424+ None , 'store_true' , False ),
425+ 'cuda-sanity-check-error-on-failed-checks' : ("If enabled, failures in the CUDA sanity check will produce "
426+ "an error. If disabled, the CUDA sanity check will be "
427+ "performed and failures will be reported through warnings, "
428+ "but they will not result in an error" ,
429+ None , 'store_true' , False ),
430+ 'cuda-sanity-check-strict' : ("Perform strict CUDA sanity check. Without this option, the CUDA sanity "
431+ "check will fail if the CUDA binaries don't contain code for (at least) "
432+ "all compute capabilities defined in --cude-compute-capabilities, "
433+ "but will accept if code for additional compute capabilities is present. "
434+ "With this setting, the sanity check will also fail if code is present for "
435+ "more compute capabilities than defined in --cuda-compute-capabilities." ,
436+ None , 'store_true' , False ),
402437 'debug-lmod' : ("Run Lmod modules tool commands in debug module" , None , 'store_true' , False ),
403438 'default-opt-level' : ("Specify default optimisation level" , 'choice' , 'store' , DEFAULT_OPT_LEVEL ,
404439 Compiler .COMPILER_OPT_OPTIONS ),
@@ -544,7 +579,7 @@ def override_options(self):
544579 "Git commit to use for the target software build (robot capabilities are automatically disabled)" ,
545580 None , 'store' , None ),
546581 'sticky-bit' : ("Set sticky bit on newly created directories" , None , 'store_true' , False ),
547- 'strict-rpath-sanity-check' : ("Perform strict RPATH sanity check, which involces unsetting "
582+ 'strict-rpath-sanity-check' : ("Perform strict RPATH sanity check, which involves unsetting "
548583 "$LD_LIBRARY_PATH before checking whether all required libraries are found" ,
549584 None , 'store_true' , False ),
550585 'sysroot' : ("Location root directory of system, prefix for standard paths like /usr/lib and /usr/include" ,
@@ -950,7 +985,7 @@ def validate(self):
950985 # values passed to --cuda-compute-capabilities must be of form X.Y (with both X and Y integers),
951986 # see https://developer.nvidia.com/cuda-gpus
952987 if self .options .cuda_compute_capabilities :
953- cuda_cc_regex = re .compile (r'^[0-9]+\.[0-9]+$' )
988+ cuda_cc_regex = re .compile (r'^[0-9]+\.[0-9]+a? $' )
954989 faulty_cuda_ccs = [x for x in self .options .cuda_compute_capabilities if not cuda_cc_regex .match (x )]
955990 if faulty_cuda_ccs :
956991 error_msg = "Incorrect values in --cuda-compute-capabilities (expected pattern: '%s'): %s"
0 commit comments