[snipped]
[snipped]
[snipped]
@@ -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,10 @@ 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=
+AC_SUBST(offload_plugins)
offload_additional_options=
offload_additional_lib_paths=
AC_SUBST(offload_additional_options)
@@ -151,13 +152,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 +185,7 @@ if test x"$enable_offload_targets" != x; then
;;
esac
;;
- hsa*)
+ hsa)
case "${target}" in
x86_64-*-*)
case " ${CC} ${CFLAGS} " in
@@ -192,7 +193,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 +215,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 +232,17 @@ 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
else
- offload_targets=$offload_targets,$tgt_name
+ offload_plugins=$offload_plugins,$tgt_plugin
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 +254,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.])
@@ -2467,9 +2467,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. */
@@ -2486,7 +2486,7 @@ gomp_target_init (void)
num_devices = 0;
devices = NULL;
- cur = OFFLOAD_TARGETS;
+ cur = OFFLOAD_PLUGINS;
if (*cur)
do
{
[snipped]
@@ -36,12 +36,11 @@ 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 ","]
+# Populate offload_plugins_s (offloading plugins separated by a space), and
+# offload_targets_s_openacc (offload targets with OpenACC device type names).
+set offload_plugins_s [split $offload_plugins ","]
set offload_targets_s_openacc {}
-foreach offload_target_openacc $offload_targets_s {
+foreach offload_target_openacc $offload_plugins_s {
# Translate to OpenACC names, or skip if not yet supported.
switch $offload_target_openacc {
intelmic {
@@ -135,9 +134,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
- global offload_targets
- if { [string match "*,intelmic,*" ",$offload_targets,"] } {
+ # Intel MIC offloading testing.
+ global offload_plugins
+ if { [string match "*,intelmic,*" ",$offload_plugins,"] } {
append always_ld_library_path ":${blddir}/../liboffloadmic/.libs"
append always_ld_library_path ":${blddir}/../liboffloadmic/plugin/.libs"
# libstdc++ is required by liboffloadmic
@@ -245,8 +244,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}"
@@ -373,9 +371,8 @@ 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] } {
@@ -388,7 +385,7 @@ proc check_effective_target_openacc_nvidia_accel_selected { } {
return 0;
}
-# 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
@@ -3,4 +3,4 @@ set cuda_driver_lib "@CUDA_DRIVER_LIB@"
set hsa_runtime_lib "@HSA_RUNTIME_LIB@"
set hsa_kmt_lib "@HSA_KMT_LIB@"
-set offload_targets "@offload_targets@"
+set offload_plugins "@offload_plugins@"
commit b7a0a14646663aaa25bf7c60e684317f935cd6ca
Author: Thomas Schwinge <thomas@codesourcery.com>
Date: Thu Apr 21 14:29:21 2016 +0200
libgomp: In OpenACC testing, cycle though $offload_target
Conflicts:
libgomp/configure
---
libgomp/Makefile.in | 1 +
libgomp/configure | 12 +++-
libgomp/plugin/configfrag.ac | 7 ++-
libgomp/testsuite/Makefile.in | 1 +
libgomp/testsuite/lib/libgomp.exp | 61 +++++++++-----------
libgomp/testsuite/libgomp-test-support.exp.in | 2 +-
libgomp/testsuite/libgomp.oacc-c++/c++.exp | 27 +++++----
libgomp/testsuite/libgomp.oacc-c/c.exp | 27 +++++----
libgomp/testsuite/libgomp.oacc-fortran/fortran.exp | 19 +++---
9 files changed, 90 insertions(+), 67 deletions(-)
[snipped]
[snipped]
@@ -141,9 +141,12 @@ AC_SUBST(PLUGIN_HSA_LIBS)
# Parse offload targets, and figure out libgomp plugin, and configure the
-# corresponding offload compiler.
+# 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)
@@ -238,8 +241,10 @@ if test x"$enable_offload_targets" != x; then
continue
elif test x"$offload_plugins" = x; then
offload_plugins=$tgt_plugin
+ offload_targets=$tgt
else
offload_plugins=$offload_plugins,$tgt_plugin
+ offload_targets=$offload_targets,$tgt
fi
# Configure additional search paths.
if test "$tgt_plugin" = hsa; then
[snipped]
@@ -36,27 +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_plugins_s (offloading plugins separated by a space), and
-# offload_targets_s_openacc (offload targets with OpenACC device type names).
-set offload_plugins_s [split $offload_plugins ","]
-set offload_targets_s_openacc {}
-foreach offload_target_openacc $offload_plugins_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,8 +114,8 @@ proc libgomp_init { args } {
# Add liboffloadmic build directory in LD_LIBRARY_PATH to support
# Intel MIC offloading testing.
- global offload_plugins
- if { [string match "*,intelmic,*" ",$offload_plugins,"] } {
+ global 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
@@ -320,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_ {
@@ -378,21 +379,15 @@ 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 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
@@ -3,4 +3,4 @@ set cuda_driver_lib "@CUDA_DRIVER_LIB@"
set hsa_runtime_lib "@HSA_RUNTIME_LIB@"
set hsa_kmt_lib "@HSA_KMT_LIB@"
-set offload_plugins "@offload_plugins@"
+set offload_targets "@offload_targets@"
@@ -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,12 @@ 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
+ 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 +113,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 } ]
}
@@ -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,12 @@ 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
+ 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 +76,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 } ]
}
@@ -65,30 +65,35 @@ 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
+ 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
commit 08ee4f41d0ec562f7f2f7310b3439fe46c1dd0b4
Author: Thomas Schwinge <thomas@codesourcery.com>
Date: Thu Apr 21 15:10:08 2016 +0200
libgomp: In OpenACC testing, by default only build for the offload target that we're actually going to test
---
libgomp/testsuite/libgomp.oacc-c++/c++.exp | 3 +++
libgomp/testsuite/libgomp.oacc-c/c.exp | 3 +++
libgomp/testsuite/libgomp.oacc-fortran/fortran.exp | 3 +++
3 files changed, 9 insertions(+)
@@ -104,6 +104,9 @@ if { $lang_test_file_found } {
}
set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
+ # 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
@@ -67,6 +67,9 @@ foreach offload_target [concat [split $offload_targets ","] "disable"] {
}
set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
+ # 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
@@ -93,6 +93,9 @@ if { $lang_test_file_found } {
}
set tagopt "$tagopt -DACC_MEM_SHARED=$acc_mem_shared"
+ # 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