annotate src/parallel_execution/worker.c @ 123:4ff6f093b695

Fix segmentation fault
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 13 Sep 2016 11:54:25 +0900
parents a086857e1812
children 77e60b6cdace
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
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
6 __code initWorker(struct Context* context) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
7 context->next = GetInputData1;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
8 goto meta(context, GetQueue1);
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
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
11 __code initWorker_stub(struct Context* context) {
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
12 goto initWorker(context);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
13 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
14
121
bb8be1820302 Rename Code Gears
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 119
diff changeset
15 __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
16 if (queue->first == 0)
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 return;
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
123
4ff6f093b695 Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 122
diff changeset
19 element->data = queue->first->data;
4ff6f093b695 Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 122
diff changeset
20 if (__sync_bool_compare_and_swap(&queue->first, queue->first, queue->first->next)) {
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 queue->count--;
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
22 goto meta(context, context->next);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 } else {
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
24 goto meta(context, GetQueue1);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 }
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 }
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
121
bb8be1820302 Rename Code Gears
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 119
diff changeset
28 __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
29 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
30 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
31
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
32 __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
33 int i = loopCounter->i;
123
4ff6f093b695 Fix segmentation fault
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 122
diff changeset
34 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
35 context->next = GetInputData2;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
36 node->key = task->iKeys[i];
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
37 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
38 t->next = GetQueue1;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
39 goto meta(context, Get);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
40 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
41 loopCounter->i = 0;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
42 goto meta(context, GetOutputData1);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
43 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
44
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
45 __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
46 goto getInputData1(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
47 (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
48 &context->data[Node]->node,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
49 &context->data[LoopCounter]->loopCounter);
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
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
52 __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
53 int i = loopCounter->i;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
54 task->iargs[i] = data;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
55 loopCounter->i++;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
56 goto meta(context, GetInputData1);
119
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
57 }
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
58
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
59 __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
60 goto getInputData2(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
61 (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
62 context->data[Node]->node.value,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
63 &context->data[LoopCounter]->loopCounter);
119
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
64 }
4df53a60e59a Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
65
122
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
66 __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
67 int i = loopCounter->i;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
68 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
69 context->next = GetOutputData2;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
70 node->key = task->oKeys[i];
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
71 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
72 t->next = GetQueue1;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
73 goto meta(context, Get);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
74 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
75 context->next = CheckTaskFinish1;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
76 loopCounter->i = 0;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
77 goto meta(context, task->code);
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
78 }
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
79
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
80 __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
81 goto getOutputData1(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
82 (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
83 &context->data[Node]->node,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
84 &context->data[LoopCounter]->loopCounter);
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
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
87 __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
88 int i = loopCounter->i;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
89 task->oargs[i] = data;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
90 loopCounter->i++;
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
91 goto meta(context, GetOutputData1);
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
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
94 __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
95 goto getOutputData2(context,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
96 (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
97 context->data[Node]->node.value,
a086857e1812 implement dependency example. do not work
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 121
diff changeset
98 &context->data[LoopCounter]->loopCounter);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 }
101
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
100
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
101 #ifdef USE_CUDA
98
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
102 __code twiceGpu(struct Context* context) {
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
103 cuMemcpyHtoDAsync(context,context,context,context->stream);
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
104 cuLaunchkanel();
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
105 cuMemcpyDtoHAsync();
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
106 }
101
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
107 #endif