Add '-Wopenacc-parallelism'
... to diagnose potentially suboptimal choices regarding OpenACC parallelism. Not enabled by default: too noisy ("*potentially* suboptimal choices"); see XFAILed 'dg-bogus'es. gcc/c-family/ * c.opt (Wopenacc-parallelism): New. gcc/fortran/ * lang.opt (Wopenacc-parallelism): New. gcc/ * omp-offload.c (oacc_validate_dims): Implement '-Wopenacc-parallelism'. * doc/invoke.texi (-Wopenacc-parallelism): Document. gcc/testsuite/ * c-c++-common/goacc/diag-parallelism-1.c: New. * c-c++-common/goacc/acc-icf.c: Specify '-Wopenacc-parallelism', and match diagnostics, as appropriate. * c-c++-common/goacc/classify-kernels-unparallelized.c: Likewise. * c-c++-common/goacc/classify-kernels.c: Likewise. * c-c++-common/goacc/classify-parallel.c: Likewise. * c-c++-common/goacc/classify-routine.c: Likewise. * c-c++-common/goacc/classify-serial.c: Likewise. * c-c++-common/goacc/kernels-decompose-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-2.c: Likewise. * c-c++-common/goacc/parallel-dims-1.c: Likewise. * c-c++-common/goacc/parallel-reduction.c: Likewise. * c-c++-common/goacc/pr70688.c: Likewise. * c-c++-common/goacc/routine-1.c: Likewise. * c-c++-common/goacc/routine-level-of-parallelism-2.c: Likewise. * c-c++-common/goacc/uninit-dim-clause.c: Likewise. * gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise. * gfortran.dg/goacc/classify-kernels.f95: Likewise. * gfortran.dg/goacc/classify-parallel.f95: Likewise. * gfortran.dg/goacc/classify-routine.f95: Likewise. * gfortran.dg/goacc/classify-serial.f95: Likewise. * gfortran.dg/goacc/kernels-decompose-1.f95: Likewise. * gfortran.dg/goacc/kernels-decompose-2.f95: Likewise. * gfortran.dg/goacc/parallel-tree.f95: Likewise. * gfortran.dg/goacc/routine-4.f90: Likewise. * gfortran.dg/goacc/routine-level-of-parallelism-1.f90: Likewise. * gfortran.dg/goacc/routine-module-mod-1.f90: Likewise. * gfortran.dg/goacc/routine-multiple-directives-1.f90: Likewise. * gfortran.dg/goacc/uninit-dim-clause.f95: Likewise. libgomp/ * testsuite/libgomp.oacc-c-c++-common/firstprivate-1.c: Specify '-Wopenacc-parallelism', and match diagnostics, as appropriate. * testsuite/libgomp.oacc-c-c++-common/loop-auto-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-red-w-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/loop-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/mode-transitions.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/par-reduction-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/par-reduction-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/parallel-reduction.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/pr85381-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/private-variables.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/reduction-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/reduction-7.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-g-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-w-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/routine-wv-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/static-variable-1.c: Likewise. * testsuite/libgomp.oacc-fortran/optional-private.f90: Likewise. * testsuite/libgomp.oacc-fortran/par-reduction-2-1.f: Likewise. * testsuite/libgomp.oacc-fortran/par-reduction-2-2.f: Likewise. * testsuite/libgomp.oacc-fortran/parallel-dims.f90: Likewise. * testsuite/libgomp.oacc-fortran/parallel-reduction.f90: Likewise. * testsuite/libgomp.oacc-fortran/pr84028.f90: Likewise. * testsuite/libgomp.oacc-fortran/private-variables.f90: Likewise. * testsuite/libgomp.oacc-fortran/reduction-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/reduction-5.f90: Likewise. * testsuite/libgomp.oacc-fortran/reduction-6.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-7.f90: Likewise. Co-Authored-By: Nathan Sidwell <nathan@codesourcery.com> Co-Authored-By: Tom de Vries <vries@codesourcery.com> Co-Authored-By: Julian Brown <julian@codesourcery.com> Co-Authored-By: Kwok Cheung Yeung <kcy@codesourcery.com>
This commit is contained in:
parent
7c640779bf
commit
22cff118f7
61 changed files with 511 additions and 3 deletions
|
@ -1037,6 +1037,10 @@ Wold-style-definition
|
|||
C ObjC Var(warn_old_style_definition) Init(-1) Warning
|
||||
Warn if an old-style parameter definition is used.
|
||||
|
||||
Wopenacc-parallelism
|
||||
C C++ Var(warn_openacc_parallelism) Warning
|
||||
Warn about potentially suboptimal choices related to OpenACC parallelism.
|
||||
|
||||
Wopenmp-simd
|
||||
C C++ Var(warn_openmp_simd) Warning LangEnabledBy(C C++,Wall)
|
||||
Warn if a simd directive is overridden by the vectorizer cost model.
|
||||
|
|
|
@ -364,7 +364,9 @@ Objective-C and Objective-C++ Dialects}.
|
|||
-Wmissing-include-dirs -Wmissing-noreturn -Wno-missing-profile @gol
|
||||
-Wno-multichar -Wmultistatement-macros -Wnonnull -Wnonnull-compare @gol
|
||||
-Wnormalized=@r{[}none@r{|}id@r{|}nfc@r{|}nfkc@r{]} @gol
|
||||
-Wnull-dereference -Wno-odr -Wopenmp-simd @gol
|
||||
-Wnull-dereference -Wno-odr @gol
|
||||
-Wopenacc-parallelism @gol
|
||||
-Wopenmp-simd @gol
|
||||
-Wno-overflow -Woverlength-strings -Wno-override-init-side-effects @gol
|
||||
-Wpacked -Wno-packed-bitfield-compat -Wpacked-not-aligned -Wpadded @gol
|
||||
-Wparentheses -Wno-pedantic-ms-format @gol
|
||||
|
@ -8749,6 +8751,12 @@ Do not warn about compile-time overflow in constant expressions.
|
|||
Warn about One Definition Rule violations during link-time optimization.
|
||||
Enabled by default.
|
||||
|
||||
@item -Wopenacc-parallelism
|
||||
@opindex Wopenacc-parallelism
|
||||
@opindex Wno-openacc-parallelism
|
||||
@cindex OpenACC accelerator programming
|
||||
Warn about potentially suboptimal choices related to OpenACC parallelism.
|
||||
|
||||
@item -Wopenmp-simd
|
||||
@opindex Wopenmp-simd
|
||||
@opindex Wno-openmp-simd
|
||||
|
|
|
@ -285,6 +285,10 @@ Wuse-without-only
|
|||
Fortran Var(warn_use_without_only) Warning
|
||||
Warn about USE statements that have no ONLY qualifier.
|
||||
|
||||
Wopenacc-parallelism
|
||||
Fortran
|
||||
; Documented in C
|
||||
|
||||
Wopenmp-simd
|
||||
Fortran
|
||||
; Documented in C
|
||||
|
|
|
@ -928,6 +928,35 @@ oacc_validate_dims (tree fn, tree attrs, int *dims, int level, unsigned used)
|
|||
pos = TREE_CHAIN (pos);
|
||||
}
|
||||
|
||||
bool check = true;
|
||||
#ifdef ACCEL_COMPILER
|
||||
check = false;
|
||||
#endif
|
||||
if (check
|
||||
&& warn_openacc_parallelism
|
||||
&& !lookup_attribute ("oacc kernels", DECL_ATTRIBUTES (fn)))
|
||||
{
|
||||
static char const *const axes[] =
|
||||
/* Must be kept in sync with GOMP_DIM enumeration. */
|
||||
{ "gang", "worker", "vector" };
|
||||
for (ix = level >= 0 ? level : 0; ix != GOMP_DIM_MAX; ix++)
|
||||
if (dims[ix] < 0)
|
||||
; /* Defaulting axis. */
|
||||
else if ((used & GOMP_DIM_MASK (ix)) && dims[ix] == 1)
|
||||
/* There is partitioned execution, but the user requested a
|
||||
dimension size of 1. They're probably confused. */
|
||||
warning_at (DECL_SOURCE_LOCATION (fn), OPT_Wopenacc_parallelism,
|
||||
"region contains %s partitioned code but"
|
||||
" is not %s partitioned", axes[ix], axes[ix]);
|
||||
else if (!(used & GOMP_DIM_MASK (ix)) && dims[ix] != 1)
|
||||
/* The dimension is explicitly partitioned to non-unity, but
|
||||
no use is made within the region. */
|
||||
warning_at (DECL_SOURCE_LOCATION (fn), OPT_Wopenacc_parallelism,
|
||||
"region is %s partitioned but"
|
||||
" does not contain %s partitioned code",
|
||||
axes[ix], axes[ix]);
|
||||
}
|
||||
|
||||
bool changed = targetm.goacc.validate_dims (fn, dims, level, used);
|
||||
|
||||
/* Default anything left to 1 or a partitioned default. */
|
||||
|
|
|
@ -2,7 +2,12 @@
|
|||
|
||||
/* { dg-additional-options "-fopenacc -O2 -fdump-ipa-icf" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#pragma acc routine gang
|
||||
/* { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .+3 }
|
||||
TODO It's the compiler's own decision to not use 'worker' parallelism here, so it doesn't make sense to bother the user about it. */
|
||||
int
|
||||
routine1 (int n)
|
||||
{
|
||||
|
@ -16,6 +21,8 @@ routine1 (int n)
|
|||
}
|
||||
|
||||
#pragma acc routine gang
|
||||
/* { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .+3 }
|
||||
TODO It's the compiler's own decision to not use 'worker' parallelism here, so it doesn't make sense to bother the user about it. */
|
||||
int
|
||||
routine2 (int n)
|
||||
{
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
{ dg-additional-options "-fdump-tree-parloops1-all" }
|
||||
{ dg-additional-options "-fdump-tree-oaccdevlow" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#define N 1024
|
||||
|
||||
extern unsigned int *__restrict a;
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
{ dg-additional-options "-fdump-tree-parloops1-all" }
|
||||
{ dg-additional-options "-fdump-tree-oaccdevlow" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#define N 1024
|
||||
|
||||
extern unsigned int *__restrict a;
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
{ dg-additional-options "-fdump-tree-ompexp" }
|
||||
{ dg-additional-options "-fdump-tree-oaccdevlow" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#define N 1024
|
||||
|
||||
extern unsigned int *__restrict a;
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
{ dg-additional-options "-fdump-tree-ompexp" }
|
||||
{ dg-additional-options "-fdump-tree-oaccdevlow" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#define N 1024
|
||||
|
||||
extern unsigned int *__restrict a;
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
{ dg-additional-options "-fdump-tree-ompexp" }
|
||||
{ dg-additional-options "-fdump-tree-oaccdevlow" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#define N 1024
|
||||
|
||||
extern unsigned int *__restrict a;
|
||||
|
@ -15,6 +18,11 @@ extern unsigned int *__restrict c;
|
|||
void SERIAL ()
|
||||
{
|
||||
#pragma acc serial loop copyin (a[0:N], b[0:N]) copyout (c[0:N]) /* { dg-message "optimized: assigned OpenACC gang vector loop parallelism" } */
|
||||
/* { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-1 }
|
||||
{ dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-2 }
|
||||
{ dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-3 }
|
||||
TODO Should we really diagnose this if the user explicitly requested 'serial'?
|
||||
TODO Should we instead diagnose ('-Wextra' category?) that the user may enable use of parallelism if replacing 'serial' with 'parallel', if applicable? */
|
||||
for (unsigned int i = 0; i < N; i++)
|
||||
c[i] = a[i] + b[i];
|
||||
}
|
||||
|
|
124
gcc/testsuite/c-c++-common/goacc/diag-parallelism-1.c
Normal file
124
gcc/testsuite/c-c++-common/goacc/diag-parallelism-1.c
Normal file
|
@ -0,0 +1,124 @@
|
|||
/* Diagnostics about potentially suboptimal choices related to OpenACC
|
||||
parallelism.
|
||||
|
||||
{ dg-additional-options "-Wopenacc-parallelism" }
|
||||
*/
|
||||
|
||||
|
||||
//TODO 'kernels'
|
||||
|
||||
//TODO 'serial'
|
||||
|
||||
//TODO 'routine'
|
||||
|
||||
//TODO Fortran
|
||||
|
||||
|
||||
static void f1 ()
|
||||
{
|
||||
int ary[10];
|
||||
|
||||
|
||||
#pragma acc parallel num_gangs (1)
|
||||
/* { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel num_workers (1)
|
||||
/* { dg-warning "region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop worker
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel vector_length (1)
|
||||
/* { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop vector
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void f2 ()
|
||||
{
|
||||
int ary[10];
|
||||
|
||||
|
||||
#pragma acc parallel num_gangs (8)
|
||||
/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop worker
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel num_gangs (8)
|
||||
/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop vector
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel num_gangs (8)
|
||||
/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop worker vector
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel num_workers (8)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel num_workers (8)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop vector
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel num_workers (8)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang vector
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel vector_length (8)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel vector_length (8)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop worker
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
|
||||
#pragma acc parallel vector_length (8)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang worker
|
||||
for (int i = 0; i < 10; i++)
|
||||
ary[i] = i;
|
||||
}
|
||||
}
|
|
@ -5,6 +5,9 @@
|
|||
/* { dg-additional-options "--param=openacc-kernels=decompose" }
|
||||
{ dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
/* See also '../../gfortran.dg/goacc/kernels-decompose-1.f95'. */
|
||||
|
||||
/* It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
/* { dg-additional-options "--param=openacc-kernels=decompose" }
|
||||
/* { dg-additional-options "-O2" } for 'parloops'. */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
/* See also '../../gfortran.dg/goacc/kernels-decompose-2.f95'. */
|
||||
|
||||
/* It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
|
||||
|
@ -116,6 +119,7 @@ main ()
|
|||
}
|
||||
|
||||
#pragma acc kernels
|
||||
/* { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'kernels'" { xfail *-*-* } .-1 } */
|
||||
{
|
||||
y = f_g (a[5]); /* { dg-line l_part[incr c_part] } */
|
||||
/*TODO If such a construct is placed in its own part (like it is, here), can't this actually use gang paralelism, instead of "gang-single"?
|
||||
|
|
|
@ -1,11 +1,18 @@
|
|||
/* Valid use of OpenACC parallelism dimensions clauses: num_gangs, num_workers,
|
||||
vector_length. */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
void f(int i)
|
||||
{
|
||||
#pragma acc kernels num_gangs(i) num_workers(i) vector_length(i)
|
||||
;
|
||||
|
||||
#pragma acc parallel num_gangs(i) num_workers(i) vector_length(i)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO runtime" { xfail *-*-* } .-1 }
|
||||
{ dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO runtime" { xfail *-*-* } .-2 }
|
||||
{ dg-bogus "warning: region is vector partitioned but does not contain vector partitioned code" "TODO runtime" { xfail *-*-* } .-3 }
|
||||
TODO 'region is [...] partitioned' isn't correct for 'i == 1'. */
|
||||
;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
@ -7,6 +10,7 @@ main ()
|
|||
#pragma acc data copy (dummy)
|
||||
{
|
||||
#pragma acc parallel num_gangs (10) copy (sum) reduction (+:sum)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */
|
||||
{
|
||||
int v = 5;
|
||||
sum += 10 + v;
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
const int n = 100;
|
||||
|
||||
int
|
||||
|
@ -22,6 +25,7 @@ parallel_reduction ()
|
|||
#pragma acc data copy (dummy)
|
||||
{
|
||||
#pragma acc parallel num_gangs (10) copy (sum) reduction (+:sum)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */
|
||||
{
|
||||
int v = 5;
|
||||
sum += 10 + v;
|
||||
|
@ -37,10 +41,12 @@ main ()
|
|||
int i, s = 0;
|
||||
|
||||
#pragma acc parallel num_gangs (10) copy (s) reduction (+:s)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */
|
||||
for (i = 0; i < n; i++)
|
||||
s += i+1;
|
||||
|
||||
#pragma acc parallel num_gangs (10) reduction (+:s) copy (s)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */
|
||||
for (i = 0; i < n; i++)
|
||||
s += i+1;
|
||||
|
||||
|
|
|
@ -1,15 +1,23 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#pragma acc routine gang
|
||||
/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .+3 }
|
||||
{ dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+2 }
|
||||
{ dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */
|
||||
void gang (void)
|
||||
{
|
||||
}
|
||||
|
||||
#pragma acc routine worker
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+2 }
|
||||
{ dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */
|
||||
void worker (void)
|
||||
{
|
||||
}
|
||||
|
||||
#pragma acc routine vector
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */
|
||||
void vector (void)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -2,7 +2,13 @@
|
|||
with the OpenACC 'routine' directive. The Fortran counterpart is
|
||||
'../../gfortran.dg/goacc/routine-level-of-parallelism-1.f90'. */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#pragma acc routine gang
|
||||
/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .+3 }
|
||||
{ dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+2 }
|
||||
{ dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+1 } */
|
||||
void g_1 (void)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -1,16 +1,22 @@
|
|||
/* { dg-additional-options "-Wuninitialized" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
void acc_parallel()
|
||||
{
|
||||
int i, j, k;
|
||||
|
||||
#pragma acc parallel num_gangs(i) /* { dg-warning "is used uninitialized" } */
|
||||
/* { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 } */
|
||||
;
|
||||
|
||||
#pragma acc parallel num_workers(j) /* { dg-warning "is used uninitialized" } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
;
|
||||
|
||||
#pragma acc parallel vector_length(k) /* { dg-warning "is used uninitialized" } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
! { dg-additional-options "-fdump-tree-parloops1-all" }
|
||||
! { dg-additional-options "-fdump-tree-oaccdevlow" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program main
|
||||
implicit none
|
||||
integer, parameter :: n = 1024
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
! { dg-additional-options "-fdump-tree-parloops1-all" }
|
||||
! { dg-additional-options "-fdump-tree-oaccdevlow" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program main
|
||||
implicit none
|
||||
integer, parameter :: n = 1024
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
! { dg-additional-options "-fdump-tree-ompexp" }
|
||||
! { dg-additional-options "-fdump-tree-oaccdevlow" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program main
|
||||
implicit none
|
||||
integer, parameter :: n = 1024
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
! { dg-additional-options "-fdump-tree-ompexp" }
|
||||
! { dg-additional-options "-fdump-tree-oaccdevlow" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
subroutine ROUTINE
|
||||
!$acc routine worker
|
||||
integer, parameter :: n = 1024
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
! { dg-additional-options "-fdump-tree-ompexp" }
|
||||
! { dg-additional-options "-fdump-tree-oaccdevlow" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program main
|
||||
implicit none
|
||||
integer, parameter :: n = 1024
|
||||
|
@ -15,6 +18,9 @@ program main
|
|||
call setup(a, b)
|
||||
|
||||
!$acc serial loop copyin (a(0:n-1), b(0:n-1)) copyout (c(0:n-1)) ! { dg-message "optimized: assigned OpenACC gang vector loop parallelism" }
|
||||
! { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-1 }
|
||||
! { dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-2 }
|
||||
! { dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-3 }
|
||||
do i = 0, n - 1
|
||||
c(i) = a(i) + b(i)
|
||||
end do
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
! { dg-additional-options "--param=openacc-kernels=decompose" }
|
||||
! { dg-additional-options "-fdump-tree-omp_oacc_kernels_decompose" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
! See also '../../c-c++-common/goacc/kernels-decompose-1.c'.
|
||||
|
||||
! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
! { dg-additional-options "--param=openacc-kernels=decompose" }
|
||||
! { dg-additional-options "-O2" } for 'parloops'.
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
! See also '../../c-c++-common/goacc/kernels-decompose-2.c'.
|
||||
|
||||
! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
|
||||
|
@ -119,6 +122,7 @@ program main
|
|||
!$acc end kernels
|
||||
|
||||
!$acc kernels
|
||||
! { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'kernels'" { xfail *-*-* } .-1 }
|
||||
y = f_g (a(5)) ! { dg-line l_part[incr c_part] }
|
||||
!TODO If such a construct is placed in its own part (like it is, here), can't this actually use gang paralelism, instead of "gang-single"?
|
||||
! { dg-message "note: beginning 'gang-single' part in OpenACC 'kernels' region" "" { target *-*-* } l_part$c_part }
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
! test for tree-dump-original and spaces-commas
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program test
|
||||
implicit none
|
||||
integer :: q, i, j, k, m, n, o, p, r, s, t, u, v, w
|
||||
|
@ -12,6 +15,9 @@ program test
|
|||
!$acc no_create(n) &
|
||||
!$acc present(o), pcopy(p), pcopyin(r), pcopyout(s), pcreate(t) &
|
||||
!$acc deviceptr(u), private(v), firstprivate(w)
|
||||
! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
|
||||
!$acc end parallel
|
||||
|
||||
end program test
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
! Test invalid calls to routines.
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
module param
|
||||
integer, parameter :: N = 32
|
||||
end module param
|
||||
|
@ -120,6 +123,9 @@ contains
|
|||
|
||||
subroutine gang (a) ! { dg-message "declared here" 3 }
|
||||
!$acc routine gang
|
||||
! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 }
|
||||
integer, intent (inout) :: a(N)
|
||||
integer :: i
|
||||
|
||||
|
@ -130,6 +136,8 @@ contains
|
|||
|
||||
subroutine worker (a) ! { dg-message "declared here" 2 }
|
||||
!$acc routine worker
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
|
||||
integer, intent (inout) :: a(N)
|
||||
integer :: i
|
||||
|
||||
|
@ -140,6 +148,7 @@ contains
|
|||
|
||||
subroutine vector (a) ! { dg-message "declared here" }
|
||||
!$acc routine vector
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 }
|
||||
integer, intent (inout) :: a(N)
|
||||
integer :: i
|
||||
|
||||
|
|
|
@ -2,8 +2,14 @@
|
|||
! with the OpenACC routine directive. The C/C++ counterpart is
|
||||
! '../../c-c++-common/goacc/routine-level-of-parallelism-2.c'.
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
subroutine g_1
|
||||
!$acc routine gang
|
||||
! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 }
|
||||
end subroutine g_1
|
||||
|
||||
subroutine s_1_2a
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
! { dg-additional-options "-fopt-info-optimized-omp" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
module routine_module_mod_1
|
||||
contains
|
||||
subroutine s_1
|
||||
|
@ -53,6 +56,7 @@ contains
|
|||
subroutine g_1
|
||||
implicit none
|
||||
!$acc routine gang
|
||||
! { dg-bogus "warning: region is worker partitioned but does not contain worker partitioned code" "TODO default 'gang' 'vector'" { xfail *-*-* } .-3 }
|
||||
|
||||
integer :: i
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
! Check for valid cases of multiple OpenACC 'routine' directives.
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
SUBROUTINE s_1
|
||||
!$ACC ROUTINE(s_1)
|
||||
!$ACC ROUTINE(s_1) SEQ
|
||||
|
@ -17,12 +20,14 @@
|
|||
!$ACC ROUTINE VECTOR
|
||||
!$ACC ROUTINE(v_1) VECTOR
|
||||
!$ACC ROUTINE VECTOR
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-5 }
|
||||
END SUBROUTINE v_1
|
||||
|
||||
SUBROUTINE v_2
|
||||
!$ACC ROUTINE(v_2) VECTOR
|
||||
!$ACC ROUTINE VECTOR
|
||||
!$ACC ROUTINE(v_2) VECTOR
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 }
|
||||
END SUBROUTINE v_2
|
||||
|
||||
SUBROUTINE sub_1
|
||||
|
|
|
@ -1,16 +1,22 @@
|
|||
! { dg-additional-options "-Wuninitialized" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
subroutine acc_parallel
|
||||
implicit none
|
||||
integer :: i, j, k
|
||||
|
||||
!$acc parallel num_gangs(i) ! { dg-warning "is used uninitialized" }
|
||||
! { dg-warning "region is gang partitioned but does not contain gang partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc end parallel
|
||||
|
||||
!$acc parallel num_workers(j) ! { dg-warning "is used uninitialized" }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc end parallel
|
||||
|
||||
!$acc parallel vector_length(k) ! { dg-warning "is used uninitialized" }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc end parallel
|
||||
end subroutine acc_parallel
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <openacc.h>
|
||||
|
||||
|
||||
|
@ -117,6 +120,8 @@ void t4 ()
|
|||
arr[i] = 3;
|
||||
|
||||
#pragma acc parallel firstprivate(x) copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (i = 0; i < 32; i++)
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
|
||||
/* { dg-additional-options "-fopenacc-dim=32" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openacc.h>
|
||||
#include <gomp-constants.h>
|
||||
|
@ -151,6 +154,7 @@ int gang_1 (int *ary, int size)
|
|||
clear (ary, size);
|
||||
|
||||
#pragma acc parallel num_gangs (32) num_workers (32) vector_length(32) copy(ary[0:size]) firstprivate (size)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop auto
|
||||
for (int jx = 0; jx < size / 64; jx++)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openacc.h>
|
||||
#include <gomp-constants.h>
|
||||
|
@ -12,6 +15,7 @@ int main ()
|
|||
|
||||
#pragma acc parallel num_workers(32) vector_length(32) copy(ondev) \
|
||||
copyout(workersize)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop worker reduction(+:t)
|
||||
for (unsigned ix = 0; ix < N; ix++)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openacc.h>
|
||||
#include <gomp-constants.h>
|
||||
|
@ -12,6 +15,7 @@ int main ()
|
|||
|
||||
#pragma acc parallel num_workers(32) vector_length(32) copy(q) copy(ondev) \
|
||||
copyout(workersize)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int t = q;
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openacc.h>
|
||||
#include <gomp-constants.h>
|
||||
|
@ -16,6 +19,7 @@ int main ()
|
|||
|
||||
#pragma acc parallel num_workers(32) vector_length(32) copy(ary) copy(ondev) \
|
||||
copyout(workersize)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "vector" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop worker
|
||||
for (unsigned ix = 0; ix < N; ix++)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
/* Miscellaneous test cases for gang/worker/vector mode transitions. */
|
||||
|
||||
#include <assert.h>
|
||||
|
@ -287,6 +290,7 @@ void t7()
|
|||
int n = 0;
|
||||
#pragma acc parallel copy(n) \
|
||||
num_gangs(1) num_workers(1) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
n++;
|
||||
}
|
||||
|
@ -310,6 +314,7 @@ void t8()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(gangs) num_workers(1) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -339,6 +344,7 @@ void t9()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(gangs) num_workers(1) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -371,6 +377,7 @@ void t10()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(gangs) num_workers(1) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -404,6 +411,7 @@ void t11()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(1024) num_workers(1) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
|
||||
|
@ -442,6 +450,7 @@ void t12()
|
|||
|
||||
#pragma acc parallel copyout(fizz, buzz, fizzbuzz) \
|
||||
num_gangs(NUM_GANGS) num_workers(1) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
|
||||
|
@ -488,6 +497,7 @@ void t13()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(8) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -613,6 +623,7 @@ void t16()
|
|||
|
||||
#pragma acc parallel copy(n, arr) \
|
||||
num_gangs(8) num_workers(16) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -665,6 +676,7 @@ void t17()
|
|||
|
||||
#pragma acc parallel copyin(arr_a) copyout(arr_b) \
|
||||
num_gangs(num_gangs) num_workers(num_workers) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -882,6 +894,8 @@ void t21()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(8) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -905,6 +919,8 @@ void t22()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(8) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -931,6 +947,8 @@ void t23()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(8) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -957,6 +975,8 @@ void t24()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(8) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -988,6 +1008,7 @@ void t25()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(8) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -1020,6 +1041,7 @@ void t26()
|
|||
|
||||
#pragma acc parallel copy(arr) \
|
||||
num_gangs(8) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int j;
|
||||
#pragma acc loop gang
|
||||
|
@ -1070,6 +1092,8 @@ void t27()
|
|||
|
||||
#pragma acc parallel copy(n, arr) copyout(ondev) \
|
||||
num_gangs(ACTUAL_GANGS) num_workers(8) vector_length(32)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .-2 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */
|
||||
{
|
||||
int j;
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
/* Test of reduction on parallel directive. */
|
||||
|
@ -16,6 +19,9 @@ main (int argc, char *argv[])
|
|||
#endif
|
||||
#pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
|
||||
reduction(+:res1) copy(res2, res1)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */
|
||||
{
|
||||
res1 += 5;
|
||||
|
||||
|
@ -37,6 +43,9 @@ main (int argc, char *argv[])
|
|||
#endif
|
||||
#pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
|
||||
reduction(*:res1) copy(res1, res2)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */
|
||||
{
|
||||
res1 *= 5;
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
/* Test of reduction on parallel directive (with async). */
|
||||
/* See also Fortran variants in "../libgomp.oacc-fortran/par-reduction-2*". */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <assert.h>
|
||||
#include <openacc.h>
|
||||
|
||||
|
@ -16,6 +19,9 @@ main (int argc, char *argv[])
|
|||
#endif
|
||||
#pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
|
||||
reduction(+:res1) copy(res1, res2) async(1)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */
|
||||
{
|
||||
res1 += 5;
|
||||
|
||||
|
@ -39,6 +45,9 @@ main (int argc, char *argv[])
|
|||
#endif
|
||||
#pragma acc parallel num_gangs(GANGS) num_workers(32) vector_length(32) \
|
||||
reduction(*:res1) copy(res1, res2) async(1)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail { ! openacc_host_selected } } .-2 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-3 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-4 } */
|
||||
{
|
||||
res1 *= 5;
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
/* OpenACC parallelism dimensions clauses: num_gangs, num_workers,
|
||||
vector_length. */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
/* See also '../libgomp.oacc-fortran/parallel-dims.f90'. */
|
||||
|
||||
#include <limits.h>
|
||||
|
@ -105,6 +108,7 @@ int main ()
|
|||
gangs_max = workers_max = vectors_max = INT_MIN;
|
||||
#pragma acc parallel copy (gangs_actual) \
|
||||
num_gangs (GANGS) /* { dg-warning "'num_gangs' value must be positive" "" { target c++ } } */
|
||||
/* { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
/* We're actually executing with num_gangs (1). */
|
||||
gangs_actual = 1;
|
||||
|
@ -134,6 +138,7 @@ int main ()
|
|||
gangs_max = workers_max = vectors_max = INT_MIN;
|
||||
#pragma acc parallel copy (workers_actual) \
|
||||
num_workers (WORKERS) /* { dg-warning "'num_workers' value must be positive" "" { target c++ } } */
|
||||
/* { dg-warning "region contains worker partitioned code but is not worker partitioned" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
/* We're actually executing with num_workers (1). */
|
||||
workers_actual = 1;
|
||||
|
@ -163,6 +168,7 @@ int main ()
|
|||
gangs_max = workers_max = vectors_max = INT_MIN;
|
||||
#pragma acc parallel copy (vectors_actual) /* { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } } */ \
|
||||
vector_length (VECTORS) /* { dg-warning "'vector_length' value must be positive" "" { target c++ } } */
|
||||
/* { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
/* We're actually executing with vector_length (1), just the GCC nvptx
|
||||
back end enforces vector_length (32). */
|
||||
|
@ -208,6 +214,7 @@ int main ()
|
|||
#pragma acc parallel copy (gangs_actual) \
|
||||
reduction (min: gangs_min, workers_min, vectors_min) reduction (max: gangs_max, workers_max, vectors_max) \
|
||||
num_gangs (gangs)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-3 } */
|
||||
{
|
||||
if (acc_on_device (acc_device_host))
|
||||
{
|
||||
|
@ -617,6 +624,9 @@ int main ()
|
|||
gangs_max = workers_max = vectors_max = INT_MIN;
|
||||
#pragma acc serial copy (vectors_actual) /* { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } } */ \
|
||||
copy (gangs_min, gangs_max, workers_min, workers_max, vectors_min, vectors_max)
|
||||
/* { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-2 }
|
||||
{ dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "TODO 'serial'" { xfail *-*-* } .-3 }
|
||||
{ dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-4 } */
|
||||
{
|
||||
if (acc_on_device (acc_device_nvidia))
|
||||
{
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <openacc.h>
|
||||
|
@ -15,6 +16,7 @@ main ()
|
|||
#pragma acc data copy (dummy)
|
||||
{
|
||||
#pragma acc parallel num_gangs (N) reduction (+:s1) copy(s1)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */
|
||||
{
|
||||
s1++;
|
||||
}
|
||||
|
@ -35,6 +37,7 @@ main ()
|
|||
s2 = 0;
|
||||
|
||||
#pragma acc parallel num_gangs (10) reduction (+:s1, s2) copy(s1, s2)
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 } */
|
||||
{
|
||||
s1++;
|
||||
s2 += N;
|
||||
|
|
|
@ -2,10 +2,14 @@
|
|||
{ dg-skip-if "" { *-*-* } { "*" } { "-O2" } } */
|
||||
/* { dg-additional-options "-foffload=-fdump-rtl-mach" } */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
int a;
|
||||
#pragma acc declare create(a)
|
||||
|
||||
#pragma acc routine vector
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */
|
||||
void __attribute__((noinline, noclone))
|
||||
foo_v (void)
|
||||
{
|
||||
|
@ -13,6 +17,8 @@ foo_v (void)
|
|||
}
|
||||
|
||||
#pragma acc routine worker
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 }
|
||||
{ dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */
|
||||
void __attribute__((noinline, noclone))
|
||||
foo_w (void)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <assert.h>
|
||||
#include <openacc.h>
|
||||
|
||||
|
@ -22,6 +25,8 @@ void local_g_1()
|
|||
arr[i] = 3;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
int x;
|
||||
|
||||
|
@ -295,6 +300,8 @@ void loop_g_1()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang private(x)
|
||||
for (i = 0; i < 32; i++)
|
||||
|
@ -320,6 +327,7 @@ void loop_g_2()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang private(x)
|
||||
for (i = 0; i < 32; i++)
|
||||
|
@ -348,6 +356,7 @@ void loop_g_3()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang private(x)
|
||||
for (i = 0; i < 32; i++)
|
||||
|
@ -376,6 +385,7 @@ void loop_g_4()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang private(x)
|
||||
for (i = 0; i < 32; i++)
|
||||
|
@ -408,6 +418,7 @@ void loop_g_5()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang private(x)
|
||||
for (i = 0; i < 32; i++)
|
||||
|
@ -438,6 +449,7 @@ void loop_g_6()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang private(pt)
|
||||
for (i = 0; i < 32; i++)
|
||||
|
@ -559,6 +571,7 @@ void loop_w_1()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
int j;
|
||||
|
||||
|
@ -875,6 +888,8 @@ void parallel_g_1()
|
|||
arr[i] = 3;
|
||||
|
||||
#pragma acc parallel private(x) copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang(static:1)
|
||||
for (i = 0; i < 32; i++)
|
||||
|
@ -904,6 +919,7 @@ void parallel_g_2()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel private(x) copy(arr) num_gangs(32) num_workers(2) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (i = 0; i < 32; i++)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
/* Multiple reductions. */
|
||||
|
||||
|
@ -45,6 +46,7 @@ main (void)
|
|||
/* Nvptx targets require a vector_length or 32 in to allow spinlocks with
|
||||
gangs. */
|
||||
check_reduction (num_workers (nw) vector_length (vl), worker);
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
check_reduction (vector_length (vl), vector);
|
||||
check_reduction (num_gangs (ng) num_workers (nw) vector_length (vl), gang
|
||||
worker vector);
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
/* Tests of reduction on loop directive. */
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
|
@ -14,6 +17,8 @@ void g_np_1()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang reduction(+:res)
|
||||
for (i = 0; i < 1024; i++)
|
||||
|
@ -28,6 +33,8 @@ void g_np_1()
|
|||
res = hres = 1;
|
||||
|
||||
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang reduction(*:res)
|
||||
for (i = 0; i < 12; i++)
|
||||
|
@ -52,6 +59,7 @@ void gv_np_1()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang vector reduction(+:res)
|
||||
for (i = 0; i < 1024; i++)
|
||||
|
@ -76,6 +84,7 @@ void gw_np_1()
|
|||
arr[i] = i;
|
||||
|
||||
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop gang worker reduction(+:res)
|
||||
for (i = 0; i < 1024; i++)
|
||||
|
@ -239,6 +248,7 @@ void v_p_1()
|
|||
|
||||
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
|
||||
private(res) copyout(out)
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (j = 0; j < 32; j++)
|
||||
|
@ -315,6 +325,7 @@ void w_p_1()
|
|||
|
||||
#pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
|
||||
private(res) copyout(out)
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (j = 0; j < 32; j++)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openacc.h>
|
||||
#include <gomp-constants.h>
|
||||
|
@ -6,6 +9,8 @@
|
|||
|
||||
#pragma acc routine gang
|
||||
void __attribute__ ((noinline)) gang (int ary[N])
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 } */
|
||||
{
|
||||
#pragma acc loop gang
|
||||
for (unsigned ix = 0; ix < N; ix++)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openacc.h>
|
||||
#include <gomp-constants.h>
|
||||
|
@ -6,6 +9,7 @@
|
|||
|
||||
#pragma acc routine worker
|
||||
void __attribute__ ((noinline)) worker (int ary[N])
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 } */
|
||||
{
|
||||
#pragma acc loop worker
|
||||
for (unsigned ix = 0; ix < N; ix++)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openacc.h>
|
||||
#include <gomp-constants.h>
|
||||
|
@ -44,6 +47,7 @@ int DoWorkVec (int nw)
|
|||
printf ("spawning %d ...", nw); fflush (stdout);
|
||||
|
||||
#pragma acc parallel num_workers(nw) vector_length (NUM_VECTORS) copy (ary)
|
||||
/* { dg-warning "region contains vector partitioned code but is not vector partitioned" "" { target openacc_radeon_accel_selected } .-1 } */
|
||||
{
|
||||
WorkVec ((int *)ary, WIDTH, HEIGHT, nw, NUM_VECTORS);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
variables" (only visible to members of the GitHub OpenACC organization).
|
||||
*/
|
||||
|
||||
/* { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
aspects of that functionality. */
|
||||
|
||||
|
||||
#undef NDEBUG
|
||||
#include <assert.h>
|
||||
|
@ -63,6 +66,9 @@ static void t0_c(void)
|
|||
static const int t0_r_var_init = 61;
|
||||
|
||||
#pragma acc routine gang
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+4 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */
|
||||
__attribute__((noinline))
|
||||
static int t0_r_r(void)
|
||||
{
|
||||
|
@ -123,6 +129,7 @@ static void t1_c(void)
|
|||
{
|
||||
int result = 0;
|
||||
int num_gangs_actual = -1;
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+1 } */
|
||||
#pragma acc parallel \
|
||||
num_gangs(num_gangs_request) \
|
||||
reduction(max:num_gangs_actual) \
|
||||
|
@ -153,6 +160,9 @@ static void t1_c(void)
|
|||
static const int t1_r2_var_init = 166;
|
||||
|
||||
#pragma acc routine gang
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+4 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */
|
||||
__attribute__((noinline))
|
||||
static int t1_r2_r(void)
|
||||
{
|
||||
|
@ -245,6 +255,9 @@ static void t1_r2(void)
|
|||
static const int t2_var_init_2 = -55;
|
||||
|
||||
#pragma acc routine gang
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+4 } */
|
||||
/* { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .+3 } */
|
||||
/* { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .+2 } */
|
||||
__attribute__((noinline))
|
||||
static int t2_r(void)
|
||||
{
|
||||
|
@ -286,6 +299,7 @@ static void t2(void)
|
|||
itself, meaning that all 'i = 0' execution has finished (on the
|
||||
device) before 'i = 1' is started (on the device), etc. */
|
||||
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+1 } */
|
||||
#pragma acc parallel \
|
||||
present(results_1) \
|
||||
num_gangs(num_gangs_request_1) \
|
||||
|
@ -308,6 +322,7 @@ static void t2(void)
|
|||
results_2[i][__builtin_goacc_parlevel_id(GOMP_DIM_GANG)] += t2_r();
|
||||
}
|
||||
|
||||
/* { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'atomic'" { xfail *-*-* } .+1 } */
|
||||
#pragma acc parallel \
|
||||
present(results_3) \
|
||||
num_gangs(num_gangs_request_3) \
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program main
|
||||
implicit none
|
||||
|
||||
|
@ -30,6 +33,8 @@ contains
|
|||
end do
|
||||
|
||||
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 }
|
||||
!$acc loop gang private(x)
|
||||
do i = 1, 32
|
||||
x = i * 2;
|
||||
|
@ -55,6 +60,7 @@ contains
|
|||
end do
|
||||
|
||||
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop gang private(pt)
|
||||
do i = 0, 31
|
||||
pt%x = i
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for
|
||||
! testing/documenting aspects of that functionality.
|
||||
|
||||
PROGRAM MAIN
|
||||
IMPLICIT NONE
|
||||
INCLUDE "openacc_lib.h"
|
||||
|
@ -15,6 +18,9 @@
|
|||
|
||||
!$ACC PARALLEL NUM_GANGS(256) NUM_WORKERS(32) VECTOR_LENGTH(32)
|
||||
!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1)
|
||||
! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
|
||||
res1 = res1 + 5
|
||||
|
||||
!$ACC ATOMIC
|
||||
|
@ -37,6 +43,9 @@
|
|||
|
||||
!$ACC PARALLEL NUM_GANGS(8) NUM_WORKERS(32) VECTOR_LENGTH(32)
|
||||
!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1)
|
||||
! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
|
||||
res1 = res1 * 5
|
||||
|
||||
!$ACC ATOMIC
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for
|
||||
! testing/documenting aspects of that functionality.
|
||||
|
||||
PROGRAM MAIN
|
||||
USE OPENACC
|
||||
IMPLICIT NONE
|
||||
|
@ -15,6 +18,9 @@
|
|||
|
||||
!$ACC PARALLEL NUM_GANGS(256) NUM_WORKERS(32) VECTOR_LENGTH(32)
|
||||
!$ACC& REDUCTION(+:RES1) COPY(RES1, RES2) ASYNC(1)
|
||||
! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
|
||||
res1 = res1 + 5
|
||||
|
||||
!$ACC ATOMIC
|
||||
|
@ -37,6 +43,9 @@
|
|||
|
||||
!$ACC PARALLEL NUM_GANGS(8) NUM_WORKERS(32) VECTOR_LENGTH(32)
|
||||
!$ACC& REDUCTION(*:RES1) COPY(RES1, RES2) ASYNC(1)
|
||||
! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction', 'atomic'" { xfail *-*-* } .-1 }
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
|
||||
res1 = res1 * 5
|
||||
|
||||
!$ACC ATOMIC
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
! { dg-do run }
|
||||
! { dg-prune-output "command-line option '-fintrinsic-modules-path=.*' is valid for Fortran but not for C" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
! See also '../libgomp.oacc-c-c++-common/parallel-dims.c'.
|
||||
|
||||
module acc_routines
|
||||
|
@ -84,6 +87,9 @@ program main
|
|||
vectors_max = -huge(gangs_max) - 1 ! INT_MIN
|
||||
!$acc serial copy (vectors_actual) &
|
||||
!$acc copy (gangs_min, gangs_max, workers_min, workers_max, vectors_min, vectors_max) ! { dg-warning "using vector_length \\(32\\), ignoring 1" "" { target openacc_nvidia_accel_selected } }
|
||||
! { dg-bogus "warning: region contains gang partitioned code but is not gang partitioned" "TODO 'serial'" { xfail *-*-* } .-1 }
|
||||
! { dg-bogus "warning: region contains worker partitioned code but is not worker partitioned" "TODO 'serial'" { xfail *-*-* } .-2 }
|
||||
! { dg-bogus "warning: region contains vector partitioned code but is not vector partitioned" "TODO 'serial'" { xfail *-*-* } .-3 }
|
||||
if (acc_on_device (acc_device_nvidia)) then
|
||||
! The GCC nvptx back end enforces vector_length (32).
|
||||
! It's unclear if that's actually permissible here;
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program reduction
|
||||
implicit none
|
||||
integer, parameter :: n = 10
|
||||
|
@ -10,6 +13,7 @@ program reduction
|
|||
s2 = 0
|
||||
|
||||
!$acc parallel reduction(+:s1,s2) num_gangs (n) copy(s1)
|
||||
! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 }
|
||||
s1 = s1 + 1
|
||||
s2 = s2 + 1
|
||||
!$acc end parallel
|
||||
|
@ -40,6 +44,7 @@ subroutine redsub(s1, s2, n)
|
|||
integer :: s1, s2, n
|
||||
|
||||
!$acc parallel reduction(+:s1,s2) num_gangs (10) copy(s1)
|
||||
! { dg-bogus "warning: region is gang partitioned but does not contain gang partitioned code" "TODO 'reduction'" { xfail *-*-* } .-1 }
|
||||
s1 = s1 + 1
|
||||
s2 = s2 + 1
|
||||
!$acc end parallel
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program foo
|
||||
integer :: a(3,3,3), ll, lll
|
||||
|
||||
a = 1
|
||||
|
||||
!$acc parallel num_gangs(1) num_workers(2)
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
|
||||
if (any(a(1:3,1:3,1:3).ne.1)) STOP 1
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
|
||||
! Test of gang-private variables declared on loop directive.
|
||||
|
||||
|
@ -13,6 +16,8 @@ subroutine t1()
|
|||
end do
|
||||
|
||||
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 }
|
||||
!$acc loop gang private(x)
|
||||
do i = 1, 32
|
||||
x = i * 2;
|
||||
|
@ -37,6 +42,7 @@ subroutine t2()
|
|||
end do
|
||||
|
||||
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop gang private(x)
|
||||
do i = 0, 31
|
||||
x = i * 2;
|
||||
|
@ -65,6 +71,7 @@ subroutine t3()
|
|||
end do
|
||||
|
||||
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop gang private(x)
|
||||
do i = 0, 31
|
||||
x = i * 2;
|
||||
|
@ -98,6 +105,7 @@ subroutine t4()
|
|||
end do
|
||||
|
||||
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop gang private(pt)
|
||||
do i = 0, 31
|
||||
pt%x = i
|
||||
|
@ -208,6 +216,7 @@ subroutine t7()
|
|||
end do
|
||||
|
||||
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop gang private(x)
|
||||
do i = 0, 31
|
||||
!$acc loop worker private(x)
|
||||
|
@ -507,6 +516,8 @@ subroutine t14()
|
|||
end do
|
||||
|
||||
!$acc parallel private(x) copy(arr) num_gangs(n) num_workers(8) vector_length(32)
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 }
|
||||
!$acc loop gang(static:1)
|
||||
do i = 1, n
|
||||
x = i * 2;
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
! Integer reductions
|
||||
|
||||
program reduction_1
|
||||
|
@ -279,6 +282,7 @@ program reduction_1
|
|||
!$acc end parallel
|
||||
|
||||
!$acc parallel vector_length(vl) copy(rv)
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop reduction(ior:rv) gang
|
||||
do i = 1, n
|
||||
rv = ior (rv, array(i))
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
! { dg-do run }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
! subroutine reduction
|
||||
|
||||
program reduction
|
||||
|
@ -45,6 +48,7 @@ subroutine redsub_worker(sum, n, c)
|
|||
sum = 0
|
||||
|
||||
!$acc parallel copyin (n, c) num_workers(4) vector_length (32) copy(sum)
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop reduction(+:sum) worker
|
||||
do i = 1, n
|
||||
sum = sum + c
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
! { dg-do run }
|
||||
! { dg-additional-options "-cpp" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
|
||||
program reduction
|
||||
implicit none
|
||||
|
||||
|
@ -28,6 +31,7 @@ program reduction
|
|||
!$acc end parallel
|
||||
|
||||
!$acc parallel num_workers (4) vector_length (32)
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
|
||||
!$acc loop reduction(+:ws1, ws2) worker
|
||||
do i = 1, n
|
||||
ws1 = ws1 + 1
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
! { dg-do run }
|
||||
! { dg-additional-options "-cpp" }
|
||||
|
||||
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
|
||||
! aspects of that functionality.
|
||||
!TODO { dg-additional-options "-fno-inline" } for stable results regarding OpenACC 'routine'.
|
||||
|
||||
#define M 8
|
||||
#define N 32
|
||||
|
||||
|
@ -97,6 +101,8 @@ end subroutine worker
|
|||
|
||||
subroutine gang (a)
|
||||
!$acc routine gang
|
||||
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-2 }
|
||||
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-3 }
|
||||
integer, intent (inout) :: a(N)
|
||||
integer :: i
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue