* nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) [not found] ` <87o801see9.fsf@euler.schwinge.homeip.net> @ 2022-06-15 21:18 ` Thomas Schwinge 2022-07-05 14:59 ` [PING] " Thomas Schwinge 0 siblings, 1 reply; 9+ messages in thread From: Thomas Schwinge @ 2022-06-15 21:18 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 4882 bytes --] Hi Tom! On 2022-05-13T16:20:14+0200, I wrote: > On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >> On 2/4/22 08:21, Thomas Schwinge wrote: >>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>> I've tested this using (recommended) driver 470.94 on boards: > >>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>> >>> Do you use separate (nvptx-none offload target only?) builds for >>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>> multilib configuration? >> >> Neither, I'm using --target_board=unix/foffload= for that. > > ACK, I see. So these flags then only affect GCC/nvptx code generation > for the actual user code (here: GCC libgomp test cases), but for the > GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- > the latter especially relevant for OpenMP), it uses PTX code from one of > the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. > > Meaning, one can't just use such a flag for "completely building code" > for a specific configuration. Random example, > '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target > libraries aren't being built for '-march=sm_75' multilib, > '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, > which isn't '-march=sm_75'. > > >> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>> etc., I suppose?) Should we add a few representative configurations to >>> be built by default? And/or, should we have a way to 'configure' per >>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>> few other targets?)? (I see there's also a new >>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>> which way: again, combinatorial explosion is a problem, of course... >> >> As far as I know, the gcc build doesn't finish when switching default to >> higher than sm_35, so there's little point to go to a multilib setup at >> this point. But once we fix that, we could reconsider, otherwise, >> things are likely to regress again. > > As far as I remember, several issues have been fixed. Still waiting for > Roger's "middle-end: Support ABIs that pass FP values as wider integers" > or something similar, but that PR104489 issue is being worked around by > "Limit HFmode support to mexperimental", if I got that right. > > Now I'm not suggesting we should now enable all or any random GCC/nvptx > multilibs, to get all these variants of GCC/nvptx target libraries built; > especially also given that GCC/nvptx code generation currently doesn't > make too much use of the new capabilities. > > However, we do have a specific request that a customer would like to be > able to change at GCC 'configure' time the GCC/nvptx default multilib > (including that being used for building corresponding GCC/nvptx target > libraries). > > Per 'gcc/doc/install.texi', I do see that some GCC targets allow for > GCC 'configure'-time '--with-multilib-list=[...]', or > '--with-multilib-generator=[...]', and I suppose we could be doing > something similar? But before starting implementing, I'd like your > input, as you'll be the one to approve in the end. And/or, maybe you've > already made up your own ideas about that? So, instead of "random GCC/nvptx multilib configuration" (last paragraph), I've come up with a way to implement our customer's request (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. I think I've implemented this in a way so that "random GCC/nvptx multilib configuration" may eventually be implemented on top of that. For easy review/testing I've split my changes into three commits, see attached "nvptx: Make default '-misa=sm_30' explicit", "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", "nvptx: Allow '--with-arch' to override the default '-misa'". To the best of my knowledge, the first two patches do not change any user-visible behavior (I generally 'diff'ed target libraries, and compared a good number of 'gcc -print-multi-directory [flags]'), and likewise with the third patch, given implicit (default) or explicit '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the '-misa=sm_70' multilib variants are used for implicit (default) or explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants are used for explicit lower '-misa'. What do you think, OK to push to master branch? Grüße Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PING] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-06-15 21:18 ` nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) Thomas Schwinge @ 2022-07-05 14:59 ` Thomas Schwinge 2022-07-13 8:42 ` [PING^2] " Thomas Schwinge 0 siblings, 1 reply; 9+ messages in thread From: Thomas Schwinge @ 2022-07-05 14:59 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 5077 bytes --] Hi Tom! Ping. Grüße Thomas On 2022-06-15T23:18:10+0200, I wrote: > Hi Tom! > > On 2022-05-13T16:20:14+0200, I wrote: >> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>> I've tested this using (recommended) driver 470.94 on boards: >> >>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>> >>>> Do you use separate (nvptx-none offload target only?) builds for >>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>> multilib configuration? >>> >>> Neither, I'm using --target_board=unix/foffload= for that. >> >> ACK, I see. So these flags then only affect GCC/nvptx code generation >> for the actual user code (here: GCC libgomp test cases), but for the >> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >> the latter especially relevant for OpenMP), it uses PTX code from one of >> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >> >> Meaning, one can't just use such a flag for "completely building code" >> for a specific configuration. Random example, >> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >> libraries aren't being built for '-march=sm_75' multilib, >> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >> which isn't '-march=sm_75'. >> >> >>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>> etc., I suppose?) Should we add a few representative configurations to >>>> be built by default? And/or, should we have a way to 'configure' per >>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>> few other targets?)? (I see there's also a new >>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>> which way: again, combinatorial explosion is a problem, of course... >>> >>> As far as I know, the gcc build doesn't finish when switching default to >>> higher than sm_35, so there's little point to go to a multilib setup at >>> this point. But once we fix that, we could reconsider, otherwise, >>> things are likely to regress again. >> >> As far as I remember, several issues have been fixed. Still waiting for >> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >> or something similar, but that PR104489 issue is being worked around by >> "Limit HFmode support to mexperimental", if I got that right. >> >> Now I'm not suggesting we should now enable all or any random GCC/nvptx >> multilibs, to get all these variants of GCC/nvptx target libraries built; >> especially also given that GCC/nvptx code generation currently doesn't >> make too much use of the new capabilities. >> >> However, we do have a specific request that a customer would like to be >> able to change at GCC 'configure' time the GCC/nvptx default multilib >> (including that being used for building corresponding GCC/nvptx target >> libraries). >> >> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >> GCC 'configure'-time '--with-multilib-list=[...]', or >> '--with-multilib-generator=[...]', and I suppose we could be doing >> something similar? But before starting implementing, I'd like your >> input, as you'll be the one to approve in the end. And/or, maybe you've >> already made up your own ideas about that? > > So, instead of "random GCC/nvptx multilib configuration" (last > paragraph), I've come up with a way to implement our customer's request > (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. > > I think I've implemented this in a way so that "random GCC/nvptx multilib > configuration" may eventually be implemented on top of that. For easy > review/testing I've split my changes into three commits, see attached > "nvptx: Make default '-misa=sm_30' explicit", > "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", > "nvptx: Allow '--with-arch' to override the default '-misa'". > > To the best of my knowledge, the first two patches do not change any > user-visible behavior (I generally 'diff'ed target libraries, and > compared a good number of 'gcc -print-multi-directory [flags]'), and > likewise with the third patch, given implicit (default) or explicit > '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the > '-misa=sm_70' multilib variants are used for implicit (default) or > explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants > are used for explicit lower '-misa'. > > What do you think, OK to push to master branch? > > > Grüße > Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PING^2] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-07-05 14:59 ` [PING] " Thomas Schwinge @ 2022-07-13 8:42 ` Thomas Schwinge 2022-07-20 12:46 ` [PING^3] " Thomas Schwinge 0 siblings, 1 reply; 9+ messages in thread From: Thomas Schwinge @ 2022-07-13 8:42 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 5265 bytes --] Hi Tom! Ping. Grüße Thomas On 2022-07-05T16:59:23+0200, I wrote: > Hi Tom! > > Ping. > > > Grüße > Thomas > > > On 2022-06-15T23:18:10+0200, I wrote: >> Hi Tom! >> >> On 2022-05-13T16:20:14+0200, I wrote: >>> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>>> I've tested this using (recommended) driver 470.94 on boards: >>> >>>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>>> >>>>> Do you use separate (nvptx-none offload target only?) builds for >>>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>>> multilib configuration? >>>> >>>> Neither, I'm using --target_board=unix/foffload= for that. >>> >>> ACK, I see. So these flags then only affect GCC/nvptx code generation >>> for the actual user code (here: GCC libgomp test cases), but for the >>> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >>> the latter especially relevant for OpenMP), it uses PTX code from one of >>> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >>> >>> Meaning, one can't just use such a flag for "completely building code" >>> for a specific configuration. Random example, >>> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >>> libraries aren't being built for '-march=sm_75' multilib, >>> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >>> which isn't '-march=sm_75'. >>> >>> >>>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>>> etc., I suppose?) Should we add a few representative configurations to >>>>> be built by default? And/or, should we have a way to 'configure' per >>>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>>> few other targets?)? (I see there's also a new >>>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>>> which way: again, combinatorial explosion is a problem, of course... >>>> >>>> As far as I know, the gcc build doesn't finish when switching default to >>>> higher than sm_35, so there's little point to go to a multilib setup at >>>> this point. But once we fix that, we could reconsider, otherwise, >>>> things are likely to regress again. >>> >>> As far as I remember, several issues have been fixed. Still waiting for >>> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >>> or something similar, but that PR104489 issue is being worked around by >>> "Limit HFmode support to mexperimental", if I got that right. >>> >>> Now I'm not suggesting we should now enable all or any random GCC/nvptx >>> multilibs, to get all these variants of GCC/nvptx target libraries built; >>> especially also given that GCC/nvptx code generation currently doesn't >>> make too much use of the new capabilities. >>> >>> However, we do have a specific request that a customer would like to be >>> able to change at GCC 'configure' time the GCC/nvptx default multilib >>> (including that being used for building corresponding GCC/nvptx target >>> libraries). >>> >>> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >>> GCC 'configure'-time '--with-multilib-list=[...]', or >>> '--with-multilib-generator=[...]', and I suppose we could be doing >>> something similar? But before starting implementing, I'd like your >>> input, as you'll be the one to approve in the end. And/or, maybe you've >>> already made up your own ideas about that? >> >> So, instead of "random GCC/nvptx multilib configuration" (last >> paragraph), I've come up with a way to implement our customer's request >> (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. >> >> I think I've implemented this in a way so that "random GCC/nvptx multilib >> configuration" may eventually be implemented on top of that. For easy >> review/testing I've split my changes into three commits, see attached >> "nvptx: Make default '-misa=sm_30' explicit", >> "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", >> "nvptx: Allow '--with-arch' to override the default '-misa'". >> >> To the best of my knowledge, the first two patches do not change any >> user-visible behavior (I generally 'diff'ed target libraries, and >> compared a good number of 'gcc -print-multi-directory [flags]'), and >> likewise with the third patch, given implicit (default) or explicit >> '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the >> '-misa=sm_70' multilib variants are used for implicit (default) or >> explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants >> are used for explicit lower '-misa'. >> >> What do you think, OK to push to master branch? >> >> >> Grüße >> Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PING^3] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-07-13 8:42 ` [PING^2] " Thomas Schwinge @ 2022-07-20 12:46 ` Thomas Schwinge 2022-07-27 15:48 ` [PING^4] " Thomas Schwinge 0 siblings, 1 reply; 9+ messages in thread From: Thomas Schwinge @ 2022-07-20 12:46 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 5463 bytes --] Hi Tom! Ping. Grüße Thomas On 2022-07-13T10:42:44+0200, I wrote: > Hi Tom! > > Ping. > > > Grüße > Thomas > > > On 2022-07-05T16:59:23+0200, I wrote: >> Hi Tom! >> >> Ping. >> >> >> Grüße >> Thomas >> >> >> On 2022-06-15T23:18:10+0200, I wrote: >>> Hi Tom! >>> >>> On 2022-05-13T16:20:14+0200, I wrote: >>>> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>>>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>>>> I've tested this using (recommended) driver 470.94 on boards: >>>> >>>>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>>>> >>>>>> Do you use separate (nvptx-none offload target only?) builds for >>>>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>>>> multilib configuration? >>>>> >>>>> Neither, I'm using --target_board=unix/foffload= for that. >>>> >>>> ACK, I see. So these flags then only affect GCC/nvptx code generation >>>> for the actual user code (here: GCC libgomp test cases), but for the >>>> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >>>> the latter especially relevant for OpenMP), it uses PTX code from one of >>>> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >>>> >>>> Meaning, one can't just use such a flag for "completely building code" >>>> for a specific configuration. Random example, >>>> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >>>> libraries aren't being built for '-march=sm_75' multilib, >>>> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >>>> which isn't '-march=sm_75'. >>>> >>>> >>>>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>>>> etc., I suppose?) Should we add a few representative configurations to >>>>>> be built by default? And/or, should we have a way to 'configure' per >>>>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>>>> few other targets?)? (I see there's also a new >>>>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>>>> which way: again, combinatorial explosion is a problem, of course... >>>>> >>>>> As far as I know, the gcc build doesn't finish when switching default to >>>>> higher than sm_35, so there's little point to go to a multilib setup at >>>>> this point. But once we fix that, we could reconsider, otherwise, >>>>> things are likely to regress again. >>>> >>>> As far as I remember, several issues have been fixed. Still waiting for >>>> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >>>> or something similar, but that PR104489 issue is being worked around by >>>> "Limit HFmode support to mexperimental", if I got that right. >>>> >>>> Now I'm not suggesting we should now enable all or any random GCC/nvptx >>>> multilibs, to get all these variants of GCC/nvptx target libraries built; >>>> especially also given that GCC/nvptx code generation currently doesn't >>>> make too much use of the new capabilities. >>>> >>>> However, we do have a specific request that a customer would like to be >>>> able to change at GCC 'configure' time the GCC/nvptx default multilib >>>> (including that being used for building corresponding GCC/nvptx target >>>> libraries). >>>> >>>> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >>>> GCC 'configure'-time '--with-multilib-list=[...]', or >>>> '--with-multilib-generator=[...]', and I suppose we could be doing >>>> something similar? But before starting implementing, I'd like your >>>> input, as you'll be the one to approve in the end. And/or, maybe you've >>>> already made up your own ideas about that? >>> >>> So, instead of "random GCC/nvptx multilib configuration" (last >>> paragraph), I've come up with a way to implement our customer's request >>> (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. >>> >>> I think I've implemented this in a way so that "random GCC/nvptx multilib >>> configuration" may eventually be implemented on top of that. For easy >>> review/testing I've split my changes into three commits, see attached >>> "nvptx: Make default '-misa=sm_30' explicit", >>> "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", >>> "nvptx: Allow '--with-arch' to override the default '-misa'". >>> >>> To the best of my knowledge, the first two patches do not change any >>> user-visible behavior (I generally 'diff'ed target libraries, and >>> compared a good number of 'gcc -print-multi-directory [flags]'), and >>> likewise with the third patch, given implicit (default) or explicit >>> '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the >>> '-misa=sm_70' multilib variants are used for implicit (default) or >>> explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants >>> are used for explicit lower '-misa'. >>> >>> What do you think, OK to push to master branch? >>> >>> >>> Grüße >>> Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PING^4] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-07-20 12:46 ` [PING^3] " Thomas Schwinge @ 2022-07-27 15:48 ` Thomas Schwinge 2022-08-06 19:20 ` [PING^5] " Thomas Schwinge 0 siblings, 1 reply; 9+ messages in thread From: Thomas Schwinge @ 2022-07-27 15:48 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 5671 bytes --] Hi Tom! Ping. Grüße Thomas On 2022-07-20T14:46:03+0200, I wrote: > Hi Tom! > > Ping. > > > Grüße > Thomas > > > On 2022-07-13T10:42:44+0200, I wrote: >> Hi Tom! >> >> Ping. >> >> >> Grüße >> Thomas >> >> >> On 2022-07-05T16:59:23+0200, I wrote: >>> Hi Tom! >>> >>> Ping. >>> >>> >>> Grüße >>> Thomas >>> >>> >>> On 2022-06-15T23:18:10+0200, I wrote: >>>> Hi Tom! >>>> >>>> On 2022-05-13T16:20:14+0200, I wrote: >>>>> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>>>>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>>>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>>>>> I've tested this using (recommended) driver 470.94 on boards: >>>>> >>>>>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>>>>> >>>>>>> Do you use separate (nvptx-none offload target only?) builds for >>>>>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>>>>> multilib configuration? >>>>>> >>>>>> Neither, I'm using --target_board=unix/foffload= for that. >>>>> >>>>> ACK, I see. So these flags then only affect GCC/nvptx code generation >>>>> for the actual user code (here: GCC libgomp test cases), but for the >>>>> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >>>>> the latter especially relevant for OpenMP), it uses PTX code from one of >>>>> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >>>>> >>>>> Meaning, one can't just use such a flag for "completely building code" >>>>> for a specific configuration. Random example, >>>>> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >>>>> libraries aren't being built for '-march=sm_75' multilib, >>>>> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >>>>> which isn't '-march=sm_75'. >>>>> >>>>> >>>>>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>>>>> etc., I suppose?) Should we add a few representative configurations to >>>>>>> be built by default? And/or, should we have a way to 'configure' per >>>>>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>>>>> few other targets?)? (I see there's also a new >>>>>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>>>>> which way: again, combinatorial explosion is a problem, of course... >>>>>> >>>>>> As far as I know, the gcc build doesn't finish when switching default to >>>>>> higher than sm_35, so there's little point to go to a multilib setup at >>>>>> this point. But once we fix that, we could reconsider, otherwise, >>>>>> things are likely to regress again. >>>>> >>>>> As far as I remember, several issues have been fixed. Still waiting for >>>>> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >>>>> or something similar, but that PR104489 issue is being worked around by >>>>> "Limit HFmode support to mexperimental", if I got that right. >>>>> >>>>> Now I'm not suggesting we should now enable all or any random GCC/nvptx >>>>> multilibs, to get all these variants of GCC/nvptx target libraries built; >>>>> especially also given that GCC/nvptx code generation currently doesn't >>>>> make too much use of the new capabilities. >>>>> >>>>> However, we do have a specific request that a customer would like to be >>>>> able to change at GCC 'configure' time the GCC/nvptx default multilib >>>>> (including that being used for building corresponding GCC/nvptx target >>>>> libraries). >>>>> >>>>> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >>>>> GCC 'configure'-time '--with-multilib-list=[...]', or >>>>> '--with-multilib-generator=[...]', and I suppose we could be doing >>>>> something similar? But before starting implementing, I'd like your >>>>> input, as you'll be the one to approve in the end. And/or, maybe you've >>>>> already made up your own ideas about that? >>>> >>>> So, instead of "random GCC/nvptx multilib configuration" (last >>>> paragraph), I've come up with a way to implement our customer's request >>>> (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. >>>> >>>> I think I've implemented this in a way so that "random GCC/nvptx multilib >>>> configuration" may eventually be implemented on top of that. For easy >>>> review/testing I've split my changes into three commits, see attached >>>> "nvptx: Make default '-misa=sm_30' explicit", >>>> "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", >>>> "nvptx: Allow '--with-arch' to override the default '-misa'". >>>> >>>> To the best of my knowledge, the first two patches do not change any >>>> user-visible behavior (I generally 'diff'ed target libraries, and >>>> compared a good number of 'gcc -print-multi-directory [flags]'), and >>>> likewise with the third patch, given implicit (default) or explicit >>>> '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the >>>> '-misa=sm_70' multilib variants are used for implicit (default) or >>>> explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants >>>> are used for explicit lower '-misa'. >>>> >>>> What do you think, OK to push to master branch? >>>> >>>> >>>> Grüße >>>> Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PING^5] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-07-27 15:48 ` [PING^4] " Thomas Schwinge @ 2022-08-06 19:20 ` Thomas Schwinge 2022-08-16 15:13 ` [PING^6] " Thomas Schwinge 2022-09-18 8:53 ` [PING^5] " Tom de Vries 0 siblings, 2 replies; 9+ messages in thread From: Thomas Schwinge @ 2022-08-06 19:20 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 5889 bytes --] Hi Tom! Ping. Grüße Thomas On 2022-07-27T17:48:58+0200, I wrote: > Hi Tom! > > Ping. > > > Grüße > Thomas > > > On 2022-07-20T14:46:03+0200, I wrote: >> Hi Tom! >> >> Ping. >> >> >> Grüße >> Thomas >> >> >> On 2022-07-13T10:42:44+0200, I wrote: >>> Hi Tom! >>> >>> Ping. >>> >>> >>> Grüße >>> Thomas >>> >>> >>> On 2022-07-05T16:59:23+0200, I wrote: >>>> Hi Tom! >>>> >>>> Ping. >>>> >>>> >>>> Grüße >>>> Thomas >>>> >>>> >>>> On 2022-06-15T23:18:10+0200, I wrote: >>>>> Hi Tom! >>>>> >>>>> On 2022-05-13T16:20:14+0200, I wrote: >>>>>> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>>>>>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>>>>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>>>>>> I've tested this using (recommended) driver 470.94 on boards: >>>>>> >>>>>>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>>>>>> >>>>>>>> Do you use separate (nvptx-none offload target only?) builds for >>>>>>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>>>>>> multilib configuration? >>>>>>> >>>>>>> Neither, I'm using --target_board=unix/foffload= for that. >>>>>> >>>>>> ACK, I see. So these flags then only affect GCC/nvptx code generation >>>>>> for the actual user code (here: GCC libgomp test cases), but for the >>>>>> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >>>>>> the latter especially relevant for OpenMP), it uses PTX code from one of >>>>>> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >>>>>> >>>>>> Meaning, one can't just use such a flag for "completely building code" >>>>>> for a specific configuration. Random example, >>>>>> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >>>>>> libraries aren't being built for '-march=sm_75' multilib, >>>>>> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >>>>>> which isn't '-march=sm_75'. >>>>>> >>>>>> >>>>>>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>>>>>> etc., I suppose?) Should we add a few representative configurations to >>>>>>>> be built by default? And/or, should we have a way to 'configure' per >>>>>>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>>>>>> few other targets?)? (I see there's also a new >>>>>>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>>>>>> which way: again, combinatorial explosion is a problem, of course... >>>>>>> >>>>>>> As far as I know, the gcc build doesn't finish when switching default to >>>>>>> higher than sm_35, so there's little point to go to a multilib setup at >>>>>>> this point. But once we fix that, we could reconsider, otherwise, >>>>>>> things are likely to regress again. >>>>>> >>>>>> As far as I remember, several issues have been fixed. Still waiting for >>>>>> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >>>>>> or something similar, but that PR104489 issue is being worked around by >>>>>> "Limit HFmode support to mexperimental", if I got that right. >>>>>> >>>>>> Now I'm not suggesting we should now enable all or any random GCC/nvptx >>>>>> multilibs, to get all these variants of GCC/nvptx target libraries built; >>>>>> especially also given that GCC/nvptx code generation currently doesn't >>>>>> make too much use of the new capabilities. >>>>>> >>>>>> However, we do have a specific request that a customer would like to be >>>>>> able to change at GCC 'configure' time the GCC/nvptx default multilib >>>>>> (including that being used for building corresponding GCC/nvptx target >>>>>> libraries). >>>>>> >>>>>> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >>>>>> GCC 'configure'-time '--with-multilib-list=[...]', or >>>>>> '--with-multilib-generator=[...]', and I suppose we could be doing >>>>>> something similar? But before starting implementing, I'd like your >>>>>> input, as you'll be the one to approve in the end. And/or, maybe you've >>>>>> already made up your own ideas about that? >>>>> >>>>> So, instead of "random GCC/nvptx multilib configuration" (last >>>>> paragraph), I've come up with a way to implement our customer's request >>>>> (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. >>>>> >>>>> I think I've implemented this in a way so that "random GCC/nvptx multilib >>>>> configuration" may eventually be implemented on top of that. For easy >>>>> review/testing I've split my changes into three commits, see attached >>>>> "nvptx: Make default '-misa=sm_30' explicit", >>>>> "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", >>>>> "nvptx: Allow '--with-arch' to override the default '-misa'". >>>>> >>>>> To the best of my knowledge, the first two patches do not change any >>>>> user-visible behavior (I generally 'diff'ed target libraries, and >>>>> compared a good number of 'gcc -print-multi-directory [flags]'), and >>>>> likewise with the third patch, given implicit (default) or explicit >>>>> '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the >>>>> '-misa=sm_70' multilib variants are used for implicit (default) or >>>>> explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants >>>>> are used for explicit lower '-misa'. >>>>> >>>>> What do you think, OK to push to master branch? >>>>> >>>>> >>>>> Grüße >>>>> Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PING^6] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-08-06 19:20 ` [PING^5] " Thomas Schwinge @ 2022-08-16 15:13 ` Thomas Schwinge 2022-08-30 13:44 ` [PING^7] " Thomas Schwinge 2022-09-18 8:53 ` [PING^5] " Tom de Vries 1 sibling, 1 reply; 9+ messages in thread From: Thomas Schwinge @ 2022-08-16 15:13 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 6117 bytes --] Hi Tom! Ping. Grüße Thomas On 2022-08-06T21:20:38+0200, I wrote: > Hi Tom! > > Ping. > > > Grüße > Thomas > > > On 2022-07-27T17:48:58+0200, I wrote: >> Hi Tom! >> >> Ping. >> >> >> Grüße >> Thomas >> >> >> On 2022-07-20T14:46:03+0200, I wrote: >>> Hi Tom! >>> >>> Ping. >>> >>> >>> Grüße >>> Thomas >>> >>> >>> On 2022-07-13T10:42:44+0200, I wrote: >>>> Hi Tom! >>>> >>>> Ping. >>>> >>>> >>>> Grüße >>>> Thomas >>>> >>>> >>>> On 2022-07-05T16:59:23+0200, I wrote: >>>>> Hi Tom! >>>>> >>>>> Ping. >>>>> >>>>> >>>>> Grüße >>>>> Thomas >>>>> >>>>> >>>>> On 2022-06-15T23:18:10+0200, I wrote: >>>>>> Hi Tom! >>>>>> >>>>>> On 2022-05-13T16:20:14+0200, I wrote: >>>>>>> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>>>>>>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>>>>>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>>>>>>> I've tested this using (recommended) driver 470.94 on boards: >>>>>>> >>>>>>>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>>>>>>> >>>>>>>>> Do you use separate (nvptx-none offload target only?) builds for >>>>>>>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>>>>>>> multilib configuration? >>>>>>>> >>>>>>>> Neither, I'm using --target_board=unix/foffload= for that. >>>>>>> >>>>>>> ACK, I see. So these flags then only affect GCC/nvptx code generation >>>>>>> for the actual user code (here: GCC libgomp test cases), but for the >>>>>>> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >>>>>>> the latter especially relevant for OpenMP), it uses PTX code from one of >>>>>>> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >>>>>>> >>>>>>> Meaning, one can't just use such a flag for "completely building code" >>>>>>> for a specific configuration. Random example, >>>>>>> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >>>>>>> libraries aren't being built for '-march=sm_75' multilib, >>>>>>> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >>>>>>> which isn't '-march=sm_75'. >>>>>>> >>>>>>> >>>>>>>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>>>>>>> etc., I suppose?) Should we add a few representative configurations to >>>>>>>>> be built by default? And/or, should we have a way to 'configure' per >>>>>>>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>>>>>>> few other targets?)? (I see there's also a new >>>>>>>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>>>>>>> which way: again, combinatorial explosion is a problem, of course... >>>>>>>> >>>>>>>> As far as I know, the gcc build doesn't finish when switching default to >>>>>>>> higher than sm_35, so there's little point to go to a multilib setup at >>>>>>>> this point. But once we fix that, we could reconsider, otherwise, >>>>>>>> things are likely to regress again. >>>>>>> >>>>>>> As far as I remember, several issues have been fixed. Still waiting for >>>>>>> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >>>>>>> or something similar, but that PR104489 issue is being worked around by >>>>>>> "Limit HFmode support to mexperimental", if I got that right. >>>>>>> >>>>>>> Now I'm not suggesting we should now enable all or any random GCC/nvptx >>>>>>> multilibs, to get all these variants of GCC/nvptx target libraries built; >>>>>>> especially also given that GCC/nvptx code generation currently doesn't >>>>>>> make too much use of the new capabilities. >>>>>>> >>>>>>> However, we do have a specific request that a customer would like to be >>>>>>> able to change at GCC 'configure' time the GCC/nvptx default multilib >>>>>>> (including that being used for building corresponding GCC/nvptx target >>>>>>> libraries). >>>>>>> >>>>>>> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >>>>>>> GCC 'configure'-time '--with-multilib-list=[...]', or >>>>>>> '--with-multilib-generator=[...]', and I suppose we could be doing >>>>>>> something similar? But before starting implementing, I'd like your >>>>>>> input, as you'll be the one to approve in the end. And/or, maybe you've >>>>>>> already made up your own ideas about that? >>>>>> >>>>>> So, instead of "random GCC/nvptx multilib configuration" (last >>>>>> paragraph), I've come up with a way to implement our customer's request >>>>>> (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. >>>>>> >>>>>> I think I've implemented this in a way so that "random GCC/nvptx multilib >>>>>> configuration" may eventually be implemented on top of that. For easy >>>>>> review/testing I've split my changes into three commits, see attached >>>>>> "nvptx: Make default '-misa=sm_30' explicit", >>>>>> "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", >>>>>> "nvptx: Allow '--with-arch' to override the default '-misa'". >>>>>> >>>>>> To the best of my knowledge, the first two patches do not change any >>>>>> user-visible behavior (I generally 'diff'ed target libraries, and >>>>>> compared a good number of 'gcc -print-multi-directory [flags]'), and >>>>>> likewise with the third patch, given implicit (default) or explicit >>>>>> '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the >>>>>> '-misa=sm_70' multilib variants are used for implicit (default) or >>>>>> explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants >>>>>> are used for explicit lower '-misa'. >>>>>> >>>>>> What do you think, OK to push to master branch? >>>>>> >>>>>> >>>>>> Grüße >>>>>> Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PING^7] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-08-16 15:13 ` [PING^6] " Thomas Schwinge @ 2022-08-30 13:44 ` Thomas Schwinge 0 siblings, 0 replies; 9+ messages in thread From: Thomas Schwinge @ 2022-08-30 13:44 UTC (permalink / raw) To: Tom de Vries, gcc-patches [-- Attachment #1: Type: text/plain, Size: 6355 bytes --] Hi Tom! Ping. Grüße Thomas On 2022-08-16T17:13:42+0200, I wrote: > Hi Tom! > > Ping. > > > Grüße > Thomas > > > On 2022-08-06T21:20:38+0200, I wrote: >> Hi Tom! >> >> Ping. >> >> >> Grüße >> Thomas >> >> >> On 2022-07-27T17:48:58+0200, I wrote: >>> Hi Tom! >>> >>> Ping. >>> >>> >>> Grüße >>> Thomas >>> >>> >>> On 2022-07-20T14:46:03+0200, I wrote: >>>> Hi Tom! >>>> >>>> Ping. >>>> >>>> >>>> Grüße >>>> Thomas >>>> >>>> >>>> On 2022-07-13T10:42:44+0200, I wrote: >>>>> Hi Tom! >>>>> >>>>> Ping. >>>>> >>>>> >>>>> Grüße >>>>> Thomas >>>>> >>>>> >>>>> On 2022-07-05T16:59:23+0200, I wrote: >>>>>> Hi Tom! >>>>>> >>>>>> Ping. >>>>>> >>>>>> >>>>>> Grüße >>>>>> Thomas >>>>>> >>>>>> >>>>>> On 2022-06-15T23:18:10+0200, I wrote: >>>>>>> Hi Tom! >>>>>>> >>>>>>> On 2022-05-13T16:20:14+0200, I wrote: >>>>>>>> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>>>>>>>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>>>>>>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>>>>>>>> I've tested this using (recommended) driver 470.94 on boards: >>>>>>>> >>>>>>>>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>>>>>>>> >>>>>>>>>> Do you use separate (nvptx-none offload target only?) builds for >>>>>>>>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>>>>>>>> multilib configuration? >>>>>>>>> >>>>>>>>> Neither, I'm using --target_board=unix/foffload= for that. >>>>>>>> >>>>>>>> ACK, I see. So these flags then only affect GCC/nvptx code generation >>>>>>>> for the actual user code (here: GCC libgomp test cases), but for the >>>>>>>> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >>>>>>>> the latter especially relevant for OpenMP), it uses PTX code from one of >>>>>>>> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >>>>>>>> >>>>>>>> Meaning, one can't just use such a flag for "completely building code" >>>>>>>> for a specific configuration. Random example, >>>>>>>> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >>>>>>>> libraries aren't being built for '-march=sm_75' multilib, >>>>>>>> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >>>>>>>> which isn't '-march=sm_75'. >>>>>>>> >>>>>>>> >>>>>>>>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>>>>>>>> etc., I suppose?) Should we add a few representative configurations to >>>>>>>>>> be built by default? And/or, should we have a way to 'configure' per >>>>>>>>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>>>>>>>> few other targets?)? (I see there's also a new >>>>>>>>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>>>>>>>> which way: again, combinatorial explosion is a problem, of course... >>>>>>>>> >>>>>>>>> As far as I know, the gcc build doesn't finish when switching default to >>>>>>>>> higher than sm_35, so there's little point to go to a multilib setup at >>>>>>>>> this point. But once we fix that, we could reconsider, otherwise, >>>>>>>>> things are likely to regress again. >>>>>>>> >>>>>>>> As far as I remember, several issues have been fixed. Still waiting for >>>>>>>> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >>>>>>>> or something similar, but that PR104489 issue is being worked around by >>>>>>>> "Limit HFmode support to mexperimental", if I got that right. >>>>>>>> >>>>>>>> Now I'm not suggesting we should now enable all or any random GCC/nvptx >>>>>>>> multilibs, to get all these variants of GCC/nvptx target libraries built; >>>>>>>> especially also given that GCC/nvptx code generation currently doesn't >>>>>>>> make too much use of the new capabilities. >>>>>>>> >>>>>>>> However, we do have a specific request that a customer would like to be >>>>>>>> able to change at GCC 'configure' time the GCC/nvptx default multilib >>>>>>>> (including that being used for building corresponding GCC/nvptx target >>>>>>>> libraries). >>>>>>>> >>>>>>>> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >>>>>>>> GCC 'configure'-time '--with-multilib-list=[...]', or >>>>>>>> '--with-multilib-generator=[...]', and I suppose we could be doing >>>>>>>> something similar? But before starting implementing, I'd like your >>>>>>>> input, as you'll be the one to approve in the end. And/or, maybe you've >>>>>>>> already made up your own ideas about that? >>>>>>> >>>>>>> So, instead of "random GCC/nvptx multilib configuration" (last >>>>>>> paragraph), I've come up with a way to implement our customer's request >>>>>>> (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. >>>>>>> >>>>>>> I think I've implemented this in a way so that "random GCC/nvptx multilib >>>>>>> configuration" may eventually be implemented on top of that. For easy >>>>>>> review/testing I've split my changes into three commits, see attached >>>>>>> "nvptx: Make default '-misa=sm_30' explicit", >>>>>>> "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", >>>>>>> "nvptx: Allow '--with-arch' to override the default '-misa'". >>>>>>> >>>>>>> To the best of my knowledge, the first two patches do not change any >>>>>>> user-visible behavior (I generally 'diff'ed target libraries, and >>>>>>> compared a good number of 'gcc -print-multi-directory [flags]'), and >>>>>>> likewise with the third patch, given implicit (default) or explicit >>>>>>> '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the >>>>>>> '-misa=sm_70' multilib variants are used for implicit (default) or >>>>>>> explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants >>>>>>> are used for explicit lower '-misa'. >>>>>>> >>>>>>> What do you think, OK to push to master branch? >>>>>>> >>>>>>> >>>>>>> Grüße >>>>>>> Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-nvptx-Make-default-misa-sm_30-explicit.patch --] [-- Type: text/x-diff, Size: 2757 bytes --] From ae782b3d1db7a9b2dea744d2a718bec94ac57677 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 1/3] nvptx: Make default '-misa=sm_30' explicit ... primarily in preparation for later changes. --- gcc/config.gcc | 16 ++++++++++++++++ gcc/config/nvptx/nvptx.cc | 4 ++++ gcc/config/nvptx/nvptx.h | 4 ++++ gcc/config/nvptx/nvptx.opt | 2 +- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 16d304286d7..3b1bde78391 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4043,6 +4043,9 @@ if test x$with_arch = x ; then mips*-*-vxworks) with_arch=mips2 ;; + nvptx-*) + with_arch=sm_30 + ;; esac # Avoid overriding --with-arch-32 and --with-arch-64 values. @@ -5436,6 +5439,19 @@ case "${target}" in esac ;; + nvptx-*) + supported_defaults=arch + case $with_arch in + sm_30 ) + # OK; default. + ;; + * ) + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + ;; + esac + ;; + powerpc*-*-* | rs6000-*-*) supported_defaults="abi cpu cpu_32 cpu_64 float tune tune_32 tune_64 advance_toolchain" diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc index e4297e2d6c3..071759b9582 100644 --- a/gcc/config/nvptx/nvptx.cc +++ b/gcc/config/nvptx/nvptx.cc @@ -335,6 +335,10 @@ nvptx_option_override (void) { init_machine_status = nvptx_init_machine_status; + /* Via nvptx 'OPTION_DEFAULT_SPECS', '-misa' always appears on the command + line. */ + gcc_checking_assert (OPTION_SET_P (ptx_isa_option)); + handle_ptx_version_option (); /* Set toplevel_reorder, unless explicitly disabled. We need diff --git a/gcc/config/nvptx/nvptx.h b/gcc/config/nvptx/nvptx.h index b184f1d0150..629d4a5d8bc 100644 --- a/gcc/config/nvptx/nvptx.h +++ b/gcc/config/nvptx/nvptx.h @@ -27,6 +27,10 @@ /* Run-time Target. */ +/* Use '--with-arch' for default '-misa'. */ +#define OPTION_DEFAULT_SPECS \ + { "arch", "%{!misa=*:-misa=%(VALUE)}" }, \ + /* Assembler supports '-v' option; handle similar to '../../gcc.cc:asm_options', 'HAVE_GNU_AS'. */ #define ASM_SPEC "%{v}" diff --git a/gcc/config/nvptx/nvptx.opt b/gcc/config/nvptx/nvptx.opt index c5a5668fce5..71d3b68510b 100644 --- a/gcc/config/nvptx/nvptx.opt +++ b/gcc/config/nvptx/nvptx.opt @@ -53,7 +53,7 @@ Target Mask(GOMP) Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt. misa= -Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM30) +Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Specify the PTX ISA target architecture to use. march= -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #3: 0002-nvptx-Introduce-dummy-multilib-option-for-default-mi.patch --] [-- Type: text/x-diff, Size: 1699 bytes --] From 7889fb2d0ee1583a39ed1e2d4aadfd459edea9af Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 12:28:36 +0200 Subject: [PATCH 2/3] nvptx: Introduce dummy multilib option for default '-misa=sm_30' ... primarily in preparation for later changes. --- gcc/config.gcc | 1 + gcc/config/nvptx/t-nvptx | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 3b1bde78391..d492b7769fe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5441,6 +5441,7 @@ case "${target}" in nvptx-*) supported_defaults=arch + TM_MULTILIB_CONFIG=$with_arch case $with_arch in sm_30 ) # OK; default. diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index 2b68149ed7e..c797d57690f 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -31,4 +31,22 @@ s-nvptx-gen-opt: $(srcdir)/config/nvptx/nvptx-sm.def \ tmp-nvptx-gen.opt $(srcdir)/config/nvptx/nvptx-gen.opt $(STAMP) s-nvptx-gen-opt -MULTILIB_OPTIONS = mgomp mptx=3.1 + +# Multilib setup. + +MULTILIB_OPTIONS = +MULTILIB_MATCHES = +MULTILIB_EXCEPTIONS = + +MULTILIB_OPTIONS += mgomp + +multilib_options_isa_list := $(TM_MULTILIB_CONFIG) +multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) +# Add the default '-misa' as a multilib option: +MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) +# ..., but don't handle it specially (remap to default): +MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) +# ..., and don't actually build it: +MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* + +MULTILIB_OPTIONS += mptx=3.1 -- 2.25.1 [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #4: 0003-nvptx-Allow-with-arch-to-override-the-default-misa.patch --] [-- Type: text/x-diff, Size: 6427 bytes --] From 8343b7d0ed96cf5d45c12b36ea34a156229b8745 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Sat, 11 Jun 2022 19:37:10 +0200 Subject: [PATCH 3/3] nvptx: Allow '--with-arch' to override the default '-misa' --- gcc/config.gcc | 5 ++ gcc/config/nvptx/gen-multilib-matches.sh | 60 ++++++++++++++++++++++++ gcc/config/nvptx/t-nvptx | 21 +++++++-- gcc/doc/install.texi | 9 ++++ gcc/doc/invoke.texi | 4 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 gcc/config/nvptx/gen-multilib-matches.sh diff --git a/gcc/config.gcc b/gcc/config.gcc index d492b7769fe..8f51d333668 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -5442,10 +5442,15 @@ case "${target}" in nvptx-*) supported_defaults=arch TM_MULTILIB_CONFIG=$with_arch + #TODO 'sm_[...]' list per 'nvptx-sm.def'. case $with_arch in sm_30 ) # OK; default. ;; + sm_35 | sm_53 | sm_70 | sm_75 | sm_80 ) + # OK, but we'd like 'sm_30', too. + TM_MULTILIB_CONFIG="$TM_MULTILIB_CONFIG sm_30" + ;; * ) echo "Unknown arch used in --with-arch=$with_arch" 1>&2 exit 1 diff --git a/gcc/config/nvptx/gen-multilib-matches.sh b/gcc/config/nvptx/gen-multilib-matches.sh new file mode 100755 index 00000000000..9a5878e855b --- /dev/null +++ b/gcc/config/nvptx/gen-multilib-matches.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# Print nvptx 'MULTILIB_MATCHES' + +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +set -e + +nvptx_sm_def="$1/nvptx-sm.def" +multilib_options_isa_default=$2 +multilib_options_isa_list=$3 + +sms=$(grep ^NVPTX_SM $nvptx_sm_def | sed 's/.*(//;s/,.*//') + +# Every variant in 'sms' has to either be remapped to the default variant +# ('.', which is always built), or does get built as non-default variant +# ('misa=sm_SM'; thus not remapped), or has to be remapped to the "next lower" +# variant that does get built. + +# The "lowest" variant has to be built. +sm_next_lower=INVALID + +for sm in $sms; do + if [ x"sm_$sm" = x"$multilib_options_isa_default" ]; then + sm_map=. + elif expr " $multilib_options_isa_list " : ".* sm_$sm " > /dev/null; then + sm_map= + else + sm_map=$sm_next_lower + fi + + if [ x"$sm_map" = x ]; then + sm_next_lower=$sm + else + # Output format as required for 'MULTILIB_MATCHES'. + if [ x"$sm_map" = x. ]; then + echo ".=misa?sm_$sm" + else + echo "misa?sm_$sm_map=misa?sm_$sm" + fi + + sm_next_lower=$sm_map + fi +done diff --git a/gcc/config/nvptx/t-nvptx b/gcc/config/nvptx/t-nvptx index c797d57690f..9c5cbda0070 100644 --- a/gcc/config/nvptx/t-nvptx +++ b/gcc/config/nvptx/t-nvptx @@ -42,11 +42,22 @@ MULTILIB_OPTIONS += mgomp multilib_options_isa_list := $(TM_MULTILIB_CONFIG) multilib_options_isa_default := $(word 1,$(multilib_options_isa_list)) -# Add the default '-misa' as a multilib option: -MULTILIB_OPTIONS += misa=$(multilib_options_isa_default) -# ..., but don't handle it specially (remap to default): -MULTILIB_MATCHES += .=misa?$(multilib_options_isa_default) -# ..., and don't actually build it: +multilib_options_misa_list := $(addprefix misa=,$(multilib_options_isa_list)) +# Add the requested '-misa' variants as a multilib option ('misa=VAR1/misa=VAR2/misa=VAR3' etc.): +empty := +space := $(empty) $(empty) +MULTILIB_OPTIONS += $(subst $(space),/,$(multilib_options_misa_list)) +# ..., and remap '-misa' variants as appropriate: +multilib_matches := $(shell $(srcdir)/config/nvptx/gen-multilib-matches.sh $(srcdir)/config/nvptx $(multilib_options_isa_default) "$(multilib_options_isa_list)") +MULTILIB_MATCHES += $(multilib_matches) +# ..., and don't actually build what's the default '-misa': MULTILIB_EXCEPTIONS += *misa=$(multilib_options_isa_default)* MULTILIB_OPTIONS += mptx=3.1 +# Filter out invalid '-misa'/'-mptx=3.1' combinations; per 'nvptx-sm.def', +# 'nvptx.opt:ptx_version', 'nvptx.cc:first_ptx_version_supporting_sm' +# (that is, '-mptx=3.1' only for sm_30, sm_35 variants): +MULTILIB_EXCEPTIONS += $(foreach misa,$(filter-out %=sm_30 %=sm_35,$(multilib_options_misa_list)),*$(misa)/mptx=3.1) +# ..., and special care has to be taken if '-mptx=3.1' is invalid for the +# default variant: +MULTILIB_EXCEPTIONS += $(if $(filter-out sm_30 sm_35,$(multilib_options_isa_default)),mgomp/mptx=3.1 mptx=3.1) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 45ef39da04e..7b4073bdafc 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4617,6 +4617,15 @@ the GCC sources. Use the @option{--disable-sjlj-exceptions} and @option{--enable-newlib-io-long-long} options when configuring. +The @option{--with-arch} option may be specified to override the +default value for the @option{-march} option, and to also build +corresponding target libraries. +The default is @option{--with-arch=sm_30}. + +For example, if @option{--with-arch=sm_70} is specified, +@option{-march=sm_30} and @option{-march=sm_70} target libraries are +built, and code generation defaults to @option{-march=sm_70}. + @html <hr /> @end html diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e11b5bdb347..d96152b32a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -27549,7 +27549,9 @@ supported. Generate code for the specified PTX ISA target architecture (e.g.@: @samp{sm_35}). Valid architecture strings are @samp{sm_30}, @samp{sm_35}, @samp{sm_53}, @samp{sm_70}, @samp{sm_75} and -@samp{sm_80}. The default target architecture is sm_30. +@samp{sm_80}. +The default depends on how the compiler has been configured, see +@option{--with-arch}. This option sets the value of the preprocessor macro @code{__PTX_SM__}; for instance, for @samp{sm_35}, it has the value -- 2.25.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PING^5] nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) 2022-08-06 19:20 ` [PING^5] " Thomas Schwinge 2022-08-16 15:13 ` [PING^6] " Thomas Schwinge @ 2022-09-18 8:53 ` Tom de Vries 1 sibling, 0 replies; 9+ messages in thread From: Tom de Vries @ 2022-09-18 8:53 UTC (permalink / raw) To: Thomas Schwinge, gcc-patches On 8/6/22 21:20, Thomas Schwinge wrote: > Hi Tom! > Hi Thomas, thanks for doing this. Series approved. As I mentioned, I'm not completely happy with the multilib name, but I don't think it makes sense to post-pone approval for this. Thanks, - Tom > Ping. > > > Grüße > Thomas > > > On 2022-07-27T17:48:58+0200, I wrote: >> Hi Tom! >> >> Ping. >> >> >> Grüße >> Thomas >> >> >> On 2022-07-20T14:46:03+0200, I wrote: >>> Hi Tom! >>> >>> Ping. >>> >>> >>> Grüße >>> Thomas >>> >>> >>> On 2022-07-13T10:42:44+0200, I wrote: >>>> Hi Tom! >>>> >>>> Ping. >>>> >>>> >>>> Grüße >>>> Thomas >>>> >>>> >>>> On 2022-07-05T16:59:23+0200, I wrote: >>>>> Hi Tom! >>>>> >>>>> Ping. >>>>> >>>>> >>>>> Grüße >>>>> Thomas >>>>> >>>>> >>>>> On 2022-06-15T23:18:10+0200, I wrote: >>>>>> Hi Tom! >>>>>> >>>>>> On 2022-05-13T16:20:14+0200, I wrote: >>>>>>> On 2022-02-04T13:09:29+0100, Tom de Vries via Gcc <gcc@gcc.gnu.org> wrote: >>>>>>>> On 2/4/22 08:21, Thomas Schwinge wrote: >>>>>>>>> On 2022-02-03T13:35:55+0000, "vries at gcc dot gnu.org via Gcc-bugs" <gcc-bugs@gcc.gnu.org> wrote: >>>>>>>>>> I've tested this using (recommended) driver 470.94 on boards: >>>>>>> >>>>>>>>>> while iterating over dimensions { -mptx=3.1 , -mptx=6.3 } x { GOMP_NVPTX_JIT=-O0, <default> }. >>>>>>>>> >>>>>>>>> Do you use separate (nvptx-none offload target only?) builds for >>>>>>>>> different '-mptx' variants (likewise: '-misa'), or have you hacked up the >>>>>>>>> multilib configuration? >>>>>>>> >>>>>>>> Neither, I'm using --target_board=unix/foffload= for that. >>>>>>> >>>>>>> ACK, I see. So these flags then only affect GCC/nvptx code generation >>>>>>> for the actual user code (here: GCC libgomp test cases), but for the >>>>>>> GCC/nvptx target libraries (such as: libc, libm, libgfortran, libgomp -- >>>>>>> the latter especially relevant for OpenMP), it uses PTX code from one of >>>>>>> the two "pre-compiled" GCC/nvptx multilibs: default or '-mptx=3.1'. >>>>>>> >>>>>>> Meaning, one can't just use such a flag for "completely building code" >>>>>>> for a specific configuration. Random example, >>>>>>> '-foffload-options=nvptx-none=-march=sm_75': as GCC/nvptx target >>>>>>> libraries aren't being built for '-march=sm_75' multilib, >>>>>>> '-foffload-options=nvptx-none=-march=sm_75' uses the default multilib, >>>>>>> which isn't '-march=sm_75'. >>>>>>> >>>>>>> >>>>>>>> ('gcc/config/nvptx/t-nvptx:MULTILIB_OPTIONS' >>>>>>>>> etc., I suppose?) Should we add a few representative configurations to >>>>>>>>> be built by default? And/or, should we have a way to 'configure' per >>>>>>>>> user needs (I suppose: '--with-multilib-list=[...]', as supported for a >>>>>>>>> few other targets?)? (I see there's also a new >>>>>>>>> '--with-multilib-generator=[...]', haven't looked in detail.) No matter >>>>>>>>> which way: again, combinatorial explosion is a problem, of course... >>>>>>>> >>>>>>>> As far as I know, the gcc build doesn't finish when switching default to >>>>>>>> higher than sm_35, so there's little point to go to a multilib setup at >>>>>>>> this point. But once we fix that, we could reconsider, otherwise, >>>>>>>> things are likely to regress again. >>>>>>> >>>>>>> As far as I remember, several issues have been fixed. Still waiting for >>>>>>> Roger's "middle-end: Support ABIs that pass FP values as wider integers" >>>>>>> or something similar, but that PR104489 issue is being worked around by >>>>>>> "Limit HFmode support to mexperimental", if I got that right. >>>>>>> >>>>>>> Now I'm not suggesting we should now enable all or any random GCC/nvptx >>>>>>> multilibs, to get all these variants of GCC/nvptx target libraries built; >>>>>>> especially also given that GCC/nvptx code generation currently doesn't >>>>>>> make too much use of the new capabilities. >>>>>>> >>>>>>> However, we do have a specific request that a customer would like to be >>>>>>> able to change at GCC 'configure' time the GCC/nvptx default multilib >>>>>>> (including that being used for building corresponding GCC/nvptx target >>>>>>> libraries). >>>>>>> >>>>>>> Per 'gcc/doc/install.texi', I do see that some GCC targets allow for >>>>>>> GCC 'configure'-time '--with-multilib-list=[...]', or >>>>>>> '--with-multilib-generator=[...]', and I suppose we could be doing >>>>>>> something similar? But before starting implementing, I'd like your >>>>>>> input, as you'll be the one to approve in the end. And/or, maybe you've >>>>>>> already made up your own ideas about that? >>>>>> >>>>>> So, instead of "random GCC/nvptx multilib configuration" (last >>>>>> paragraph), I've come up with a way to implement our customer's request >>>>>> (second last paragraph): 'configure' GCC/nvptx '--with-arch=sm_70'. >>>>>> >>>>>> I think I've implemented this in a way so that "random GCC/nvptx multilib >>>>>> configuration" may eventually be implemented on top of that. For easy >>>>>> review/testing I've split my changes into three commits, see attached >>>>>> "nvptx: Make default '-misa=sm_30' explicit", >>>>>> "nvptx: Introduce dummy multilib option for default '-misa=sm_30'", >>>>>> "nvptx: Allow '--with-arch' to override the default '-misa'". >>>>>> >>>>>> To the best of my knowledge, the first two patches do not change any >>>>>> user-visible behavior (I generally 'diff'ed target libraries, and >>>>>> compared a good number of 'gcc -print-multi-directory [flags]'), and >>>>>> likewise with the third patch, given implicit (default) or explicit >>>>>> '--with-arch=sm_30', and that with '--with-arch=sm_70', for example, the >>>>>> '-misa=sm_70' multilib variants are used for implicit (default) or >>>>>> explicit '-misa=sm_70' or higher, and the '-misa=sm_30' multilib variants >>>>>> are used for explicit lower '-misa'. >>>>>> >>>>>> What do you think, OK to push to master branch? >>>>>> >>>>>> >>>>>> Grüße >>>>>> Thomas > > > ----------------- > Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-09-18 8:53 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <bug-104364-4@http.gcc.gnu.org/bugzilla/> [not found] ` <bug-104364-4-ILKfZXTaRC@http.gcc.gnu.org/bugzilla/> [not found] ` <87r18jt7uu.fsf@euler.schwinge.homeip.net> [not found] ` <cc77f4ed-fdb6-7536-a0ba-8802eb231bcc@suse.de> [not found] ` <87o801see9.fsf@euler.schwinge.homeip.net> 2022-06-15 21:18 ` nvptx: Allow '--with-arch' to override the default '-misa' (was: nvptx multilib setup) Thomas Schwinge 2022-07-05 14:59 ` [PING] " Thomas Schwinge 2022-07-13 8:42 ` [PING^2] " Thomas Schwinge 2022-07-20 12:46 ` [PING^3] " Thomas Schwinge 2022-07-27 15:48 ` [PING^4] " Thomas Schwinge 2022-08-06 19:20 ` [PING^5] " Thomas Schwinge 2022-08-16 15:13 ` [PING^6] " Thomas Schwinge 2022-08-30 13:44 ` [PING^7] " Thomas Schwinge 2022-09-18 8:53 ` [PING^5] " Tom de Vries
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).