diff mbox series

[openacc,testsuite,committed] Fix openacc float reduction testcases

Message ID 7b9c0edd-9917-4393-c490-f1a621390918@mentor.com
State New
Headers show
Series [openacc,testsuite,committed] Fix openacc float reduction testcases | expand

Commit Message

Tom de Vries Oct. 4, 2017, 8:53 a.m. UTC
Hi,

I found 3 test-cases in libgomp/testsuite/libgomp.oacc-c-c++-common that 
do a 32-bit floating point reduction on integer values and verify the 
result using an equality test, while the result is larger than the 
largest integer that can be exactly represented in 32-bit fp (16777216). 
  This makes the test-cases sensitive to changes in computation order.

Fixed by modifying the arrays that are being reduced to contain smaller 
values.

Committed.

Thanks,
- Tom
diff mbox series

Patch

Fix openacc float reduction testcases

2017-10-04  Tom de Vries  <tom@codesourcery.com>

	* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
	(main): Reduce sum of arr elements.  Assert that hres is exactly
	representable in 32-bit floating point.
	* testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
	(main): Reduce sum of arr elements.  Assert that hres and hmres are
	exactly representable in 32-bit floating point.
	* testsuite/libgomp.oacc-c-c++-common/reduction-7.c (gwv_np_4): Same.

---
 .../testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c  | 3 ++-
 .../testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c  | 5 ++++-
 libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c            | 5 ++++-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
index 8d85fed..6369d7f 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-3.c
@@ -11,7 +11,7 @@  main (int argc, char *argv[])
   float res = 0, hres = 0;
 
   for (i = 0; i < 32768; i++)
-    arr[i] = i;
+    arr[i] = i % (32768 / 64);
 
   #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
     reduction(+:res) copy(res)
@@ -36,6 +36,7 @@  main (int argc, char *argv[])
 	hres += arr[j * 1024 + (1023 - i)];
       }
 
+  assert (hres <= 16777216);
   assert (res == hres);
 
   return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
index 1904b4a..140c322 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/par-loop-comb-reduction-4.c
@@ -11,7 +11,7 @@  main (int argc, char *argv[])
   float res = 0, mres = 0, hres = 0, hmres = 0;
 
   for (i = 0; i < 32768; i++)
-    arr[i] = i;
+    arr[i] = i % (32768 / 64);
 
   #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32) \
     reduction(+:res) reduction(max:mres) copy(res, mres)
@@ -48,7 +48,10 @@  main (int argc, char *argv[])
 	  hmres = arr[j * 1024 + (1023 - i)];
       }
 
+  assert (hres <= 16777216);
   assert (res == hres);
+
+  assert (hmres <= 16777216);
   assert (mres == hmres);
 
   return 0;
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
index cc3cd07..c4940b8 100644
--- a/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/reduction-7.c
@@ -183,7 +183,7 @@  void gwv_np_4()
   float res = 0, mres = 0, hres = 0, hmres = 0;
 
   for (i = 0; i < 32768; i++)
-    arr[i] = i;
+    arr[i] = i % (32768 / 64);
 
   #pragma acc parallel num_gangs(32) num_workers(32) vector_length(32)
   {
@@ -219,7 +219,10 @@  void gwv_np_4()
 	  hmres = arr[j * 1024 + (1023 - i)];
       }
 
+  assert (hres <= 16777216);
   assert (res == hres);
+
+  assert (hmres <= 16777216);
   assert (mres == hmres);
 }