annotate src/parallel_execution/TaskManager.c @ 182:57a11c15ff4c

Add queue_test
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 14 Dec 2016 21:33:11 +0900
parents 5077cf9bf54e
children 21840c7fb309
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
178
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
1 #include "context.h"
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
2 #include "stack.h"
182
57a11c15ff4c Add queue_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
3 #include "queue.h"
178
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
4 #include "origin_cs.h"
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
5 #include <stdio.h>
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
6
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
7 union Data* createTaskManager(struct Context* context) {
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
8 struct TaskManager* taskManager = &ALLOCATE(context, TaskManager)->taskManager;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
9 struct TaskManager* taskManagerImpl = &ALLOCATE(context, TaskManagerImpl)->taskManagerImpl;
182
57a11c15ff4c Add queue_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
10 taskManagerImpl -> activeQueue = createSynchronizedQueue(context);
57a11c15ff4c Add queue_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
11 taskManagerImpl -> waitQueue = createSynchronizedQueue(context);
57a11c15ff4c Add queue_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
12 taskManager->taskManager = (union Data*)taskManagerImpl;
178
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
13 taskManager->spawn = C_spawnTaskManager;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
14 taskManager->shutdown = C_shutdownTaskManager;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
15 return (union Data*)(taskManager);
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
16 }
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
17
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
18 __code spawnTaskManager(struct Context* context, struct Task* task, struct Element* element, struct Queue* queue, struct Queue* activeQueue, struct Queue* waitQueue) {
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
19 if (task->idsCount == 0) {
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
20 // enqueue activeQueue
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
21 queue->queue = (union Data*)activeQueue;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
22 } else {
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
23 // enqueue waitQueue
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
24 queue->queue = (union Data*)waitQueue;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
25 }
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
26 queue->data = element->data;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
27 queue->next = context->next;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
28 goto meta(context, queue->queue->put);
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
29 }
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
30
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
31 __code spawnTaskManager_stub(struct Context* context) {
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
32 goto spawnTask(context,
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
33 context->data[D_Element]->element.data,
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
34 &context->data[D_Element]->element,
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
35 &context->data[D_ActiveQueue]->Queue,
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
36 &context->data[D_WaitQueue]->Queue);
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
37 }
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
38
182
57a11c15ff4c Add queue_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
39 __code shutdownTaskManager(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) {
178
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
40 int i = loopCounter->i;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
41
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
42 if (i < worker->num) {
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
43 pthread_join(worker->contexts[i].thread, NULL);
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
44 loopCounter->i++;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
45
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
46 goto meta(context, TaskManager);
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
47 }
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
48
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
49 loopCounter->i = 0;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
50
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
51 Time *t = &context->data[D_Time]->Time;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
52 t->next = C_code2;
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
53 goto meta(context, EndTime);
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
54 }
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
55
182
57a11c15ff4c Add queue_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
56 __code shutdownTaskManager_stub(struct Context* context) {
57a11c15ff4c Add queue_test
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 178
diff changeset
57 goto shutdownTaskManager(context, &context->data[D_LoopCounter]->loopCounter, &context->data[D_Worker]->worker);
178
5077cf9bf54e add TaskManager.c
mir3636
parents:
diff changeset
58 }