From patchwork Wed Jul 13 10:37:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 647854 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rqFdw15MSz9s9G for ; Wed, 13 Jul 2016 20:37:39 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=te7wy9Bx; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type :content-transfer-encoding; q=dns; s=default; b=UCYQxxHIp5vKCewb mrjiE+UC+VOcoxB/Z5RkmmPsPwpyfLTLLyYrX7fsuVwGaiujgpjdRtc4LvoGBWeM Lhnean/k5fr5jidF/N4SpdtSmzaKb9nthoZwJB6feC5rrvyMqydWgRciBvqG2KkC ELCEPDJD7dWWDg4yODrlhMMWgho= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type :content-transfer-encoding; s=default; bh=b2N+tjQJEVMjT5m8z+Xkv6 Zt9XA=; b=te7wy9BxkuzzePI3esR8XeNZ40wFa9iWsPiLtZuEHJA7lFb7jXwWef tQKqMkX6qi2h7/TVGagp8YL+C8/+QE2kEOfI/2HWgnq5SVzVsKC+Ow6nXgiWY/gl uQWRfcfb+l4ueQJgNaDZL1Om5uI4T750VzqnwpFBx7cvkX41eFTQE= Received: (qmail 103027 invoked by alias); 13 Jul 2016 10:37:29 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 102399 invoked by uid 89); 13 Jul 2016 10:37:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=confdefsh, UD:confdefs.h, sk:$enable, confdefs.h X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 13 Jul 2016 10:37:18 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-01.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1bNHXW-0007Ui-Mo from Thomas_Schwinge@mentor.com ; Wed, 13 Jul 2016 03:37:15 -0700 Received: from hertz.schwinge.homeip.net (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.3.224.2; Wed, 13 Jul 2016 11:37:13 +0100 From: Thomas Schwinge To: Jakub Jelinek , Subject: libgomp: In OpenACC testing, cycle though $offload_targets, and by default only build for the offload target that we're actually going to test User-Agent: Notmuch/0.9-101-g81dad07 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-pc-linux-gnu) Date: Wed, 13 Jul 2016 12:37:07 +0200 Message-ID: <87mvlln7sc.fsf@hertz.schwinge.homeip.net> MIME-Version: 1.0 Hi! 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 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(-) Grüße Thomas 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 # . -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 # . -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