annotate src/parallel_execution/worker.c @ 233:06133afb3b5b

create worker start_code
author mir3636
date Sun, 22 Jan 2017 20:02:21 +0900
parents 123b0d277b84
children 05e61405cc88
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
233
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
6 static void start_code(Worker* worker);
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
7
232
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
8 union Data* createCPUWorker(struct Context* context, int id, Queue* queue, enum Code next) {
233
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
9 struct Worker* worker = ALLOC(context, Worker);
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
10 struct CPUWorker* cpuWorker = ALLOC(context, CPUWorker);
232
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
11 worker->worker = (union Data*)cpuWorker;
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
12 cpuWorker->tasks = queue;
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
13 cpuWorker->id = id;
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
14 cpuWorker->runFlag = 1;
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
15 cpuWorker->next = next;
222
77faa28128b4 Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 217
diff changeset
16 worker->taskReceive = C_taskReceiveWorker;
77faa28128b4 Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 217
diff changeset
17 worker->shutdown = C_shutdownWorker;
233
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
18 pthread_create(&worker->thread, NULL, (void*)&start_code, worker);
183
mir3636
parents: 175
diff changeset
19 return (union Data*)(worker);
mir3636
parents: 175
diff changeset
20 }
mir3636
parents: 175
diff changeset
21
233
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
22 static void start_code(Worker* worker) {
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
23 CPUWorker* worker = (CPUWorker*)worker->worker;
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
24 worker->context = NEW(struct Context);
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
25 initContext(worker->context);
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
26 goto meta(worker->context, C_taskReceiveWorker);
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
27 }
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
28
232
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
29 __code taskReceiveWorker(struct Context* context, CPUWorker* worker) {
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
30 if (! worker->runFlag)
233
06133afb3b5b create worker start_code
mir3636
parents: 232
diff changeset
31 return; // end thread
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
32 Queue* queue = worker->tasks;
227
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
33 queue->next = C_getTask1;
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
34 goto meta(context, queue->take);
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
35 }
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
36
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
37 __code taskReceiveWorker_stub(struct Context* context) {
232
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
38 CPUWorker* worker = (CPUWorker *)GearImpl(context, Worker, worker);
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
39 goto taskReceiveWorker(context,worker);
222
77faa28128b4 Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 217
diff changeset
40 }
77faa28128b4 Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 217
diff changeset
41
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
42 __code getTask1(struct Context* context, Worker* worker, struct Context* task) {
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
43 task->worker = worker;
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
44 goto meta(task, task->next);
169
ea7b11f3e717 Using Queue Interface
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
45 }
109
059b26a250cc Change put_queue process
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
46
169
ea7b11f3e717 Using Queue Interface
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 149
diff changeset
47 __code getTask1_stub(struct Context* context) {
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
48 Worker* worker = Gearef(context,Worker);
232
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
49 CPUWorker* cpuWorker = (CPUWorker *)GearImpl(context, Worker, worker);
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
50 Context* task = &cpuWorker->tasks->data->context;
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
51 goto getTask1(context,worker,task);
95
3e28ee215c0e modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
101
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
53
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
54 #ifdef USE_CUDA
98
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
55 __code twiceGpu(struct Context* context) {
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
56 cuMemcpyHtoDAsync(context,context,context,context->stream);
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
57 cuLaunchkanel();
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
58 cuMemcpyDtoHAsync();
d400948dbbab add Cuda infomation to context
ikkun
parents: 95
diff changeset
59 }
101
8987cf13d5bb Add Allocate macro
innparusu
parents: 98
diff changeset
60 #endif
227
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
61
232
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
62 __code shutdownWorker(struct Context* context, CPUWorker* worker) {
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
63 worker->runFlag = 0;
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
64 }
227
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
65
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
66 __code shutdownWorker_stub(struct Context* context) {
232
123b0d277b84 worker interface
mir3636
parents: 230
diff changeset
67 CPUWorker* worker = (CPUWorker *)GearImpl(context, Worker, worker);
230
a1fb3f2d1a36 fix worker
ikkun
parents: 227
diff changeset
68 goto shutdownWorker(context,worker);
227
991f3d1ce072 fix worker
ikkun
parents: 222
diff changeset
69 }