Mercurial > hg > GearsTemplate
comparison src/parallel_execution/examples/calc.cbc @ 328:48c2b5bcab79 examples_directory
Fix calc example
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 18 Apr 2017 06:00:45 +0900 |
parents | 534601ed8c50 |
children | a258505bf9fd |
comparison
equal
deleted
inserted
replaced
327:534601ed8c50 | 328:48c2b5bcab79 |
---|---|
4 #include <unistd.h> | 4 #include <unistd.h> |
5 | 5 |
6 #include "../../context.h" | 6 #include "../../context.h" |
7 | 7 |
8 int cpu_num = 1; | 8 int cpu_num = 1; |
9 int length = 102400; | 9 int length = 100; |
10 int split = 8; | |
11 int* array_ptr; | |
12 int gpu_num = 0; | 10 int gpu_num = 0; |
13 int CPU_ANY = -1; | 11 int CPU_ANY = -1; |
14 int CPU_CUDA = -1; | 12 int CPU_CUDA = -1; |
15 | 13 |
16 void print_queue(struct Element* element) { | 14 void print_queue(struct Element* element) { |
73 | 71 |
74 __code code1(struct Time* time) { | 72 __code code1(struct Time* time) { |
75 printf("cpus:\t\t%d\n", cpu_num); | 73 printf("cpus:\t\t%d\n", cpu_num); |
76 printf("gpus:\t\t%d\n", gpu_num); | 74 printf("gpus:\t\t%d\n", gpu_num); |
77 printf("length:\t\t%d\n", length); | 75 printf("length:\t\t%d\n", length); |
78 printf("length/task:\t%d\n", length/split); | |
79 /* puts("queue"); */ | 76 /* puts("queue"); */ |
80 /* print_queue(context->data[ActiveQueue]->queue.first); */ | 77 /* print_queue(context->data[ActiveQueue]->queue.first); */ |
81 /* puts("tree"); */ | 78 /* puts("tree"); */ |
82 /* print_tree(context->data[Tree]->tree.root); */ | 79 /* print_tree(context->data[Tree]->tree.root); */ |
83 /* puts("result"); */ | 80 /* puts("result"); */ |
84 | 81 |
85 time->next = C_code2; | 82 //time->next = C_code2; |
86 goto meta(context, C_code2); | 83 goto meta(context, C_exit_code); |
87 //goto meta(context, C_exit_code); | |
88 //goto meta(context, C_start_time); | 84 //goto meta(context, C_start_time); |
89 } | 85 } |
90 | 86 |
91 __code code1_stub(struct Context* context) { | 87 __code code1_stub(struct Context* context) { |
92 goto code1(context, Gearef(context, Time)); | 88 goto code1(context, Gearef(context, Time)); |
93 } | 89 } |
94 | 90 |
95 __code code2(struct LoopCounter* loopCounter) { | |
96 int i = loopCounter->i; | |
97 | |
98 if (i < length) { | |
99 //printf("%d\n", array_ptr[i]); | |
100 if (array_ptr[i] == (i*2)) { | |
101 loopCounter->i++; | |
102 goto meta(context, C_code2); | |
103 } else | |
104 puts("wrong result"); | |
105 | |
106 } | |
107 | |
108 goto meta(context, C_exit_code); | |
109 } | |
110 | 91 |
111 __code createTask1(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { | 92 __code createTask1(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { |
112 int i = loopCounter->i; | 93 int i = loopCounter->i; |
113 | 94 |
114 if (i < 1) { | 95 if (i < length) { |
115 loopCounter->i++; | 96 loopCounter->i++; |
116 taskManager->next = C_createTask2; | 97 taskManager->next = C_createTask2; |
117 goto meta(context, taskManager->taskManager->TaskManager.createTask); | 98 goto meta(context, taskManager->taskManager->TaskManager.createTask); |
118 } | 99 } |
119 | 100 |
125 | 106 |
126 __code createTask2(LoopCounter* loopCounter, TaskManager* taskManager, struct Context *task, Integer *integer1, Integer *integer2, Integer *integer3) { | 107 __code createTask2(LoopCounter* loopCounter, TaskManager* taskManager, struct Context *task, Integer *integer1, Integer *integer2, Integer *integer3) { |
127 int i = loopCounter->i; | 108 int i = loopCounter->i; |
128 task->idgCount = 1; | 109 task->idgCount = 1; |
129 task->next = C_mult; | 110 task->next = C_mult; |
130 integer2->value = i+1; | 111 integer2->value = i; |
131 task->data[task->idg] = (union Data*)integer1; | 112 task->data[task->idg] = (union Data*)integer1; |
132 task->data[task->idg+1] = (union Data*)integer2; | 113 task->data[task->idg+1] = (union Data*)integer2; |
133 task->maxIdg = task->idg + 2; | 114 task->maxIdg = task->idg + 2; |
134 task->odg = task->maxIdg; | 115 task->odg = task->maxIdg; |
135 task->data[task->odg] = (union Data*)integer3; | 116 task->data[task->odg] = (union Data*)integer3; |
195 for (int i = 1; argv[i]; ++i) { | 176 for (int i = 1; argv[i]; ++i) { |
196 if (strcmp(argv[i], "-cpu") == 0) | 177 if (strcmp(argv[i], "-cpu") == 0) |
197 cpu_num = (int)atoi(argv[i+1]); | 178 cpu_num = (int)atoi(argv[i+1]); |
198 else if (strcmp(argv[i], "-l") == 0) | 179 else if (strcmp(argv[i], "-l") == 0) |
199 length = (int)atoi(argv[i+1]); | 180 length = (int)atoi(argv[i+1]); |
200 else if (strcmp(argv[i], "-s") == 0) | |
201 split = (int)atoi(argv[i+1]); | |
202 else if (strcmp(argv[i], "-cuda") == 0) { | 181 else if (strcmp(argv[i], "-cuda") == 0) { |
203 gpu_num = 1; | 182 gpu_num = 1; |
204 CPU_CUDA = 0; | 183 CPU_CUDA = 0; |
205 } | 184 } |
206 } | 185 } |
207 } | 186 } |
208 | 187 |
209 | 188 |
210 int main(int argc, char** argv) { | 189 int main(int argc, char** argv) { |
211 init(argc, argv); | 190 init(argc, argv); |
212 | |
213 array_ptr = NEWN(length, int); | |
214 | |
215 for(int i=0; i<length; i++) | |
216 array_ptr[i]=i; | |
217 | |
218 struct Context* main_context = NEW(struct Context); | 191 struct Context* main_context = NEW(struct Context); |
219 initContext(main_context); | 192 initContext(main_context); |
220 main_context->next = C_initDataGears; | 193 main_context->next = C_initDataGears; |
221 | 194 |
222 goto start_code(main_context); | 195 goto start_code(main_context); |