diff libgomp/testsuite/libgomp.c/ordered-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/ordered-2.c	Fri Jul 17 14:47:48 2009 +0900
@@ -0,0 +1,82 @@
+/* Trivial test of ordered.  */
+
+/* { dg-require-effective-target sync_int_long } */
+
+#include <omp.h>
+#include <string.h>
+#include <assert.h>
+#include "libgomp_g.h"
+
+
+#define N 100
+static int next;
+static int CHUNK, NTHR;
+
+static void clean_data (void)
+{
+  next = 0;
+}
+
+static void set_data (long i)
+{
+  int n = __sync_fetch_and_add (&next, 1);
+  assert (n == i);
+}
+
+
+#define TMPL_1(sched)							\
+static void f_##sched##_1 (void *dummy)					\
+{									\
+  long s0, e0, i;							\
+  if (GOMP_loop_ordered_##sched##_start (0, N, 1, CHUNK, &s0, &e0))	\
+    do									\
+      {									\
+	for (i = s0; i < e0; ++i)					\
+	  {								\
+	    GOMP_ordered_start ();					\
+	    set_data (i);						\
+	    GOMP_ordered_end ();					\
+	  }								\
+      }									\
+    while (GOMP_loop_ordered_##sched##_next (&s0, &e0));		\
+  GOMP_loop_end ();							\
+}									\
+static void t_##sched##_1 (void)					\
+{									\
+  clean_data ();							\
+  GOMP_parallel_start (f_##sched##_1, NULL, NTHR);			\
+  f_##sched##_1 (NULL);							\
+  GOMP_parallel_end ();							\
+}
+
+TMPL_1(static)
+TMPL_1(dynamic)
+TMPL_1(guided)
+
+static void test (void)
+{
+  t_static_1 ();
+  t_dynamic_1 ();
+  t_guided_1 ();
+}
+
+int main()
+{
+  omp_set_dynamic (0);
+
+  NTHR = 4;
+
+  CHUNK = 1;
+  test ();
+
+  CHUNK = 5;
+  test ();
+
+  CHUNK = 7;
+  test ();
+
+  CHUNK = 0;
+  t_static_1 ();
+
+  return 0;
+}