The idea of -march-map= is to simply and future proof select the best -march for a certain arch, without requiring that the compiler has support for it (like having a special multilib for it) - while -march= sets the actually used '.target' (and the compiler might actually generate specialized code for it).
The patch updates the sm_X for the CUDA 12.8 additions, namely for three Blackwell GPU architectures. Cf. https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#release-notes or also https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html OK for mainline? Tobias PS: CUDA 12.7 seems to be an internal release, which shows up as PTX version but was not released to the public. PTX 8.6/CUDA 12.7 added sm_100/sm_101 - and PTX 8.7/CUDA 12.8 added sm120. PPS: sm_80 (Ampere) was added in PTX ISA 7.0 (CUDA 11.0), sm_89 (Ada) in PTX ISA 7.8 (CUDA). As sm_90 (Hopper) + sm_100/101/120 (Blackwell) currently/now map to sm_89, GCC generates PTX ISA .version 7.8 for them. Otherwise, sm_80 and sm_89 produce (for now) identical code.
nvptx/nvptx.opt: Update -march-map= for newer sm_xxx Usage of the -march-map=: "Select the closest available '-march=' value that is not more capable." As PTX ISA 8.6/8.7 (= unreleased CUDA 12.7 + CUDA 12.8) added the Nvidia Blackwell GPUs SM_100, SM_101, and SM_120, it makes sense to add them as well. Note that all three come as sm_XXX and sm_XXXa. Internally, GCC currently generates the same code for >= sm_80 (Ampere); however, as GCC's -march= also supports sm_89 (Ada), the here added sm_1xxs (Blackwell) will map to sm_89. [Naming note: while ptx code generated for sm_X can also run with sm_Y if Y > X, code generated for sm_XXXa can (generally) only run on the specific hardware.] gcc/ChangeLog: * config/nvptx/nvptx.opt (march-map=): Add sm_100, sm_101a, sm_101, sm_101a, sm_120, and sm_120a. gcc/config/nvptx/nvptx.opt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index ce9fbc7312e..8c160874648 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -120,6 +120,24 @@ Target RejectNegative Alias(misa=,sm_89) march-map=sm_90a Target RejectNegative Alias(misa=,sm_89) +march-map=sm_100 +Target RejectNegative Alias(misa=,sm_89) + +march-map=sm_100a +Target RejectNegative Alias(misa=,sm_89) + +march-map=sm_101 +Target RejectNegative Alias(misa=,sm_89) + +march-map=sm_101a +Target RejectNegative Alias(misa=,sm_89) + +march-map=sm_120 +Target RejectNegative Alias(misa=,sm_89) + +march-map=sm_120a +Target RejectNegative Alias(misa=,sm_89) + Enum Name(ptx_version) Type(enum ptx_version) Known PTX ISA versions (for use with the -mptx= option):