Mercurial > hg > Members > innparusu > Gears
annotate src/parallel_execution/worker.c @ 121:bb8be1820302
Rename Code Gears
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 26 Jul 2016 13:06:46 +0900 |
parents | 4df53a60e59a |
children | a086857e1812 |
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 |
121 | 6 __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
|
7 if (queue->first == 0) |
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 return; |
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
10 element = queue->first; |
109
059b26a250cc
Change put_queue process
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
11 if (__sync_bool_compare_and_swap(&queue->first, first, first->next)) { |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 queue->count--; |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
13 goto meta(context, context->next) |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 } else { |
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 goto meta(context, GetQueue); |
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 } |
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 } |
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 |
121 | 19 __code getQueue1_stub(struct Context* context) { |
119
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
20 goto getQueue(context, &context->data[Queue]->queue, &context->data[Element]->element); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
21 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
22 |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
23 __code getQueue2(struct Context* context, struct Element* element, struct Node* node) { |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
24 context->next = GetQueue; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
25 stack_push(context->code_stack, &context->next); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
26 |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
27 context->next = ((struct Task *)(element->data))->code; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
28 node->key = ((struct Task *)(element->data))->key; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
29 |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
30 struct Traverse *t = &context->data[Traverse]->traverse; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
31 t->next = GetQueue; |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
32 goto meta(context, Get); |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
33 } |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
34 |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
35 __code getQueue2_stub(struct Context* context) { |
4df53a60e59a
Add dependency function
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
113
diff
changeset
|
36 goto getQueue(context, &context->data[Element]->element, &context->data[Node]->node); |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 } |
101 | 38 |
39 #ifdef USE_CUDA | |
98 | 40 __code twiceGpu(struct Context* context) { |
41 cuMemcpyHtoDAsync(context,context,context,context->stream); | |
42 cuLaunchkanel(); | |
43 cuMemcpyDtoHAsync(); | |
44 } | |
101 | 45 #endif |