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);