File: minimum_tbblike.c

package info (click to toggle)
massivethreads 1.02-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,924 kB
  • sloc: ansic: 27,814; sh: 4,559; cpp: 3,334; javascript: 1,799; makefile: 1,745; python: 523; asm: 373; perl: 118; lisp: 9
file content (48 lines) | stat: -rw-r--r-- 973 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/* 
 * minimum function test for dag_recorder
 */

#if STANDALONE_TEST
int dr_get_worker() { return 0; }
int dr_get_max_workers() { return 1; }
#else  /* with MassiveThreads */
#include <myth.h>
int dr_get_worker() { return myth_get_worker_num(); }
int dr_get_max_workers() { return myth_get_num_workers(); }
#endif

#include <dag_recorder.h>

static int bin(int n) {
  if (n == 0) {
    return 1;
  } else {
    dr_begin_section();
    /* sandwich create_task */
    dr_dag_node * c;
    dr_dag_node * t = dr_enter_create_task(&c);
    int x;
    { 
      /* inside task. sandwich entire task */
      dr_start_task(c);
      x = bin(n - 1);
      dr_end_task();
    }
    dr_return_from_create_task(t);
    int y = bin(n - 1);
    /* sandwich wait_tasks */
    t = dr_enter_wait_tasks();
    dr_return_from_wait_tasks(t);
    return x + y;
  }
}


int main() {
  int n = 10;
  dr_start(0);
  long x = bin(n);
  dr_stop();
  printf("bin(%d) = %ld\n", n, x);
  return 0;
}