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

Reply via email to