Message ID | 877dgcqkbg.fsf@dem-tschwing-1.ger.mentorg.com |
---|---|
State | New |
Headers | show |
Series | Allow matching Intel MIC in OpenMP 'declare variant' | expand |
On Mon, Aug 23, 2021 at 04:58:43PM +0200, Thomas Schwinge wrote: > Hi! > > See the attached "Allow matching Intel MIC in OpenMP 'declare variant'". > OK to push, or how should this be done better? LGTM. > >From 33e5efd0b9c4b1a0712b3dbe103e3a295c765ab4 Mon Sep 17 00:00:00 2001 > From: Thomas Schwinge <thomas@codesourcery.com> > Date: Mon, 2 Aug 2021 17:38:05 +0200 > Subject: [PATCH] Allow matching Intel MIC in OpenMP 'declare variant' > > ..., and use that to improve XFAILing for Intel MIC offloading execution > instead of compilation in 'libgomp.c-c++-common/target-45.c', > 'libgomp.fortran/target10.f90'. > --- > gcc/config/i386/i386-options.c | 4 ++++ > gcc/config/i386/t-omp-device | 2 +- > libgomp/testsuite/lib/libgomp.exp | 17 ++++++++++++----- > .../libgomp.c-c++-common/on_device_arch.h | 13 +++++++++++++ > .../testsuite/libgomp.c-c++-common/target-45.c | 2 +- > libgomp/testsuite/libgomp.fortran/target10.f90 | 3 ++- > 6 files changed, 33 insertions(+), 8 deletions(-) > > diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c > index 6b789988baa..fee5a48c9a5 100644 > --- a/gcc/config/i386/i386-options.c > +++ b/gcc/config/i386/i386-options.c > @@ -304,6 +304,10 @@ ix86_omp_device_kind_arch_isa (enum omp_device_kind_arch_isa trait, > case omp_device_kind: > return strcmp (name, "cpu") == 0; > case omp_device_arch: > +#ifdef ACCEL_COMPILER > + if (strcmp (name, "intel_mic") == 0) > + return 1; > +#endif > if (strcmp (name, "x86") == 0) > return 1; > if (TARGET_64BIT) > diff --git a/gcc/config/i386/t-omp-device b/gcc/config/i386/t-omp-device > index 037ae5e112d..29350a1d80b 100644 > --- a/gcc/config/i386/t-omp-device > +++ b/gcc/config/i386/t-omp-device > @@ -1,6 +1,6 @@ > omp-device-properties-i386: $(srcdir)/config/i386/i386-options.c > echo kind: cpu > $@ > - echo arch: x86 x86_64 i386 i486 i586 i686 ia32 >> $@ > + echo arch: intel_mic x86 x86_64 i386 i486 i586 i686 ia32 >> $@ > echo isa: sse4 `sed -n '/^static struct ix86_target_opts isa2\?_opts\[\] =/,/^};/p' \ > $(srcdir)/config/i386/i386-options.c | \ > sed -n 's/",.*$$//;s/^ { "-m//p'` >> $@ > diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp > index ba8a73275c5..57fb6b068f3 100644 > --- a/libgomp/testsuite/lib/libgomp.exp > +++ b/libgomp/testsuite/lib/libgomp.exp > @@ -374,11 +374,6 @@ proc check_effective_target_offload_target_amdgcn { } { > return [libgomp_check_effective_target_offload_target "amdgcn"] > } > > -# Return 1 if compiling for offload target intelmic > -proc check_effective_target_offload_target_intelmic { } { > - return [libgomp_check_effective_target_offload_target "*-intelmic"] > -} > - > # Return 1 if offload device is available. > proc check_effective_target_offload_device { } { > return [check_runtime_nocache offload_device_available_ { > @@ -453,6 +448,18 @@ proc check_effective_target_openacc_nvidia_accel_selected { } { > return [string match "nvidia" $openacc_device_type] > } > > +# Return 1 if using Intel MIC offload device. > +proc check_effective_target_offload_device_intel_mic { } { > + return [check_runtime_nocache offload_device_intel_mic { > + #include <omp.h> > + #include "testsuite/libgomp.c-c++-common/on_device_arch.h" > + int main () > + { > + return !on_device_arch_intel_mic (); > + } > + } ] > +} > + > # Return 1 if the OpenACC 'host' device type is selected. > > proc check_effective_target_openacc_host_selected { } { > diff --git a/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h b/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h > index 1c0753c3181..ee541dd2260 100644 > --- a/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h > +++ b/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h > @@ -6,7 +6,14 @@ device_arch_nvptx (void) > return GOMP_DEVICE_NVIDIA_PTX; > } > > +/* static */ int > +device_arch_intel_mic (void) > +{ > + return GOMP_DEVICE_INTEL_MIC; > +} > + > #pragma omp declare variant (device_arch_nvptx) match(construct={target},device={arch(nvptx)}) > +#pragma omp declare variant (device_arch_intel_mic) match(construct={target},device={arch(intel_mic)}) > /* static */ int > device_arch (void) > { > @@ -28,3 +35,9 @@ on_device_arch_nvptx () > { > return on_device_arch (GOMP_DEVICE_NVIDIA_PTX); > } > + > +int > +on_device_arch_intel_mic () > +{ > + return on_device_arch (GOMP_DEVICE_INTEL_MIC); > +} > diff --git a/libgomp/testsuite/libgomp.c-c++-common/target-45.c b/libgomp/testsuite/libgomp.c-c++-common/target-45.c > index ec0d202e51c..81acee81064 100644 > --- a/libgomp/testsuite/libgomp.c-c++-common/target-45.c > +++ b/libgomp/testsuite/libgomp.c-c++-common/target-45.c > @@ -1,4 +1,4 @@ > -/* { dg-do run { target { ! offload_target_intelmic } } } */ > +/* { dg-xfail-run-if TODO { offload_device_intel_mic } } */ > > #include <omp.h> > #include <stdlib.h> > diff --git a/libgomp/testsuite/libgomp.fortran/target10.f90 b/libgomp/testsuite/libgomp.fortran/target10.f90 > index 0b939ad7a0d..f41a726de75 100644 > --- a/libgomp/testsuite/libgomp.fortran/target10.f90 > +++ b/libgomp/testsuite/libgomp.fortran/target10.f90 > @@ -1,4 +1,5 @@ > -! { dg-do run { target { ! offload_target_intelmic } } } > +! { dg-do run } > +! { dg-xfail-run-if TODO { offload_device_intel_mic } } > > program main > use omp_lib > -- > 2.25.1 > Jakub
From 33e5efd0b9c4b1a0712b3dbe103e3a295c765ab4 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Mon, 2 Aug 2021 17:38:05 +0200 Subject: [PATCH] Allow matching Intel MIC in OpenMP 'declare variant' ..., and use that to improve XFAILing for Intel MIC offloading execution instead of compilation in 'libgomp.c-c++-common/target-45.c', 'libgomp.fortran/target10.f90'. --- gcc/config/i386/i386-options.c | 4 ++++ gcc/config/i386/t-omp-device | 2 +- libgomp/testsuite/lib/libgomp.exp | 17 ++++++++++++----- .../libgomp.c-c++-common/on_device_arch.h | 13 +++++++++++++ .../testsuite/libgomp.c-c++-common/target-45.c | 2 +- libgomp/testsuite/libgomp.fortran/target10.f90 | 3 ++- 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c index 6b789988baa..fee5a48c9a5 100644 --- a/gcc/config/i386/i386-options.c +++ b/gcc/config/i386/i386-options.c @@ -304,6 +304,10 @@ ix86_omp_device_kind_arch_isa (enum omp_device_kind_arch_isa trait, case omp_device_kind: return strcmp (name, "cpu") == 0; case omp_device_arch: +#ifdef ACCEL_COMPILER + if (strcmp (name, "intel_mic") == 0) + return 1; +#endif if (strcmp (name, "x86") == 0) return 1; if (TARGET_64BIT) diff --git a/gcc/config/i386/t-omp-device b/gcc/config/i386/t-omp-device index 037ae5e112d..29350a1d80b 100644 --- a/gcc/config/i386/t-omp-device +++ b/gcc/config/i386/t-omp-device @@ -1,6 +1,6 @@ omp-device-properties-i386: $(srcdir)/config/i386/i386-options.c echo kind: cpu > $@ - echo arch: x86 x86_64 i386 i486 i586 i686 ia32 >> $@ + echo arch: intel_mic x86 x86_64 i386 i486 i586 i686 ia32 >> $@ echo isa: sse4 `sed -n '/^static struct ix86_target_opts isa2\?_opts\[\] =/,/^};/p' \ $(srcdir)/config/i386/i386-options.c | \ sed -n 's/",.*$$//;s/^ { "-m//p'` >> $@ diff --git a/libgomp/testsuite/lib/libgomp.exp b/libgomp/testsuite/lib/libgomp.exp index ba8a73275c5..57fb6b068f3 100644 --- a/libgomp/testsuite/lib/libgomp.exp +++ b/libgomp/testsuite/lib/libgomp.exp @@ -374,11 +374,6 @@ proc check_effective_target_offload_target_amdgcn { } { return [libgomp_check_effective_target_offload_target "amdgcn"] } -# Return 1 if compiling for offload target intelmic -proc check_effective_target_offload_target_intelmic { } { - return [libgomp_check_effective_target_offload_target "*-intelmic"] -} - # Return 1 if offload device is available. proc check_effective_target_offload_device { } { return [check_runtime_nocache offload_device_available_ { @@ -453,6 +448,18 @@ proc check_effective_target_openacc_nvidia_accel_selected { } { return [string match "nvidia" $openacc_device_type] } +# Return 1 if using Intel MIC offload device. +proc check_effective_target_offload_device_intel_mic { } { + return [check_runtime_nocache offload_device_intel_mic { + #include <omp.h> + #include "testsuite/libgomp.c-c++-common/on_device_arch.h" + int main () + { + return !on_device_arch_intel_mic (); + } + } ] +} + # Return 1 if the OpenACC 'host' device type is selected. proc check_effective_target_openacc_host_selected { } { diff --git a/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h b/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h index 1c0753c3181..ee541dd2260 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h +++ b/libgomp/testsuite/libgomp.c-c++-common/on_device_arch.h @@ -6,7 +6,14 @@ device_arch_nvptx (void) return GOMP_DEVICE_NVIDIA_PTX; } +/* static */ int +device_arch_intel_mic (void) +{ + return GOMP_DEVICE_INTEL_MIC; +} + #pragma omp declare variant (device_arch_nvptx) match(construct={target},device={arch(nvptx)}) +#pragma omp declare variant (device_arch_intel_mic) match(construct={target},device={arch(intel_mic)}) /* static */ int device_arch (void) { @@ -28,3 +35,9 @@ on_device_arch_nvptx () { return on_device_arch (GOMP_DEVICE_NVIDIA_PTX); } + +int +on_device_arch_intel_mic () +{ + return on_device_arch (GOMP_DEVICE_INTEL_MIC); +} diff --git a/libgomp/testsuite/libgomp.c-c++-common/target-45.c b/libgomp/testsuite/libgomp.c-c++-common/target-45.c index ec0d202e51c..81acee81064 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/target-45.c +++ b/libgomp/testsuite/libgomp.c-c++-common/target-45.c @@ -1,4 +1,4 @@ -/* { dg-do run { target { ! offload_target_intelmic } } } */ +/* { dg-xfail-run-if TODO { offload_device_intel_mic } } */ #include <omp.h> #include <stdlib.h> diff --git a/libgomp/testsuite/libgomp.fortran/target10.f90 b/libgomp/testsuite/libgomp.fortran/target10.f90 index 0b939ad7a0d..f41a726de75 100644 --- a/libgomp/testsuite/libgomp.fortran/target10.f90 +++ b/libgomp/testsuite/libgomp.fortran/target10.f90 @@ -1,4 +1,5 @@ -! { dg-do run { target { ! offload_target_intelmic } } } +! { dg-do run } +! { dg-xfail-run-if TODO { offload_device_intel_mic } } program main use omp_lib -- 2.25.1