comparison src/parallel_execution/main.c @ 247:ce262b2c1daf

Fix createTask for main
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 25 Jan 2017 04:14:50 +0900
parents 421ea91dd76c
children 1ede5390cda2
comparison
equal deleted inserted replaced
246:421ea91dd76c 247:ce262b2c1daf
4 4
5 #include "context.h" 5 #include "context.h"
6 #include "origin_cs.h" 6 #include "origin_cs.h"
7 7
8 extern union Data* createRedBlackTree(struct Context* context); 8 extern union Data* createRedBlackTree(struct Context* context);
9 extern union Data* createTaskManager(struct Context* context); 9 extern union Data* createTaskManager(struct Context* context, int numCPU, int numGPU, int numIO);
10 extern void allocator(struct Context* context); 10 extern void allocator(struct Context* context);
11 11
12 int cpu_num = 1; 12 int cpu_num = 1;
13 int length = 102400; 13 int length = 102400;
14 int split = 8; 14 int split = 8;
30 } 30 }
31 31
32 __code initDataGears(struct Context* context, struct LoopCounter* loopCounter, struct TaskManager* taskManager) { 32 __code initDataGears(struct Context* context, struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
33 loopCounter->tree = &createRedBlackTree(context)->Tree; 33 loopCounter->tree = &createRedBlackTree(context)->Tree;
34 loopCounter->i = 0; 34 loopCounter->i = 0;
35 taskManager->taskManager = (union Data*)&createTaskManager(context)->TaskManager; 35 taskManager->taskManager = (union Data*)&createTaskManager(context, cpu_num, 0, 0)->TaskManager;
36 goto meta(context, C_createData1); 36 goto meta(context, C_createData1);
37 } 37 }
38 38
39 __code initDataGears_stub(struct Context* context) { 39 __code initDataGears_stub(struct Context* context) {
40 goto initDataGears(context, Gearef(context, LoopCounter), Gearef(context, TaskManager)); 40 goto initDataGears(context, Gearef(context, LoopCounter), Gearef(context, TaskManager));
118 array, 118 array,
119 Gearef(context, Node), 119 Gearef(context, Node),
120 Gearef(context, Tree)); 120 Gearef(context, Tree));
121 } 121 }
122 122
123 __code createTask1(struct Context* context, struct LoopCounter* loopCounter, struct TaskManager* taskManager, struct Task* task) { 123 __code createTask1(struct Context* context, struct LoopCounter* loopCounter, struct TaskManager* taskManager) {
124 task->code = C_twice; 124 int i = loopCounter->i;
125 task->idsCount = 0; 125
126 126 if ((length/split*i) < length) {
127 // taskManager->task = task; 127 taskManager->next = C_createTask2;
128 taskManager->next = C_createData1; 128 goto meta(context, taskManager->taskManager->TaskManager.createTask);
129 loopCounter->i++; 129 }
130 130
131 goto meta(context, taskManager->taskManager->TaskManager.spawn); 131 loopCounter->i = 0;
132 goto meta(context, C_code1);
132 } 133 }
133 134
134 __code createTask1_stub(struct Context* context) { 135 __code createTask1_stub(struct Context* context) {
135 Task* task = &ALLOCATE(context, Task)->Task;
136 goto createTask1(context, 136 goto createTask1(context,
137 Gearef(context, LoopCounter), 137 Gearef(context, LoopCounter),
138 Gearef(context, TaskManager));
139 }
140
141 __code createTask2(Context* context, LoopCounter* loopCounter, TaskManager* taskManager, Context* task, Array* array) {
142 int i = loopCounter->i;
143
144 if ((length/split*i) < length) {
145 array->index = i;
146 array->prefix = length/split;
147 array->array = array_ptr;
148 task->idgCount = 0;
149 task->next = C_twice;
150 // task->data[task->idg] = (union Data*)array;
151 taskManager->next = C_createTask1;
152 loopCounter->i++;
153
154 goto meta(context, taskManager->taskManager->TaskManager.spawn);
155 }
156
157 loopCounter->i = 0;
158 goto meta(context, C_code1);
159 }
160
161 __code createTask2_stub(struct Context* context) {
162 Array* array = &ALLOCATE(context, Array)->Array;
163 goto createTask2(context,
164 Gearef(context, LoopCounter),
138 Gearef(context, TaskManager), 165 Gearef(context, TaskManager),
139 task); 166 Gearef(context, TaskManager)->context,
167 array);
140 } 168 }
141 169
142 __code taskManager(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) { 170 __code taskManager(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) {
143 loopCounter->i = 0; 171 loopCounter->i = 0;
144 172
173 201
174 struct Context* main_context = NEW(struct Context); 202 struct Context* main_context = NEW(struct Context);
175 initContext(main_context); 203 initContext(main_context);
176 main_context->next = C_initDataGears; 204 main_context->next = C_initDataGears;
177 205
178 struct Context* worker_contexts = NEWN(cpu_num, struct Context);
179
180 for (int i = 0;i<cpu_num;i++)
181 initContext(&worker_contexts[i]);
182
183 goto start_code(main_context); 206 goto start_code(main_context);
184 } 207 }
185 208