Hi! On 2020-06-29T13:16:52-0700, Julian Brown <jul...@codesourcery.com> wrote: > --- /dev/null > +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/broadcast-many.c
That one already/currently works without any code changes. > @@ -0,0 +1,79 @@ > +/* { dg-additional-options "-foffload=-mgang-local-size=64" } */ ... just without that directive, obviously. Pushed to master branch commit 8251f90e87f67e09f5203e8edd77bfe73b68a54d "Add 'libgomp.oacc-c-c++-common/broadcast-many.c'", see attached. Grüße Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
>From 8251f90e87f67e09f5203e8edd77bfe73b68a54d Mon Sep 17 00:00:00 2001 From: Julian Brown <jul...@codesourcery.com> Date: Mon, 29 Jun 2020 13:16:52 -0700 Subject: [PATCH] Add 'libgomp.oacc-c-c++-common/broadcast-many.c' libgomp/ * testsuite/libgomp.oacc-c-c++-common/broadcast-many.c: New test. --- .../broadcast-many.c | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/broadcast-many.c diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/broadcast-many.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/broadcast-many.c new file mode 100644 index 00000000000..d763a754a11 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/broadcast-many.c @@ -0,0 +1,77 @@ +#include <assert.h> +#include <stdio.h> + +#define LOCAL(n) double n = input; +#define LOCALS(n) LOCAL(n##1) LOCAL(n##2) LOCAL(n##3) LOCAL(n##4) \ + LOCAL(n##5) LOCAL(n##6) LOCAL(n##7) LOCAL(n##8) +#define LOCALS2(n) LOCALS(n##a) LOCALS(n##b) LOCALS(n##c) LOCALS(n##d) \ + LOCALS(n##e) LOCALS(n##f) LOCALS(n##g) LOCALS(n##h) + +#define USE(n) n +#define USES(n,OP) USE(n##1) OP USE(n##2) OP USE(n##3) OP USE (n##4) OP \ + USE(n##5) OP USE(n##6) OP USE(n##7) OP USE (n##8) +#define USES2(n,OP) USES(n##a,OP) OP USES(n##b,OP) OP USES(n##c,OP) OP \ + USES(n##d,OP) OP USES(n##e,OP) OP USES(n##f,OP) OP \ + USES(n##g,OP) OP USES(n##h,OP) + +int main (void) +{ + int ret; + int input = 1; + + #pragma acc parallel num_gangs(1) num_workers(32) copyout(ret) + { + int w = 0; + LOCALS2(h); + + #pragma acc loop worker reduction(+:w) + for (int i = 0; i < 32; i++) + { + int u = USES2(h,+); + w += u; + } + + printf ("w=%d\n", w); + /* { dg-output "w=2048(\n|\r\n|\r)" } */ + + LOCALS2(i); + + #pragma acc loop worker reduction(+:w) + for (int i = 0; i < 32; i++) + { + int u = USES2(i,+); + w += u; + } + + printf ("w=%d\n", w); + /* { dg-output "w=4096(\n|\r\n|\r)" } */ + + LOCALS2(j); + LOCALS2(k); + + #pragma acc loop worker reduction(+:w) + for (int i = 0; i < 32; i++) + { + int u = USES2(j,+); + w += u; + } + + printf ("w=%d\n", w); + /* { dg-output "w=6144(\n|\r\n|\r)" } */ + + #pragma acc loop worker reduction(+:w) + for (int i = 0; i < 32; i++) + { + int u = USES2(k,+); + w += u; + } + + ret = (w == 64 * 32 * 4); + printf ("w=%d\n", w); + /* { dg-output "w=8192(\n|\r\n|\r)" } */ + } + + assert (ret); + + return 0; +} -- 2.33.0