Mercurial > hg > Members > Moririn
diff src/parallel_execution/main.c @ 170:ee7134f3bef1
Fix
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Nov 2016 10:36:45 +0900 |
parents | ea7b11f3e717 |
children | 57a11c15ff4c |
line wrap: on
line diff
--- a/src/parallel_execution/main.c Tue Nov 22 09:48:37 2016 +0900 +++ b/src/parallel_execution/main.c Tue Nov 22 10:36:45 2016 +0900 @@ -114,14 +114,6 @@ __code createTask1(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Queue* waitMe, struct Queue* waitI, struct Element* element) { int i = loopCounter->i; - waitMe->first = 0; - waitMe->last = 0; - waitMe->count = 0; - - waitI->first = 0; - waitI->last = 0; - waitI->count = 0; - task->code = Twice; task->key = i; task->waitMe = waitMe; @@ -194,71 +186,12 @@ // &context->data[Element]->element); //} -__code putQueue1(struct Context* context, struct Allocate* allocate) { - allocate->size = sizeof(struct Element); - allocator(context); - - goto meta(context, PutQueue2); -} - -__code putQueue1_stub(struct Context* context) { - goto putQueue1(context, &context->data[D_Allocate]->allocate); -} - -__code putQueue2(struct Context* context, struct Element* new_element, struct Element* element, struct Queue* queue) { - new_element->data = element->data; - - if (queue->first) - goto meta(context, PutQueue3); - else - goto meta(context, PutQueue4); -} - -__code putQueue2_stub(struct Context* context) { - goto putQueue2(context, - &context->data[context->dataNum]->element, - &context->data[D_Element]->element, - &context->data[D_Queue]->Queue); -} - -__code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) { - struct Element* last = queue->last; - - if (__sync_bool_compare_and_swap(&queue->last, last, new_element)) { - last->next = new_element; - queue->count++; - - goto meta(context, context->next); - } else { - goto meta(context, PutQueue3); - } -} - -__code putQueue3_stub(struct Context* context) { - goto putQueue3(context, &context->data[D_Queue]->Queue, &context->data[context->dataNum]->element); -} - -__code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) { - if (__sync_bool_compare_and_swap(&queue->first, 0, new_element)) { - queue->last = new_element; - queue->count++; - - goto meta(context, context->next); - } else { - goto meta(context, PutQueue3); - } -} - -__code putQueue4_stub(struct Context* context) { - goto putQueue4(context, &context->data[D_Queue]->Queue, &context->data[context->dataNum]->element); -} - __code createWorker(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) { int i = loopCounter->i; if (i < worker->num) { struct Context* worker_context = &worker->contexts[i]; - worker_context->next = GetQueue; + worker_context->next = C_getTask1; worker_context->data[D_Tree] = context->data[D_Tree]; worker_context->data[D_ActiveQueue] = context->data[D_ActiveQueue]; pthread_create(&worker_context->thread, NULL, (void*)&start_code, worker_context);