diff libgomp/testsuite/libgomp.c/reduction-2.c @ 0:a06113de4d67

first commit
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2009 14:47:48 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgomp/testsuite/libgomp.c/reduction-2.c	Fri Jul 17 14:47:48 2009 +0900
@@ -0,0 +1,50 @@
+#include <omp.h>
+#include <stdlib.h>
+
+int
+main (void)
+{
+  int i = 0, j = 0, k = ~0, l;
+  double d = 1.0;
+#pragma omp parallel num_threads(4)
+  {
+#pragma omp single
+    {
+      i = 16;
+      k ^= (1 << 16);
+      d += 32.0;
+    }
+
+#pragma omp for reduction(+:i) reduction(*:d) reduction(&:k)
+    for (l = 0; l < 4; l++)
+      {
+	if (omp_get_num_threads () == 4 && (i != 0 || d != 1.0 || k != ~0))
+#pragma omp atomic
+	  j |= 1;
+  
+	if (l == omp_get_thread_num ())
+	  {
+	    i = omp_get_thread_num ();
+	    d = i + 1;
+	    k = ~(1 << (2 * i));
+	  }
+      }
+
+    if (omp_get_num_threads () == 4)
+      {
+	if (i != (16 + 0 + 1 + 2 + 3))
+#pragma omp atomic
+	  j |= 2;
+	if (d != (33.0 * 1.0 * 2.0 * 3.0 * 4.0))
+#pragma omp atomic
+	  j |= 4;
+	if (k != (~0 ^ 0x55 ^ (1 << 16)))
+#pragma omp atomic
+	  j |= 8;
+      }
+  }
+
+  if (j)
+    abort ();
+  return 0;
+}