Mercurial > hg > Members > Moririn
diff src/parallel_execution/CPUWorker.cbc @ 288:f1b0cc555b6e
Add odgCommit
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 06 Feb 2017 04:04:25 +0900 |
parents | a3448b0f0a56 |
children | 3d70e21a3902 |
line wrap: on
line diff
--- a/src/parallel_execution/CPUWorker.cbc Mon Feb 06 00:59:39 2017 +0900 +++ b/src/parallel_execution/CPUWorker.cbc Mon Feb 06 04:04:25 2017 +0900 @@ -38,7 +38,7 @@ if (!task) return; // end thread task->worker = worker; - context->next = C_taskReceiveWorker; // set CG after task exec + task->next = C_odgCommit; // set CG after task exec goto meta(task, task->next); } @@ -48,6 +48,46 @@ goto getTask(context, worker, task); } +__code odgCommit(struct LoopCounter* loopCounter, struct Queue* queue, struct Context* task) { + int i = loopCounter->i ; + if(task->odg + i < task->maxOdg) { + queue->queue = (union Data*)GET_WAIT_LIST(task->data[task->odg+i]); + queue->next = C_odgCommit1; + goto meta(context, queue->queue->Queue.take); + } + loopCounter->i = 0; + goto meta(context, C_taskReceiveWorker); +} + +__code odgCommit_stub(struct Context* context) { + struct Context* workerContext = context->worker->worker->CPUWorker.context; + goto odgCommit(workerContext, + Gearef(workerContext, LoopCounter), + Gearef(workerContext, Queue), + context); +} + +__code odgCommit1(struct TaskManager* taskManager, struct Context* task) { + if(__sync_fetch_and_sub(&task->idgCount, 1)) { + if(task->idgCount == 0) { + taskManager->taskManager = (union Data*)task->taskManager; + taskManager->context = task; + taskManager->next = C_odgCommit; + goto meta(context, task->taskManager->spawn); + } + } else { + goto meta(context, C_odgCommit1); + } +} + +__code odgCommit1_stub(struct Context* context) { + struct Context* task = &Gearef(context, Queue)->data->Context; + goto odgCommit1(context, + Gearef(context, TaskManager), + task); + +} + #ifdef USE_CUDA __code twiceGpu() { cuMemcpyHtoDAsync(context,context,context,context->stream); @@ -62,4 +102,3 @@ __code shutdownWorker(struct CPUWorker* worker) { } -