diff mbox

[gomp4] Additional tests

Message ID 55A6851F.5090003@codesourcery.com
State New
Headers show

Commit Message

James Norris July 15, 2015, 4:06 p.m. UTC
Hi,

The attached patch add tests for combined directives for, i.e.,
the parallel + loop directive and the kernel + loop directive
for C/C++/Fortran. Tests also added for the private, num_gangs,
num_workers, and vector_length clauses with the parallel
directive in Fortran.

Jim
diff mbox

Patch

diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/combdir-1.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/combdir-1.c
new file mode 100644
index 0000000..a7def92
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/combdir-1.c
@@ -0,0 +1,52 @@ 
+/* { dg-do run } */
+
+#include <stdlib.h>
+
+int
+main (int argc, char **argv)
+{
+  const int N = 32;
+  float a[N], b[N];
+  int i;
+
+  for (i = 0; i < N; i++)
+    {
+      a[i] = 1.0;
+      b[i] = 0.0;
+    }
+
+#pragma acc parallel loop copy (a[0:N]) copy (b[0:N])
+  for (i = 0; i < N; i++)
+    {
+      b[i] = 2.0;
+      a[i] = a[i] + b[i];
+    }
+
+  for (i = 0; i < N; i++)
+    {
+      if (a[i] != 3.0)
+	abort ();
+
+      if (b[i] != 2.0)
+	abort ();
+    }
+
+#pragma acc kernels loop copy (a[0:N]) copy (b[0:N])
+  for (i = 0; i < N; i++)
+    {
+      b[i] = 3.0;
+      a[i] = a[i] + b[i];
+    }
+
+  for (i = 0; i < N; i++)
+    {
+      if (a[i] != 6.0)
+	abort ();
+
+      if (b[i] != 3.0)
+	abort ();
+    }
+
+  return 0;
+
+} 
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/combdir-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/combdir-1.f90
new file mode 100644
index 0000000..0cd8a67
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/combdir-1.f90
@@ -0,0 +1,37 @@ 
+! { dg-do run }
+
+program main
+  integer, parameter :: n = 32
+  real :: a(n), b(n);
+  integer :: i
+
+  do i = 1, n
+    a(i) = 1.0
+    b(i) = 0.0
+  end do
+
+  !$acc parallel loop copy (a(1:n)) copy (b(1:n))
+  do i = 1, n
+    b(i) = 2.0
+    a(i) = a(i) + b(i)
+  end do
+
+  do i = 1, n
+    if (a(i) .ne. 3.0) call abort
+
+    if (b(i) .ne. 2.0) call abort
+  end do
+
+  !$acc kernels loop copy (a(1:n)) copy (b(1:n))
+  do i = 1, n
+    b(i) = 3.0;
+    a(i) = a(i) + b(i)
+  end do
+
+  do i = 1, n
+    if (a(i) .ne. 6.0) call abort
+
+    if (b(i) .ne. 3.0) call abort
+  end do
+
+end program main
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/private-vars-par-gang-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/private-vars-par-gang-2.f90
new file mode 100644
index 0000000..bb0891c
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-fortran/private-vars-par-gang-2.f90
@@ -0,0 +1,37 @@ 
+
+! { dg-additional-options "-cpp" }
+
+! Test of gang-private variables declared on the parallel directive.
+
+#if defined(ACC_DEVICE_TYPE_host) || defined(ACC_DEVICE_TYPE_host_nonshm)
+#define ACTUAL_GANGS 1
+#else
+#define ACTUAL_GANGS 32
+#endif
+
+program main
+  integer :: x = 5
+  integer, parameter :: n = ACTUAL_GANGS
+  integer :: arr(n)
+
+  do i = 1, n
+    arr(i) = 3
+  end do
+
+  !$acc parallel private(x) copy(arr) num_gangs(n) num_workers(8) vector_length(32)
+    !$acc loop gang(static:1)
+    do i = 1, n
+      x = i * 2;
+    end do
+
+   !$acc loop gang(static:1)
+    do i = 1, n
+      arr(i) = arr(i) + x
+    end do
+  !$acc end parallel
+
+  do i = 1, n
+    if (arr(i) .ne. (3 + i * 2)) call abort
+  end do
+
+end program main