comparison gcc/testsuite/c-c++-common/cilk-plus/CK/fib_no_sync.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* { dg-do run } */
2 /* { dg-require-effective-target cilkplus_runtime } */
3 /* { dg-options "-fcilkplus" } */
4
5 #if HAVE_IO
6 #include <stdio.h>
7 #endif
8
9 #define FIB_ITERATION 30
10
11 int fib (int);
12 int fib_serial (int);
13
14 int main(void)
15 {
16 int ii = 0;
17 int fib_result[FIB_ITERATION+1], fib_serial_result[FIB_ITERATION+1];
18 #if HAVE_IO
19
20 for (ii = 0; ii <= FIB_ITERATION; ii++)
21 printf("fib (%2d) = %10d\n", ii, fib (ii));
22 #else
23 for (ii = 0; ii <= FIB_ITERATION; ii++)
24 {
25 fib_result[ii] = fib (ii);
26 }
27
28 fib_serial_result[0] = 0;
29 fib_serial_result[1] = 1;
30
31 for (ii = 2; ii <= FIB_ITERATION; ii++)
32 fib_serial_result[ii] = fib_serial_result[ii-1] + fib_serial_result[ii-2];
33
34 for (ii = 0; ii <= FIB_ITERATION; ii++)
35 {
36 if (fib_result[ii] != fib_serial_result[ii])
37 __builtin_abort ();
38 }
39
40 #endif
41 return 0;
42 }
43
44 int fib_serial (int n)
45 {
46 int x = 0, y = 0;
47 if (n < 2)
48 return n;
49 else
50 {
51 x = fib_serial (n-1);
52 y = fib_serial (n-2);
53 return (x+y);
54 }
55 }
56
57 int fib(int n)
58 {
59 if (n < 2)
60 return n;
61 else
62 {
63 int x = _Cilk_spawn fib(n-1);
64 int y = fib(n-2);
65 return (x+y);
66 }
67 }