1/* Trivial test of ordered. */ 2 3/* { dg-require-effective-target sync_int_long } */ 4 5#include <omp.h> 6#include <string.h> 7#include <assert.h> 8#include "libgomp_g.h" 9 10 11#define N 100 12static int next; 13static int CHUNK, NTHR; 14 15static void clean_data (void) 16{ 17 next = 0; 18} 19 20static void set_data (long i) 21{ 22 int n = __sync_fetch_and_add (&next, 1); 23 assert (n == i); 24} 25 26 27#define TMPL_1(sched) \ 28static void f_##sched##_1 (void *dummy) \ 29{ \ 30 long s0, e0, i; \ 31 if (GOMP_loop_ordered_##sched##_start (0, N, 1, CHUNK, &s0, &e0)) \ 32 do \ 33 { \ 34 for (i = s0; i < e0; ++i) \ 35 { \ 36 GOMP_ordered_start (); \ 37 set_data (i); \ 38 GOMP_ordered_end (); \ 39 } \ 40 } \ 41 while (GOMP_loop_ordered_##sched##_next (&s0, &e0)); \ 42 GOMP_loop_end (); \ 43} \ 44static void t_##sched##_1 (void) \ 45{ \ 46 clean_data (); \ 47 GOMP_parallel_start (f_##sched##_1, NULL, NTHR); \ 48 f_##sched##_1 (NULL); \ 49 GOMP_parallel_end (); \ 50} 51 52TMPL_1(static) 53TMPL_1(dynamic) 54TMPL_1(guided) 55 56static void test (void) 57{ 58 t_static_1 (); 59 t_dynamic_1 (); 60 t_guided_1 (); 61} 62 63int main() 64{ 65 omp_set_dynamic (0); 66 67 NTHR = 4; 68 69 CHUNK = 1; 70 test (); 71 72 CHUNK = 5; 73 test (); 74 75 CHUNK = 7; 76 test (); 77 78 CHUNK = 0; 79 t_static_1 (); 80 81 return 0; 82} 83