This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[GCC Steering Committee attention] [PING] [PING] [PING] libgomp: In OpenACC testing, cycle though $offload_targets, and by default only build for the offload target that we're actually going to test


Hi!

Ping.

It has now been more than three months (!) that I first submitted this,
without receiving any meaningful review.  (Apart from one initial
"deprecative" comment by Jakub, which I then repeatedly detailed on,
without receiving any further response.)
<https://gcc.gnu.org/ml/gcc-patches/2016-04/msg01787.html>.

I suppose, if I weren't paid for paid for this, I would have run away
long ago, and would have looked for another project to contribute to.
:-(

I'm CCing the GCC Steering Committee here -- not necessarily only because
of this one patch, but generally, I think it's a bad situation that
apparently Jakub (who I acknowledge is always very busy with all kinds of
tasks) has de facto become the single reviewer of
OpenACC/OpenMP/offloading patches.  I'm certainly not going in any way to
disapprove Jakub's help, skills and experience, but I'm more and more
worried about this "bus factor" of one single person
(<https://en.wikipedia.org/wiki/Bus_factor>).

As I'm unable (huh?) to find an email address to reach the GCC Steering
Committee, I'm CCing <gcc@gcc.gnu.org> as suggested on
<https://gcc.gnu.org/steering.html>, and David Edelsohn, who seems to
handle most of the visible communication of the GCC Steering Committee.

When raising a similar concern months ago, an answer as given (by Jakub
himself, if I remember correctly), was that in addition to him, all
Global Reviewers are welcome to review OpenACC/OpenMP/offloading patches.
But that doesn't help if that's then not happening in reality.  (With the
exception of Bernd, who then did review such patches for a while, but
also seems to have stopped with that again.)

To the best of my knowledge, I'm following the procedures correctly
(please tell me if I'm not!), including pinging patches regularly (once a
week, typically).

Help.  I'm just trying to contribute my share for keeping GCC alive and
relevant.  :-)

On Wed, 27 Jul 2016 18:03:32 +0200, I wrote:
> Ping.
> 
> On Wed, 20 Jul 2016 13:52:20 +0200, I wrote:
> > Ping.
> > 
> > On Wed, 13 Jul 2016 12:37:07 +0200, I wrote:
> > > As discussed before, "offloading compilation is slow; I suppose because
> > > of having to invoke several tools (LTO streaming -> mkoffload -> offload
> > > compilers, assemblers, linkers -> combine the resulting images; but I
> > > have not done a detailed analysis on that)".  For this reason it is
> > > beneficial (that is, it is measurable in libgomp testing wall time) to
> > > limit offload compilation to the one (in the OpenACC case) offload target
> > > that we're actually going to test (that is, execute).  Another reason is
> > > that -foffload=-fdump-tree-[...] produces clashes (that is,
> > > unpredicatable outcome) in the file names of offload compilations' dump
> > > files' names.  Here is a patch to implement that, to specify
> > > -foffload=[...] during libgomp OpenACC testing.  As that has been
> > > challenged before:
> > > 
> > > | [...] there actually is a difference between offload_plugins and
> > > | offload_targets (for example, "intelmic"
> > > | vs. "x86_64-intelmicemul-linux-gnu"), and I'm using both variables --
> > > | to avoid having to translate the more specific
> > > | "x86_64-intelmicemul-linux-gnu" (which we required in the test harness)
> > > | into the less specific "intelmic" (for plugin loading) in
> > > | libgomp/target.c.  I can do that, so that we can continue to use just a
> > > | single offload_targets variable, but I consider that a less elegant
> > > | solution.
> > > 
> > > OK for trunk?
> > > 
> > > commit 5fdb515826769ebb36bc5c49a3ffac4d17a8a589
> > > Author: Thomas Schwinge <thomas@codesourcery.com>
> > > Date:   Wed Jul 13 11:37:16 2016 +0200
> > > 
> > >     libgomp: In OpenACC testing, cycle though $offload_targets, and by default only build for the offload target that we're actually going to test
> > >     
> > >     	libgomp/
> > >     	* plugin/configfrag.ac: Enumerate both offload plugins and offload
> > >     	targets.
> > >     	(OFFLOAD_PLUGINS): Renamed from OFFLOAD_TARGETS.
> > >     	* target.c (gomp_target_init): Adjust to that.
> > >     	* testsuite/lib/libgomp.exp: Likewise.
> > >     	(offload_targets_s, offload_targets_s_openacc): Remove variables.
> > >     	(offload_target_to_openacc_device_type): New proc.
> > >     	(check_effective_target_openacc_nvidia_accel_selected)
> > >     	(check_effective_target_openacc_host_selected): Examine
> > >     	$openacc_device_type instead of $offload_target_openacc.
> > >     	* Makefile.in: Regenerate.
> > >     	* config.h.in: Likewise.
> > >     	* configure: Likewise.
> > >     	* testsuite/Makefile.in: Likewise.
> > >     	* testsuite/libgomp.oacc-c++/c++.exp: Cycle through
> > >     	$offload_targets (plus "disable") instead of
> > >     	$offload_targets_s_openacc, and add "-foffload=$offload_target" to
> > >     	tagopt.
> > >     	* testsuite/libgomp.oacc-c/c.exp: Likewise.
> > >     	* testsuite/libgomp.oacc-fortran/fortran.exp: Likewise.
> > > ---
> > >  libgomp/Makefile.in                                |  1 +
> > >  libgomp/config.h.in                                |  4 +-
> > >  libgomp/configure                                  | 44 +++++++------
> > >  libgomp/plugin/configfrag.ac                       | 39 +++++++-----
> > >  libgomp/target.c                                   |  8 +--
> > >  libgomp/testsuite/Makefile.in                      |  1 +
> > >  libgomp/testsuite/lib/libgomp.exp                  | 72 ++++++++++------------
> > >  libgomp/testsuite/libgomp.oacc-c++/c++.exp         | 30 +++++----
> > >  libgomp/testsuite/libgomp.oacc-c/c.exp             | 30 +++++----
> > >  libgomp/testsuite/libgomp.oacc-fortran/fortran.exp | 22 ++++---
> > >  10 files changed, 142 insertions(+), 109 deletions(-)
> > > 
> > > diff --git libgomp/Makefile.in libgomp/Makefile.in
> > > index 88c8517..33be8c7 100644
> > > --- libgomp/Makefile.in
> > > +++ libgomp/Makefile.in
> > > @@ -380,6 +380,7 @@ mkdir_p = @mkdir_p@
> > >  multi_basedir = @multi_basedir@
> > >  offload_additional_lib_paths = @offload_additional_lib_paths@
> > >  offload_additional_options = @offload_additional_options@
> > > +offload_plugins = @offload_plugins@
> > >  offload_targets = @offload_targets@
> > >  oldincludedir = @oldincludedir@
> > >  pdfdir = @pdfdir@
> > > diff --git libgomp/config.h.in libgomp/config.h.in
> > > index 226ac53..28f7b2d 100644
> > > --- libgomp/config.h.in
> > > +++ libgomp/config.h.in
> > > @@ -98,8 +98,8 @@
> > >     */
> > >  #undef LT_OBJDIR
> > >  
> > > -/* Define to offload targets, separated by commas. */
> > > -#undef OFFLOAD_TARGETS
> > > +/* Define to offload plugins, separated by commas. */
> > > +#undef OFFLOAD_PLUGINS
> > >  
> > >  /* Name of package */
> > >  #undef PACKAGE
> > > diff --git libgomp/configure libgomp/configure
> > > index 8d03eb6..4baab20 100755
> > > --- libgomp/configure
> > > +++ libgomp/configure
> > > @@ -633,6 +633,8 @@ PLUGIN_NVPTX_FALSE
> > >  PLUGIN_NVPTX_TRUE
> > >  offload_additional_lib_paths
> > >  offload_additional_options
> > > +offload_targets
> > > +offload_plugins
> > >  PLUGIN_HSA_LIBS
> > >  PLUGIN_HSA_LDFLAGS
> > >  PLUGIN_HSA_CPPFLAGS
> > > @@ -646,7 +648,6 @@ PLUGIN_NVPTX_CPPFLAGS
> > >  PLUGIN_NVPTX
> > >  CUDA_DRIVER_LIB
> > >  CUDA_DRIVER_INCLUDE
> > > -offload_targets
> > >  libtool_VERSION
> > >  ac_ct_FC
> > >  FCFLAGS
> > > @@ -11145,7 +11146,7 @@ else
> > >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> > >    lt_status=$lt_dlunknown
> > >    cat > conftest.$ac_ext <<_LT_EOF
> > > -#line 11148 "configure"
> > > +#line 11149 "configure"
> > >  #include "confdefs.h"
> > >  
> > >  #if HAVE_DLFCN_H
> > > @@ -11251,7 +11252,7 @@ else
> > >    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> > >    lt_status=$lt_dlunknown
> > >    cat > conftest.$ac_ext <<_LT_EOF
> > > -#line 11254 "configure"
> > > +#line 11255 "configure"
> > >  #include "confdefs.h"
> > >  
> > >  #if HAVE_DLFCN_H
> > > @@ -15140,8 +15141,6 @@ esac
> > >  # see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> > >  # <http://www.gnu.org/licenses/>.
> > >  
> > > -offload_targets=
> > > -
> > >  plugin_support=yes
> > >  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlsym in -ldl" >&5
> > >  $as_echo_n "checking for dlsym in -ldl... " >&6; }
> > > @@ -15320,7 +15319,13 @@ PLUGIN_HSA_LIBS=
> > >  
> > >  
> > >  
> > > -# Get offload targets and path to install tree of offloading compiler.
> > > +# Parse offload targets, and figure out libgomp plugin, and configure the
> > > +# corresponding offload compiler.  offload_plugins and offload_targets will be
> > > +# populated in the same order.
> > > +offload_plugins=
> > > +offload_targets=
> > > +
> > > +
> > >  offload_additional_options=
> > >  offload_additional_lib_paths=
> > >  
> > > @@ -15329,13 +15334,13 @@ if test x"$enable_offload_targets" != x; then
> > >    for tgt in `echo $enable_offload_targets | sed -e 's#,# #g'`; do
> > >      tgt_dir=`echo $tgt | grep '=' | sed 's/.*=//'`
> > >      tgt=`echo $tgt | sed 's/=.*//'`
> > > -    tgt_name=
> > > +    tgt_plugin=
> > >      case $tgt in
> > >        *-intelmic-* | *-intelmicemul-*)
> > > -	tgt_name=intelmic
> > > +	tgt_plugin=intelmic
> > >  	;;
> > >        nvptx*)
> > > -        tgt_name=nvptx
> > > +	tgt_plugin=nvptx
> > >  	PLUGIN_NVPTX=$tgt
> > >  	PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
> > >  	PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
> > > @@ -15373,7 +15378,7 @@ rm -f core conftest.err conftest.$ac_objext \
> > >  	    ;;
> > >  	esac
> > >  	;;
> > > -      hsa*)
> > > +      hsa)
> > >  	case "${target}" in
> > >  	  x86_64-*-*)
> > >  	    case " ${CC} ${CFLAGS} " in
> > > @@ -15381,7 +15386,7 @@ rm -f core conftest.err conftest.$ac_objext \
> > >  	        PLUGIN_HSA=0
> > >  		;;
> > >  	      *)
> > > -	        tgt_name=hsa
> > > +		tgt_plugin=hsa
> > >  	        PLUGIN_HSA=$tgt
> > >  	        PLUGIN_HSA_CPPFLAGS=$HSA_RUNTIME_CPPFLAGS
> > >  	        PLUGIN_HSA_LDFLAGS="$HSA_RUNTIME_LDFLAGS $HSA_KMT_LDFLAGS"
> > > @@ -15414,7 +15419,7 @@ rm -f core conftest.err conftest.$ac_objext \
> > >  	        LDFLAGS=$PLUGIN_HSA_save_LDFLAGS
> > >  	        LIBS=$PLUGIN_HSA_save_LIBS
> > >  	        case $PLUGIN_HSA in
> > > -	          hsa*)
> > > +		  hsa)
> > >  	            HSA_PLUGIN=0
> > >  	            as_fn_error "HSA run-time package required for HSA support" "$LINENO" 5
> > >  	            ;;
> > > @@ -15431,16 +15436,19 @@ rm -f core conftest.err conftest.$ac_objext \
> > >  	as_fn_error "unknown offload target specified" "$LINENO" 5
> > >  	;;
> > >      esac
> > > -    if test x"$tgt_name" = x; then
> > > +    if test x"$tgt_plugin" = x; then
> > >        # Don't configure libgomp for this offloading target if we don't build
> > >        # the corresponding plugin.
> > >        continue
> > > -    elif test x"$offload_targets" = x; then
> > > -      offload_targets=$tgt_name
> > > +    elif test x"$offload_plugins" = x; then
> > > +      offload_plugins=$tgt_plugin
> > > +      offload_targets=$tgt
> > >      else
> > > -      offload_targets=$offload_targets,$tgt_name
> > > +      offload_plugins=$offload_plugins,$tgt_plugin
> > > +      offload_targets=$offload_targets,$tgt
> > >      fi
> > > -    if test "$tgt_name" = hsa; then
> > > +    # Configure additional search paths.
> > > +    if test "$tgt_plugin" = hsa; then
> > >        # Offloading compilation is all handled by the target compiler.
> > >        :
> > >      elif test x"$tgt_dir" != x; then
> > > @@ -15454,7 +15462,7 @@ rm -f core conftest.err conftest.$ac_objext \
> > >  fi
> > >  
> > >  cat >>confdefs.h <<_ACEOF
> > > -#define OFFLOAD_TARGETS "$offload_targets"
> > > +#define OFFLOAD_PLUGINS "$offload_plugins"
> > >  _ACEOF
> > >  
> > >   if test $PLUGIN_NVPTX = 1; then
> > > diff --git libgomp/plugin/configfrag.ac libgomp/plugin/configfrag.ac
> > > index 88b4156..de0a6f6 100644
> > > --- libgomp/plugin/configfrag.ac
> > > +++ libgomp/plugin/configfrag.ac
> > > @@ -26,8 +26,6 @@
> > >  # see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
> > >  # <http://www.gnu.org/licenses/>.
> > >  
> > > -offload_targets=
> > > -AC_SUBST(offload_targets)
> > >  plugin_support=yes
> > >  AC_CHECK_LIB(dl, dlsym, , [plugin_support=no])
> > >  if test x"$plugin_support" = xyes; then
> > > @@ -142,7 +140,13 @@ AC_SUBST(PLUGIN_HSA_LIBS)
> > >  
> > >  
> > >  
> > > -# Get offload targets and path to install tree of offloading compiler.
> > > +# Parse offload targets, and figure out libgomp plugin, and configure the
> > > +# corresponding offload compiler.  offload_plugins and offload_targets will be
> > > +# populated in the same order.
> > > +offload_plugins=
> > > +offload_targets=
> > > +AC_SUBST(offload_plugins)
> > > +AC_SUBST(offload_targets)
> > >  offload_additional_options=
> > >  offload_additional_lib_paths=
> > >  AC_SUBST(offload_additional_options)
> > > @@ -151,13 +155,13 @@ if test x"$enable_offload_targets" != x; then
> > >    for tgt in `echo $enable_offload_targets | sed -e 's#,# #g'`; do
> > >      tgt_dir=`echo $tgt | grep '=' | sed 's/.*=//'`
> > >      tgt=`echo $tgt | sed 's/=.*//'`
> > > -    tgt_name=
> > > +    tgt_plugin=
> > >      case $tgt in
> > >        *-intelmic-* | *-intelmicemul-*)
> > > -	tgt_name=intelmic
> > > +	tgt_plugin=intelmic
> > >  	;;
> > >        nvptx*)
> > > -        tgt_name=nvptx
> > > +	tgt_plugin=nvptx
> > >  	PLUGIN_NVPTX=$tgt
> > >  	PLUGIN_NVPTX_CPPFLAGS=$CUDA_DRIVER_CPPFLAGS
> > >  	PLUGIN_NVPTX_LDFLAGS=$CUDA_DRIVER_LDFLAGS
> > > @@ -184,7 +188,7 @@ if test x"$enable_offload_targets" != x; then
> > >  	    ;;
> > >  	esac
> > >  	;;
> > > -      hsa*)
> > > +      hsa)
> > >  	case "${target}" in
> > >  	  x86_64-*-*)
> > >  	    case " ${CC} ${CFLAGS} " in
> > > @@ -192,7 +196,7 @@ if test x"$enable_offload_targets" != x; then
> > >  	        PLUGIN_HSA=0
> > >  		;;
> > >  	      *)
> > > -	        tgt_name=hsa
> > > +		tgt_plugin=hsa
> > >  	        PLUGIN_HSA=$tgt
> > >  	        PLUGIN_HSA_CPPFLAGS=$HSA_RUNTIME_CPPFLAGS
> > >  	        PLUGIN_HSA_LDFLAGS="$HSA_RUNTIME_LDFLAGS $HSA_KMT_LDFLAGS"
> > > @@ -214,7 +218,7 @@ if test x"$enable_offload_targets" != x; then
> > >  	        LDFLAGS=$PLUGIN_HSA_save_LDFLAGS
> > >  	        LIBS=$PLUGIN_HSA_save_LIBS
> > >  	        case $PLUGIN_HSA in
> > > -	          hsa*)
> > > +		  hsa)
> > >  	            HSA_PLUGIN=0
> > >  	            AC_MSG_ERROR([HSA run-time package required for HSA support])
> > >  	            ;;
> > > @@ -231,16 +235,19 @@ if test x"$enable_offload_targets" != x; then
> > >  	AC_MSG_ERROR([unknown offload target specified])
> > >  	;;
> > >      esac
> > > -    if test x"$tgt_name" = x; then
> > > +    if test x"$tgt_plugin" = x; then
> > >        # Don't configure libgomp for this offloading target if we don't build
> > >        # the corresponding plugin.
> > >        continue
> > > -    elif test x"$offload_targets" = x; then
> > > -      offload_targets=$tgt_name
> > > +    elif test x"$offload_plugins" = x; then
> > > +      offload_plugins=$tgt_plugin
> > > +      offload_targets=$tgt
> > >      else
> > > -      offload_targets=$offload_targets,$tgt_name
> > > +      offload_plugins=$offload_plugins,$tgt_plugin
> > > +      offload_targets=$offload_targets,$tgt
> > >      fi
> > > -    if test "$tgt_name" = hsa; then
> > > +    # Configure additional search paths.
> > > +    if test "$tgt_plugin" = hsa; then
> > >        # Offloading compilation is all handled by the target compiler.
> > >        :
> > >      elif test x"$tgt_dir" != x; then
> > > @@ -252,8 +259,8 @@ if test x"$enable_offload_targets" != x; then
> > >      fi
> > >    done
> > >  fi
> > > -AC_DEFINE_UNQUOTED(OFFLOAD_TARGETS, "$offload_targets",
> > > -  [Define to offload targets, separated by commas.])
> > > +AC_DEFINE_UNQUOTED(OFFLOAD_PLUGINS, "$offload_plugins",
> > > +  [Define to offload plugins, separated by commas.])
> > >  AM_CONDITIONAL([PLUGIN_NVPTX], [test $PLUGIN_NVPTX = 1])
> > >  AC_DEFINE_UNQUOTED([PLUGIN_NVPTX], [$PLUGIN_NVPTX],
> > >    [Define to 1 if the NVIDIA plugin is built, 0 if not.])
> > > diff --git libgomp/target.c libgomp/target.c
> > > index 48b9ab8..2b7e627 100644
> > > --- libgomp/target.c
> > > +++ libgomp/target.c
> > > @@ -2474,9 +2474,9 @@ gomp_target_fini (void)
> > >      }
> > >  }
> > >  
> > > -/* This function initializes the runtime needed for offloading.
> > > -   It parses the list of offload targets and tries to load the plugins for
> > > -   these targets.  On return, the variables NUM_DEVICES and NUM_DEVICES_OPENMP
> > > +/* This function initializes the runtime for offloading.
> > > +   It parses the list of offload plugins, and tries to load these.
> > > +   On return, the variables NUM_DEVICES and NUM_DEVICES_OPENMP
> > >     will be set, and the array DEVICES initialized, containing descriptors for
> > >     corresponding devices, first the GOMP_OFFLOAD_CAP_OPENMP_400 ones, follows
> > >     by the others.  */
> > > @@ -2493,7 +2493,7 @@ gomp_target_init (void)
> > >    num_devices = 0;
> > >    devices = NULL;
> > >  
> > > -  cur = OFFLOAD_TARGETS;
> > > +  cur = OFFLOAD_PLUGINS;
> > >    if (*cur)
> > >      do
> > >        {
> > > diff --git libgomp/testsuite/Makefile.in libgomp/testsuite/Makefile.in
> > > index 4dbb406..2092dcd 100644
> > > --- libgomp/testsuite/Makefile.in
> > > +++ libgomp/testsuite/Makefile.in
> > > @@ -223,6 +223,7 @@ mkdir_p = @mkdir_p@
> > >  multi_basedir = @multi_basedir@
> > >  offload_additional_lib_paths = @offload_additional_lib_paths@
> > >  offload_additional_options = @offload_additional_options@
> > > +offload_plugins = @offload_plugins@
> > >  offload_targets = @offload_targets@
> > >  oldincludedir = @oldincludedir@
> > >  pdfdir = @pdfdir@
> > > diff --git libgomp/testsuite/lib/libgomp.exp libgomp/testsuite/lib/libgomp.exp
> > > index 1cb4991..4a25421 100644
> > > --- libgomp/testsuite/lib/libgomp.exp
> > > +++ libgomp/testsuite/lib/libgomp.exp
> > > @@ -36,28 +36,6 @@ load_gcc_lib fortran-modules.exp
> > >  # Try to load a test support file, built during libgomp configuration.
> > >  load_file libgomp-test-support.exp
> > >  
> > > -# Populate offload_targets_s (offloading targets separated by a space), and
> > > -# offload_targets_s_openacc (the same, but with OpenACC names; OpenACC spells
> > > -# some of them a little differently).
> > > -set offload_targets_s [split $offload_targets ","]
> > > -set offload_targets_s_openacc {}
> > > -foreach offload_target_openacc $offload_targets_s {
> > > -    # Translate to OpenACC names, or skip if not yet supported.
> > > -    switch $offload_target_openacc {
> > > -	intelmic {
> > > -	    continue
> > > -	}
> > > -	nvptx {
> > > -	    set offload_target_openacc "nvidia"
> > > -	}
> > > -	hsa {
> > > -	    continue
> > > -	}
> > > -    }
> > > -    lappend offload_targets_s_openacc "$offload_target_openacc"
> > > -}
> > > -lappend offload_targets_s_openacc "host"
> > > -
> > >  set dg-do-what-default run
> > >  
> > >  #
> > > @@ -135,9 +113,9 @@ proc libgomp_init { args } {
> > >      set always_ld_library_path ".:${blddir}/.libs"
> > >  
> > >      # Add liboffloadmic build directory in LD_LIBRARY_PATH to support
> > > -    # non-fallback testing for Intel MIC targets
> > > +    # Intel MIC offloading testing.
> > >      global offload_targets
> > > -    if { [string match "*,intelmic,*" ",$offload_targets,"] } {
> > > +    if { [string match "*,*-intelmic*,*" ",$offload_targets,"] } {
> > >  	append always_ld_library_path ":${blddir}/../liboffloadmic/.libs"
> > >  	append always_ld_library_path ":${blddir}/../liboffloadmic/plugin/.libs"
> > >  	# libstdc++ is required by liboffloadmic
> > > @@ -245,8 +223,7 @@ proc libgomp_init { args } {
> > >      # Disable color diagnostics
> > >      lappend ALWAYS_CFLAGS "additional_flags=-fdiagnostics-color=never"
> > >  
> > > -    # Used for support non-fallback offloading.
> > > -    # Help GCC to find target mkoffload.
> > > +    # Help GCC to find offload compilers' mkoffload.
> > >      global offload_additional_options
> > >      if { $offload_additional_options != "" } {
> > >  	lappend ALWAYS_CFLAGS "additional_flags=${offload_additional_options}"
> > > @@ -322,6 +299,28 @@ proc libgomp_option_proc { option } {
> > >      }
> > >  }
> > >  
> > > +# Translate offload target to OpenACC device type.  Return the empty string if
> > > +# not suitable or not yet supported, and "host" for offload target "disable".
> > > +proc offload_target_to_openacc_device_type { offload_target } {
> > > +    switch -glob $offload_target {
> > > +	disable {
> > > +	    return "host"
> > > +	}
> > > +	hsa {
> > > +	    return ""
> > > +	}
> > > +	*-intelmic* {
> > > +	    return ""
> > > +	}
> > > +	nvptx* {
> > > +	    return "nvidia"
> > > +	}
> > > +	default {
> > > +	    error "Unknwon offload target: $offload_target"
> > > +	}
> > > +    }
> > > +}
> > > +
> > >  # Return 1 if offload device is available.
> > >  proc check_effective_target_offload_device { } {
> > >      return [check_runtime_nocache offload_device_available_ {
> > > @@ -373,29 +372,22 @@ proc check_effective_target_openacc_nvidia_accel_present { } {
> > >      } "" ]
> > >  }
> > >  
> > > -# Return 1 if at least one nvidia board is present, and the nvidia device type
> > > -# is selected by default by means of setting the environment variable
> > > -# ACC_DEVICE_TYPE.
> > > +# Return 1 if at least one nvidia board is present, and the OpenACC "nvidia"
> > > +# device type is selected.
> > >  
> > >  proc check_effective_target_openacc_nvidia_accel_selected { } {
> > >      if { ![check_effective_target_openacc_nvidia_accel_present] } {
> > >  	return 0;
> > >      }
> > > -    global offload_target_openacc
> > > -    if { $offload_target_openacc == "nvidia" } {
> > > -        return 1;
> > > -    }
> > > -    return 0;
> > > +    global openacc_device_type
> > > +    return [string match "nvidia" $openacc_device_type]
> > >  }
> > >  
> > > -# Return 1 if the host target is selected for offloaded
> > > +# Return 1 if the OpenACC "host" device type is selected.
> > >  
> > >  proc check_effective_target_openacc_host_selected { } {
> > > -    global offload_target_openacc
> > > -    if { $offload_target_openacc == "host" } {
> > > -        return 1;
> > > -    }
> > > -    return 0;
> > > +    global openacc_device_type
> > > +    return [string match "host" $openacc_device_type]
> > >  }
> > >  
> > >  # Return 1 if the selected OMP device is actually a HSA device
> > > diff --git libgomp/testsuite/libgomp.oacc-c++/c++.exp libgomp/testsuite/libgomp.oacc-c++/c++.exp
> > > index 608b298..befb921 100644
> > > --- libgomp/testsuite/libgomp.oacc-c++/c++.exp
> > > +++ libgomp/testsuite/libgomp.oacc-c++/c++.exp
> > > @@ -70,18 +70,23 @@ if { $lang_test_file_found } {
> > >  	set libstdcxx_includes ""
> > >      }
> > >  
> > > -    # Test OpenACC with available accelerators.
> > > -    foreach offload_target_openacc $offload_targets_s_openacc {
> > > -	set tagopt "-DACC_DEVICE_TYPE_$offload_target_openacc=1"
> > > +    # Test with all offload targets, and with offloading disabled.
> > > +    foreach offload_target [concat [split $offload_targets ","] "disable"] {
> > > +	set openacc_device_type [offload_target_to_openacc_device_type $offload_target]
> > > +	set tagopt "-DACC_DEVICE_TYPE_$openacc_device_type=1"
> > >  
> > > -	switch $offload_target_openacc {
> > > -	    host {
> > > +	switch $openacc_device_type {
> > > +	    "" {
> > > +		untested "$subdir $offload_target offloading"
> > > +		continue
> > > +	    }
> > > +	    "host" {
> > >  		set acc_mem_shared 1
> > >  	    }
> > > -	    nvidia {
> > > +	    "nvidia" {
> > >  		if { ![check_effective_target_openacc_nvidia_accel_present] } {
> > >  		    # Don't bother; execution testing is going to FAIL.
> > > -		    untested "$subdir $offload_target_openacc offloading"
> > > +		    untested "$subdir $offload_target offloading"
> > >  		    continue
> > >  		}
> > >  
> > > @@ -94,12 +99,15 @@ if { $lang_test_file_found } {
> > >  		set acc_mem_shared 0
> > >  	    }
> > >  	    default {
> > > -		set acc_mem_shared 0
> > > +		error "Unknwon OpenACC device type: $openacc_device_type (offload target: $offload_target)"
> > >  	    }
> > >  	}
> > >  	set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
> > >  
> > > -	setenv ACC_DEVICE_TYPE $offload_target_openacc
> > > +	# To avoid overhead, by default only build for the offload target that
> > > +	# we're actually going to test.
> > > +	set tagopt "$tagopt -foffload=$offload_target"
> > > +	setenv ACC_DEVICE_TYPE $openacc_device_type
> > >  
> > >  	# To get better test coverage for device-specific code that is only
> > >  	# ever used in offloading configurations, we'd like more thorough
> > > @@ -108,8 +116,8 @@ if { $lang_test_file_found } {
> > >  	# -O0 and -O2 only, to avoid testing times exploding too much, under
> > >  	# the assumption that between -O0 and -O[something] there is the
> > >  	# biggest difference in the overall structure of the generated code.
> > > -	switch $offload_target_openacc {
> > > -	    host {
> > > +	switch $offload_target {
> > > +	    "disable" {
> > >  		set-torture-options [list \
> > >  					 { -O2 } ]
> > >  	    }
> > > diff --git libgomp/testsuite/libgomp.oacc-c/c.exp libgomp/testsuite/libgomp.oacc-c/c.exp
> > > index b509a10..5355b87 100644
> > > --- libgomp/testsuite/libgomp.oacc-c/c.exp
> > > +++ libgomp/testsuite/libgomp.oacc-c/c.exp
> > > @@ -31,20 +31,25 @@ set ld_library_path $always_ld_library_path
> > >  append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
> > >  set_ld_library_path_env_vars
> > >  
> > > -# Test OpenACC with available accelerators.
> > > +# Test with all offload targets, and with offloading disabled.
> > >  set SAVE_ALWAYS_CFLAGS "$ALWAYS_CFLAGS"
> > > -foreach offload_target_openacc $offload_targets_s_openacc {
> > > +foreach offload_target [concat [split $offload_targets ","] "disable"] {
> > >      set ALWAYS_CFLAGS "$SAVE_ALWAYS_CFLAGS"
> > > -    set tagopt "-DACC_DEVICE_TYPE_$offload_target_openacc=1"
> > > +    set openacc_device_type [offload_target_to_openacc_device_type $offload_target]
> > > +    set tagopt "-DACC_DEVICE_TYPE_$openacc_device_type=1"
> > >  
> > > -    switch $offload_target_openacc {
> > > -	host {
> > > +    switch $openacc_device_type {
> > > +	"" {
> > > +	    untested "$subdir $offload_target offloading"
> > > +	    continue
> > > +	}
> > > +	"host" {
> > >  	    set acc_mem_shared 1
> > >  	}
> > > -	nvidia {
> > > +	"nvidia" {
> > >  	    if { ![check_effective_target_openacc_nvidia_accel_present] } {
> > >  		# Don't bother; execution testing is going to FAIL.
> > > -		untested "$subdir $offload_target_openacc offloading"
> > > +		untested "$subdir $offload_target offloading"
> > >  		continue
> > >  	    }
> > >  
> > > @@ -57,12 +62,15 @@ foreach offload_target_openacc $offload_targets_s_openacc {
> > >  	    set acc_mem_shared 0
> > >  	}
> > >  	default {
> > > -	    set acc_mem_shared 0
> > > +	    error "Unknwon OpenACC device type: $openacc_device_type (offload target: $offload_target)"
> > >  	}
> > >      }
> > >      set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
> > >  
> > > -    setenv ACC_DEVICE_TYPE $offload_target_openacc
> > > +    # To avoid overhead, by default only build for the offload target that
> > > +    # we're actually going to test.
> > > +    set tagopt "$tagopt -foffload=$offload_target"
> > > +    setenv ACC_DEVICE_TYPE $openacc_device_type
> > >  
> > >      # To get better test coverage for device-specific code that is only
> > >      # ever used in offloading configurations, we'd like more thorough
> > > @@ -71,8 +79,8 @@ foreach offload_target_openacc $offload_targets_s_openacc {
> > >      # -O0 and -O2 only, to avoid testing times exploding too much, under
> > >      # the assumption that between -O0 and -O[something] there is the
> > >      # biggest difference in the overall structure of the generated code.
> > > -    switch $offload_target_openacc {
> > > -	host {
> > > +    switch $offload_target {
> > > +	"disable" {
> > >  	    set-torture-options [list \
> > >  				     { -O2 } ]
> > >  	}
> > > diff --git libgomp/testsuite/libgomp.oacc-fortran/fortran.exp libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
> > > index 2d6b647..8507b67 100644
> > > --- libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
> > > +++ libgomp/testsuite/libgomp.oacc-fortran/fortran.exp
> > > @@ -65,30 +65,38 @@ if { $lang_test_file_found } {
> > >      append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]
> > >      set_ld_library_path_env_vars
> > >  
> > > -    # Test OpenACC with available accelerators.
> > > -    foreach offload_target_openacc $offload_targets_s_openacc {
> > > -	set tagopt "-DACC_DEVICE_TYPE_$offload_target_openacc=1"
> > > +    # Test with all offload targets, and with offloading disabled.
> > > +    foreach offload_target [concat [split $offload_targets ","] "disable"] {
> > > +	set openacc_device_type [offload_target_to_openacc_device_type $offload_target]
> > > +	set tagopt "-DACC_DEVICE_TYPE_$openacc_device_type=1"
> > >  
> > > -	switch $offload_target_openacc {
> > > +	switch $openacc_device_type {
> > > +	    "" {
> > > +		untested "$subdir $offload_target offloading"
> > > +		continue
> > > +	    }
> > >  	    host {
> > >  		set acc_mem_shared 1
> > >  	    }
> > >  	    nvidia {
> > >  		if { ![check_effective_target_openacc_nvidia_accel_present] } {
> > >  		    # Don't bother; execution testing is going to FAIL.
> > > -		    untested "$subdir $offload_target_openacc offloading"
> > > +		    untested "$subdir $offload_target offloading"
> > >  		    continue
> > >  		}
> > >  
> > >  		set acc_mem_shared 0
> > >  	    }
> > >  	    default {
> > > -		set acc_mem_shared 0
> > > +		error "Unknwon OpenACC device type: $openacc_device_type (offload target: $offload_target)"
> > >  	    }
> > >  	}
> > >  	set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
> > >  
> > > -	setenv ACC_DEVICE_TYPE $offload_target_openacc
> > > +	# To avoid overhead, by default only build for the offload target that
> > > +	# we're actually going to test.
> > > +	set tagopt "$tagopt -foffload=$offload_target"
> > > +	setenv ACC_DEVICE_TYPE $openacc_device_type
> > >  
> > >  	# For Fortran we're doing torture testing, as Fortran has far more tests
> > >  	# with arrays etc. that testing just -O0 or -O2 is insufficient, that is


Grüße
 Thomas

Attachment: signature.asc
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]