# HG changeset patch # User Tatsuki IHA # Date 1500361991 -32400 # Node ID ad44fdb114339b1840f490c6a71cc5c8fcd97bb1 # Parent fb50cf8aa615056de8ef9f1caf49abbea03630fb Fix compile error but not work diff -r fb50cf8aa615 -r ad44fdb11433 src/parallel_execution/CMakeLists.txt --- a/src/parallel_execution/CMakeLists.txt Tue Jul 18 15:14:08 2017 +0900 +++ b/src/parallel_execution/CMakeLists.txt Tue Jul 18 16:13:11 2017 +0900 @@ -66,14 +66,14 @@ TARGET calc SOURCES - examples/calc.cbc examples/add.cbc examples/mult.cbc examples/InitIntegerDataGears.cbc CPUWorker.cbc time.cbc TaskManagerImpl.cbc SingleLinkedQueue.cbc SynchronizedQueue.cbc + examples/calc.cbc examples/add.cbc examples/mult.cbc examples/InitIntegerDataGears.cbc CPUWorker.cbc TaskManagerImpl.cbc SingleLinkedQueue.cbc SynchronizedQueue.cbc ) GearsCommand( TARGET bitonic_sort SOURCES - examples/bitonicSort.cbc examples/swap.cbc examples/InitIntegerDataGears.cbc CPUWorker.cbc time.cbc TaskManagerImpl.cbc SingleLinkedQueue.cbc SynchronizedQueue.cbc OneDimIterator.cbc + examples/bitonicSort.cbc examples/swap.cbc examples/InitIntegerDataGears.cbc CPUWorker.cbc TaskManagerImpl.cbc SingleLinkedQueue.cbc SynchronizedQueue.cbc OneDimIterator.cbc TimeImpl.cbc ) if (${USE_CUDA}) diff -r fb50cf8aa615 -r ad44fdb11433 src/parallel_execution/CPUWorker.cbc --- a/src/parallel_execution/CPUWorker.cbc Tue Jul 18 15:14:08 2017 +0900 +++ b/src/parallel_execution/CPUWorker.cbc Tue Jul 18 16:13:11 2017 +0900 @@ -59,13 +59,13 @@ goto meta(context, context->iterator->barrier); } -__code iterateCommit1() { +__code iterateCommit1(struct Context* task) { goto meta(context, C_taskReceiveWorker); } -__code iterateCommit_stub(struct Context* context) { +__code iterateCommit1_stub(struct Context* context) { struct Context* workerContext = context->worker->worker->CPUWorker.context; - goto iterateCommit(workerContext) + goto iterateCommit1(workerContext, context); } __code odgCommit(struct LoopCounter* loopCounter, struct Context* task) { diff -r fb50cf8aa615 -r ad44fdb11433 src/parallel_execution/Iterator.cbc --- a/src/parallel_execution/Iterator.cbc Tue Jul 18 15:14:08 2017 +0900 +++ b/src/parallel_execution/Iterator.cbc Tue Jul 18 16:13:11 2017 +0900 @@ -1,7 +1,8 @@ typedef struct Iterator{ union Data* iterator; - __code exec(Impl* iterator, __code next(...)); - __code barrier(Impl* iterator, __code next(...)); + struct Context* task; + __code exec(Impl* iterator, struct TaskManager* taskManager, struct Context* task, __code next(...)); + __code barrier(Impl* iterator, struct Context* task, __code next(...), __code whenWait(...)); __code whenWait(...); __code next(...); } Iterator; diff -r fb50cf8aa615 -r ad44fdb11433 src/parallel_execution/OneDimIterator.cbc --- a/src/parallel_execution/OneDimIterator.cbc Tue Jul 18 15:14:08 2017 +0900 +++ b/src/parallel_execution/OneDimIterator.cbc Tue Jul 18 16:13:11 2017 +0900 @@ -1,37 +1,54 @@ #include "../context.h" #include -Iterator createOneDimIterator(struct Context* context, int x) { +Iterator* createOneDimIterator(struct Context* context, int x) { struct Iterator* iterator = new Iterator(); struct OneDimIterator* oneDimIterator = new OneDimIterator(); iterator->iterator = (union Data*)oneDimIterator; iterator->exec = C_execOneDimIterator; - iterator->barrier = C_barrierOneDimItearator; + iterator->barrier = C_barrierOneDimIterator; oneDimIterator->x = x; oneDimIterator->count = x; - iterator->loopCounter = new LoopCounter(); - iterator->loopCounter->i = 0; - oneDimIterator->exec = C_execOneDimIterator; + oneDimIterator->loopCounter = new LoopCounter(); + oneDimIterator->loopCounter->i = 0; + return iterator; } -__code execOneDimIterator(struct OneDimIterator* oneDimIterator, struct TaskManager* taskManager, struct context* task, __code next(...)) { - if (oneDimIterator->loopCounter->i == oneDimIterator->x) { - oneDimIterator->loopCounter->i = 0; +__code execOneDimIterator(struct OneDimIterator* iterator, struct TaskManager* taskManager, struct Context* task, __code next(...)) { + if (iterator->loopCounter->i == iterator->x) { + iterator->loopCounter->i = 0; goto next(...); } - struct context* iterate_task = NEW(struct Context); + struct Context* iterate_task = NEW(struct Context); *iterate_task = *task; task->iterate = 1; - oneDimIterator->loopCounter->i++; + iterator->loopCounter->i++; taskManager->taskManager = (union Data*)task->taskManager; - taskManager->task = iterate_task; + taskManager->context = iterate_task; taskManager->next = C_execOneDimIterator; - goto meta(context, C_execOneDimIterator); + goto meta(context, task->taskManager->spawn); } -__code barrierOneDimIterator(struct OneDimIterator* oneDimIterator, struct context* task, __code next(...), __code whenWait(...)) { - if (__sync_fetch_and_sub(&oneDimIterator->count, 1) == 1) { +__code execOneDimIterator_stub(struct Context* context) { + OneDimIterator* iterator = (OneDimIterator*)GearImpl(context, Iterator, iterator); + TaskManager* taskManager = Gearef(context, TaskManager); + Context* task = Gearef(context, Iterator)->task; + enum Code next = Gearef(context, Iterator)->next; + goto execOneDimIterator(context, iterator, taskManager, task, next); +} + +__code barrierOneDimIterator(struct OneDimIterator* iterator, struct Context* task, __code next(...), __code whenWait(...)) { + if (__sync_fetch_and_sub(&iterator->count, 1) == 1) { goto next(...); } goto whenWait(...); } + +__code barrierOneDimIterator_stub(struct Context* context) { + OneDimIterator* iterator = (OneDimIterator*)GearImpl(context, Iterator, iterator); + Context* task = Gearef(context, Iterator)->task; + enum Code next = Gearef(context, Iterator)->next; + enum Code whenWait = Gearef(context, Iterator)->whenWait; + goto barrierOneDimIterator(context, iterator, task, next, whenWait); +} + diff -r fb50cf8aa615 -r ad44fdb11433 src/parallel_execution/context.h --- a/src/parallel_execution/context.h Tue Jul 18 15:14:08 2017 +0900 +++ b/src/parallel_execution/context.h Tue Jul 18 16:13:11 2017 +0900 @@ -307,7 +307,8 @@ enum Code swap; } SortArray; struct Iterator { - struct Iterator *iterator; + union Data* iterator; + struct Context* task; enum Code exec; enum Code barrier; enum Code whenWait; @@ -316,6 +317,7 @@ struct OneDimIterator { int x; int count; + struct LoopCounter *loopCounter; } OneDimIterator; }; // union Data end this is necessary for context generator diff -r fb50cf8aa615 -r ad44fdb11433 src/parallel_execution/examples/bitonicSort.cbc --- a/src/parallel_execution/examples/bitonicSort.cbc Tue Jul 18 15:14:08 2017 +0900 +++ b/src/parallel_execution/examples/bitonicSort.cbc Tue Jul 18 16:13:11 2017 +0900 @@ -121,7 +121,7 @@ } loopCounter->i = 0; - taskManager->next = C_code2; + taskManager->next = C_exit_code; goto meta(context, taskManager->taskManager->TaskManager.shutdown); } diff -r fb50cf8aa615 -r ad44fdb11433 src/parallel_execution/examples/swap.cbc --- a/src/parallel_execution/examples/swap.cbc Tue Jul 18 15:14:08 2017 +0900 +++ b/src/parallel_execution/examples/swap.cbc Tue Jul 18 16:13:11 2017 +0900 @@ -1,33 +1,38 @@ #include "../../context.h" #include -__code swap(struct SortArray sortArray, struct Integer* block, struct Integer* first, struct Integer* i, __code next(struct SortArray* output, ...)) { - int position = i->value/block->value; - int index = i->value+block->value*position; - - block->value = (first->value == 1)? ((block->value<<1)*(position+1))-(index%block->value)-1 : index+block->value; - - if (sortArray->array[block] < sortArray->array[index]) { - int Integer *tmp = sortArray->array[index]; - sortArray->array[index] = sortArray->array[block]; - sortArray->array[block] = tmp; - } - - *O_output = output; - goto meta(context, next); -} - -__code swap_stub(struct Context* context) { - SortArray** O_output = (struct SortArray **)&context->data[context->odg]; - goto add(context, - &context->data[context->idg]->SortArray, - &context->data[context->idg+1]->Integer, - &context->data[context->idg+2]->Integer, - &context->data[context->idg+3]->Integer, - context->next, - O_output); -} +//__code swap(struct SortArray sortArray, struct Integer* block, struct Integer* first, struct Integer* i, __code next(struct SortArray* output, ...)) { +// int position = i->value/block->value; +// int index = i->value+block->value*position; +// +// block->value = (first->value == 1)? ((block->value<<1)*(position+1))-(index%block->value)-1 : index+block->value; +// +// if (sortArray->array[block] < sortArray->array[index]) { +// int Integer *tmp = sortArray->array[index]; +// sortArray->array[index] = sortArray->array[block]; +// sortArray->array[block] = tmp; +// } +// +// *O_output = output; +// goto meta(context, next); +//} +// +//__code swap_stub(struct Context* context) { +// SortArray** O_output = (struct SortArray **)&context->data[context->odg]; +// goto swap(context, +// &context->data[context->idg]->SortArray, +// &context->data[context->idg+1]->Integer, +// &context->data[context->idg+2]->Integer, +// &context->data[context->idg+3]->Integer, +// context->next, +// O_output); +//} __code printIterator(__code next(...)) { printf("test\n"); goto meta(context, next); } + +__code printIterator_stub(struct Context* context) { + goto printIterator(context, + context->next); +}