Mercurial > hg > GearsTemplate
annotate src/parallel_execution/CUDAWorker.cbc @ 462:8d7e5d48cad3
Running CPU examples
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 20 Dec 2017 22:05:08 +0900 |
parents | 57c715bd6283 |
children | ac244346c85d |
rev | line source |
---|---|
302 | 1 #include "../context.h" |
462
8d7e5d48cad3
Running CPU examples
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
459
diff
changeset
|
2 #include "Worker.h" |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 |
319
a15511b1a6e0
separate cuda.c, and USE_CUDA_MAIN_THREAD flag
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
317
diff
changeset
|
4 extern void cudaInit(struct CUDAWorker *cudaWorker,int phase) ; |
a15511b1a6e0
separate cuda.c, and USE_CUDA_MAIN_THREAD flag
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
317
diff
changeset
|
5 |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
6 static void startCUDAWorker(Worker* worker); |
233 | 7 |
316
54d203daf06b
CUDAtwice.cbc is called.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
314
diff
changeset
|
8 Worker* createCUDAWorker(struct Context* context, int id, Queue* queue, TaskManagerImpl *im) { |
411
0eba9a04633f
Work CUDAtwice
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
410
diff
changeset
|
9 struct Worker* worker = new Worker(); |
305 | 10 struct CUDAWorker* cudaWorker = new CUDAWorker(); |
11 worker->worker = (union Data*)cudaWorker; | |
244 | 12 worker->tasks = queue; |
305 | 13 cudaWorker->id = id; |
411
0eba9a04633f
Work CUDAtwice
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
410
diff
changeset
|
14 worker->taskReceive = C_taskReceiveCUDAWorker; |
313 | 15 worker->shutdown = C_shutdownCUDAWorker; |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
16 pthread_create(&worker->worker->CUDAWorker.thread, NULL, (void*)&startCUDAWorker, worker); |
313 | 17 return worker; |
18 } | |
19 | |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
20 static void startCUDAWorker(Worker* worker) { |
411
0eba9a04633f
Work CUDAtwice
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
410
diff
changeset
|
21 struct CUDAWorker* cudaWorker = &worker->worker->CUDAWorker; |
451
dcc42f3e7e97
Auto choice blockDim
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
440
diff
changeset
|
22 int deviceNum = 0; |
dcc42f3e7e97
Auto choice blockDim
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
440
diff
changeset
|
23 cudaInit(cudaWorker, deviceNum); |
436
08a93fc2f0d3
Fix CudaExecutor but not work
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
414
diff
changeset
|
24 cudaWorker->context = NEW(struct Context); |
305 | 25 initContext(cudaWorker->context); |
451
dcc42f3e7e97
Auto choice blockDim
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
440
diff
changeset
|
26 cudaWorker->executor = createCUDAExecutor(cudaWorker->context, cudaWorker->device); |
305 | 27 Gearef(cudaWorker->context, Worker)->worker = (union Data*)worker; |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
28 goto meta(cudaWorker->context, worker->taskReceive); |
233 | 29 } |
30 | |
305 | 31 __code taskReceiveCUDAWorker(struct Worker* worker,struct Queue* queue) { |
247
ce262b2c1daf
Fix createTask for main
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
244
diff
changeset
|
32 queue->queue = (union Data*)worker->tasks; |
305 | 33 queue->next = C_getTaskCUDA; |
248
1ede5390cda2
Fix segmentation fault but not multi thread running
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
247
diff
changeset
|
34 goto meta(context, worker->tasks->take); |
227 | 35 } |
36 | |
302 | 37 __code taskReceiveCUDAWorker_stub(struct Context* context) { |
38 goto taskReceiveCUDAWorker(context, &Gearef(context, Worker)->worker->Worker, Gearef(context, Queue)); | |
222
77faa28128b4
Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
39 } |
77faa28128b4
Add taskSend for TaskManager
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
217
diff
changeset
|
40 |
305 | 41 __code getTaskCUDA(struct Worker* worker, struct Context* task) { |
240 | 42 if (!task) |
411
0eba9a04633f
Work CUDAtwice
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
410
diff
changeset
|
43 goto meta(context, worker->shutdown); // end thread |
230 | 44 task->worker = worker; |
305 | 45 enum Code taskCg = task->next; |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
46 if (task->iterate) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
47 task->next = C_iterateCommitCUDA; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
48 } else { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
49 task->next = C_odgCommitCUDA; // set CG after task exec |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
50 } |
305 | 51 goto meta(task, taskCg); |
169
ea7b11f3e717
Using Queue Interface
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
149
diff
changeset
|
52 } |
109
059b26a250cc
Change put_queue process
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
103
diff
changeset
|
53 |
305 | 54 __code getTaskCUDA_stub(struct Context* context) { |
247
ce262b2c1daf
Fix createTask for main
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
244
diff
changeset
|
55 Worker* worker = &Gearef(context,Worker)->worker->Worker; |
260
6b5444bbea8a
generated stub no comiple errors
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
257
diff
changeset
|
56 struct Context* task = &Gearef(context, Queue)->data->Context; |
305 | 57 goto getTaskCUDA(context, worker, task); |
58 } | |
59 | |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
60 __code iterateCommitCUDA(struct Iterator* iterator) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
61 iterator->iterator = (union Data*)context->iterator; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
62 iterator->task = context; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
63 iterator->next = C_odgCommitCUDA; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
64 iterator->whenWait = C_iterateCommitCUDA1; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
65 goto meta(context, context->iterator->barrier); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
66 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
67 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
68 __code iterateCommitCUDA1(struct Context* task) { |
414
49159fbdd1fb
Work CUDAbitonicSort
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
411
diff
changeset
|
69 goto meta(context, C_taskReceiveCUDAWorker); |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
70 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
71 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
72 __code iterateCommitCUDA1_stub(struct Context* context) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
73 struct Context* workerContext = context->worker->worker->CUDAWorker.context; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
74 goto iterateCommitCUDA1(workerContext, context); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
75 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
76 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
77 __code odgCommitCUDA(struct LoopCounter* loopCounter, struct Context* task, struct TaskManager* taskManager) { |
305 | 78 int i = loopCounter->i ; |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
79 if (task->odg+i < task->maxOdg) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
80 goto meta(task, C_odgCommitCUDA1); |
305 | 81 } |
82 loopCounter->i = 0; | |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
83 taskManager->taskManager = (union Data*)task->taskManager; |
414
49159fbdd1fb
Work CUDAbitonicSort
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
411
diff
changeset
|
84 taskManager->next = C_taskReceiveCUDAWorker; |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
85 goto meta(context, task->taskManager->decrementTaskCount); |
95
3e28ee215c0e
modify twice, use OSAtomiceCompareAndSwap
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 } |
101 | 87 |
305 | 88 __code odgCommitCUDA_stub(struct Context* context) { |
89 struct Context* workerContext = context->worker->worker->CUDAWorker.context; | |
90 goto odgCommitCUDA(workerContext, | |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
91 Gearef(context, LoopCounter), |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
92 context, |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
93 Gearef(workerContext, TaskManager)); |
98 | 94 } |
305 | 95 |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
96 __code odgCommitCUDA1(struct LoopCounter* loopCounter, struct Queue* queue) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
97 int i = loopCounter->i ; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
98 queue->queue = (union Data*)GET_WAIT_LIST(context->data[context->odg+i]); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
99 queue->whenEmpty = C_odgCommitCUDA4; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
100 queue->next = C_odgCommitCUDA2; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
101 goto meta(context, queue->queue->Queue.isEmpty); |
305 | 102 } |
227 | 103 |
305 | 104 __code odgCommitCUDA1_stub(struct Context* context) { |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
105 goto odgCommitCUDA1(context, |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
106 Gearef(context, LoopCounter), |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
107 Gearef(context, Queue)); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
108 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
109 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
110 __code odgCommitCUDA2(struct Queue* queue) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
111 queue->next = C_odgCommitCUDA3; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
112 goto meta(context, queue->queue->Queue.take); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
113 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
114 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
115 __code odgCommitCUDA2_stub(struct Context* context) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
116 goto odgCommitCUDA2(context, |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
117 Gearef(context, Queue)); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
118 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
119 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
120 __code odgCommitCUDA3(struct TaskManager* taskManager, struct Context* task) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
121 if (__sync_fetch_and_sub(&task->idgCount, 1) == 1) { // atomic decrement idg counter(__sync_fetch_and_sub function return initial value of task->idgCount point) |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
122 taskManager->taskManager = (union Data*)task->taskManager; |
459
57c715bd6283
Change taskManager parameter from context to task
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
451
diff
changeset
|
123 taskManager->task = task; |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
124 taskManager->next = C_odgCommitCUDA1; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
125 goto meta(context, task->taskManager->spawn); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
126 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
127 goto meta(context, C_odgCommitCUDA1); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
128 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
129 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
130 __code odgCommitCUDA3_stub(struct Context* context) { |
305 | 131 struct Context* task = &Gearef(context, Queue)->data->Context; |
410
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
132 goto odgCommitCUDA3(context, |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
133 Gearef(context, TaskManager), |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
134 task); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
135 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
136 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
137 __code odgCommitCUDA4(struct LoopCounter* loopCounter) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
138 loopCounter->i++; |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
139 goto meta(context, C_odgCommitCUDA); |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
140 } |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
141 |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
142 __code odgCommitCUDA4_stub(struct Context* context) { |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
143 goto odgCommitCUDA4(context, |
85b0ddbf458e
Fix CudaWorker
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
320
diff
changeset
|
144 Gearef(context, LoopCounter)); |
305 | 145 } |
146 | |
411
0eba9a04633f
Work CUDAtwice
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
410
diff
changeset
|
147 extern void cudaShutdown( CUDAWorker *cudaWorker); |
305 | 148 |
149 __code shutdownCUDAWorker(struct Context* context, CUDAWorker* worker) { | |
411
0eba9a04633f
Work CUDAtwice
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
410
diff
changeset
|
150 cudaShutdown(worker); |
440
55db2a339958
Add worker shutdown
Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
parents:
436
diff
changeset
|
151 goto meta(context, C_exit_code); |
230 | 152 } |
227 | 153 |
303 | 154 __code shutdownCUDAWorker_stub(struct Context* context) { |
305 | 155 CUDAWorker* worker = (CUDAWorker *)GearImpl(context, Worker, worker); |
303 | 156 goto shutdownCUDAWorker(context,worker); |
227 | 157 } |