Mercurial > hg > GearsTemplate
annotate src/parallel_execution/worker.c @ 230:a1fb3f2d1a36
fix worker
author | ikkun |
---|---|
date | Sat, 21 Jan 2017 20:21:00 +0900 |
parents | 991f3d1ce072 |
children | 123b0d277b84 |
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 |
230 | 6 union Data* createWorker(struct Context* context, int id, Queue* queue) { |
183 | 7 struct Worker* worker = &ALLOCATE(context, Worker)->Worker; |
230 | 8 worker->tasks = queue; |
9 worker->id = id; | |
10 worker->runFlag = 1; | |
222
77faa28128b4
Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
11 worker->taskReceive = C_taskReceiveWorker; |
77faa28128b4
Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
12 worker->shutdown = C_shutdownWorker; |
183 | 13 return (union Data*)(worker); |
14 } | |
15 | |
227 | 16 __code taskReceiveWorker(struct Context* context, Worker* worker) { |
230 | 17 if (! worker->runFlag) |
18 goto meta(context, worker->next); | |
19 Queue* queue = worker->tasks; | |
227 | 20 queue->next = C_getTask1; |
21 goto meta(context, queue->take); | |
22 } | |
23 | |
24 __code taskReceiveWorker_stub(struct Context* context) { | |
230 | 25 Worker* worker = Gearef(context,Worker); |
26 goto taskReceiveWorker(context,worker); | |
222
77faa28128b4
Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
27 } |
77faa28128b4
Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
28 |
230 | 29 __code getTask1(struct Context* context, Worker* worker, struct Context* task) { |
30 task->worker = worker; | |
31 goto meta(task, task->next); | |
169
ea7b11f3e717
Using Queue Interface
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
149
diff
changeset
|
32 } |
109
059b26a250cc
Change put_queue process
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
33 |
169
ea7b11f3e717
Using Queue Interface
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
149
diff
changeset
|
34 __code getTask1_stub(struct Context* context) { |
230 | 35 Worker* worker = Gearef(context,Worker); |
36 Context* task = &worker->tasks->data->context; | |
37 goto getTask1(context,worker,task); | |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 } |
101 | 39 |
40 #ifdef USE_CUDA | |
98 | 41 __code twiceGpu(struct Context* context) { |
42 cuMemcpyHtoDAsync(context,context,context,context->stream); | |
43 cuLaunchkanel(); | |
44 cuMemcpyDtoHAsync(); | |
45 } | |
101 | 46 #endif |
227 | 47 |
230 | 48 __code shutdownWorker(struct Context* context, Worker* worker) { |
49 worker->runFlag = 0; | |
50 } | |
227 | 51 |
230 | 52 __code shutdownWorker_stub(struct Context* context) { |
53 Worker* worker = Gearef(context,Worker); | |
54 goto shutdownWorker(context,worker); | |
227 | 55 } |