annotate src/parallel_execution/worker.c @ 125:77e60b6cdace

Work dependency example
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 27 Sep 2016 17:22:00 +0900
parents 4ff6f093b695
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <libkern/OSAtomic.h>
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include "context.h"
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include "origin_cs.h"
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
125
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
6 __code meta_getTask(struct Context* context, struct Queue* queue, enum Code next) {
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
7 context->data[Queue] = (union Data *)queue;
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
8 goto (context->code[next])(context);
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
9 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
10
125
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
11 __code getTask(struct Context* context, struct Queue* activeQueue) {
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
12 context->next = GetInputData1;
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
13 activeQueue->emptyNext = GetTask;
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
14 goto meta_getTask(context, activeQueue, GetQueue1);
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
15 }
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
16
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
17 __code getTask_stub(struct Context* context) {
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
18 goto getTask(context, &context->data[ActiveQueue]->queue);
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
19 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
20
121
bb8be1820302 Rename Code Gears
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 119
diff changeset
21 __code getQueue1(struct Context* context, struct Queue* queue, struct Element* element) {
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 if (queue->first == 0)
125
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
23 goto meta(context, queue->emptyNext);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
123
4ff6f093b695 Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 122
diff changeset
25 element->data = queue->first->data;
125
77e60b6cdace Work dependency example
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 123
diff changeset
26 if (__sync_bool_compare_and_swap(&queue->first, queue->first, queue->next)) {
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 queue->count--;
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
28 goto meta(context, context->next);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 } else {
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
30 goto meta(context, GetQueue1);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
121
bb8be1820302 Rename Code Gears
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 119
diff changeset
34 __code getQueue1_stub(struct Context* context) {
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
35 goto getQueue1(context, &context->data[Queue]->queue, &context->data[Element]->element);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
36 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
37
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
38 __code getInputData1(struct Context* context, struct Task* task, struct Node* node, struct LoopCounter* loopCounter) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
39 int i = loopCounter->i;
123
4ff6f093b695 Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 122
diff changeset
40 if(i < sizeof(task->iKeys) / sizeof(int)) {
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
41 context->next = GetInputData2;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
42 node->key = task->iKeys[i];
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
43 struct Traverse *t = &context->data[Traverse]->traverse;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
44 t->next = GetQueue1;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
45 goto meta(context, Get);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
46 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
47 loopCounter->i = 0;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
48 goto meta(context, GetOutputData1);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
49 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
50
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
51 __code getInputData1_stub(struct Context* context) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
52 goto getInputData1(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
53 (struct Task*)(context->data[Element]->element.data),
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
54 &context->data[Node]->node,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
55 &context->data[LoopCounter]->loopCounter);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
56 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
57
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
58 __code getInputData2(struct Context* context, struct Task* task, union Data* data, struct LoopCounter* loopCounter) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
59 int i = loopCounter->i;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
60 task->iargs[i] = data;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
61 loopCounter->i++;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
62 goto meta(context, GetInputData1);
119
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
63 }
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
64
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
65 __code getInputData2_stub(struct Context* context) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
66 goto getInputData2(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
67 (struct Task*)(context->data[Element]->element.data),
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
68 context->data[Node]->node.value,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
69 &context->data[LoopCounter]->loopCounter);
119
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
70 }
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
71
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
72 __code getOutputData1(struct Context* context, struct Task* task, struct Node* node, struct LoopCounter* loopCounter) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
73 int i = loopCounter->i;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
74 if(i < sizeof(task->oKeys)/ sizeof(int)) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
75 context->next = GetOutputData2;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
76 node->key = task->oKeys[i];
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
77 struct Traverse *t = &context->data[Traverse]->traverse;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
78 t->next = GetQueue1;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
79 goto meta(context, Get);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
80 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
81 context->next = CheckTaskFinish1;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
82 loopCounter->i = 0;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
83 goto meta(context, task->code);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
84 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
85
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
86 __code getOutputData1_stub(struct Context* context) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
87 goto getOutputData1(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
88 (struct Task*)(context->data[Element]->element.data),
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
89 &context->data[Node]->node,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
90 &context->data[LoopCounter]->loopCounter);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
91 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
92
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
93 __code getOutputData2(struct Context* context, struct Task* task, union Data* data, struct LoopCounter* loopCounter) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
94 int i = loopCounter->i;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
95 task->oargs[i] = data;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
96 loopCounter->i++;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
97 goto meta(context, GetOutputData1);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
98 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
99
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
100 __code getOutputData2_stub(struct Context* context) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
101 goto getOutputData2(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
102 (struct Task*)(context->data[Element]->element.data),
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
103 context->data[Node]->node.value,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
104 &context->data[LoopCounter]->loopCounter);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 }
101
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
106
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
107 #ifdef USE_CUDA
98
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
108 __code twiceGpu(struct Context* context) {
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
109 cuMemcpyHtoDAsync(context,context,context,context->stream);
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
110 cuLaunchkanel();
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
111 cuMemcpyDtoHAsync();
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
112 }
101
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
113 #endif