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