comparison example/word_count/main.cc @ 948:6a8941ee8294

fix word count
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 02 Aug 2010 09:36:02 +0900
parents a8b6ee80c108
children 86aea6affe6c
comparison
equal deleted inserted replaced
947:a468a9784e87 948:6a8941ee8294
77 { 77 {
78 78
79 int array_task_num = 8; 79 int array_task_num = 8;
80 if (task_count < array_task_num) { 80 if (task_count < array_task_num) {
81 array_task_num = task_count; 81 array_task_num = task_count;
82 if (task_count<=0) return;
82 } 83 }
83 84
84 for (int i = 0; i < task_count; i += array_task_num) { 85 for (int i = 0; i < task_count; i += array_task_num) {
85 86
86 HTask *task_array; 87 HTask *task_array;
88 task_array = manager->create_task_array(TASK_EXEC,array_task_num,0,1,1); 89 task_array = manager->create_task_array(TASK_EXEC,array_task_num,0,1,1);
89 if (!all) t_next->wait_for(task_array); 90 if (!all) t_next->wait_for(task_array);
90 } 91 }
91 92
92 Task *t_exec = 0; 93 Task *t_exec = 0;
93 HTask *h_exec; 94 HTask *h_exec = 0;
94 for (int j = 0; j < array_task_num; j++) { 95 for (int j = 0; j < array_task_num; j++) {
95 int i = w->task_spwaned++; 96 int i = w->task_spwaned++;
96 if (use_task_array) { 97 if (use_task_array) {
97 t_exec = task_array->next_task_array(TASK_EXEC,t_exec); 98 t_exec = task_array->next_task_array(TASK_EXEC,t_exec);
98 t_exec->set_inData(0,w->file_mmap + i*w->division_size, size); 99 t_exec->set_inData(0,w->file_mmap + i*w->division_size, size);
111 h_exec->spawn(); 112 h_exec->spawn();
112 } 113 }
113 w->size -= size; 114 w->size -= size;
114 w->task_num--; 115 w->task_num--;
115 } 116 }
116 if (!use_task_array) { 117 if (use_task_array) {
117 task_array->spawn_task_array(t_exec->next()); 118 task_array->spawn_task_array(t_exec->next());
118 task_array->set_cpu(SPE_ANY); 119 task_array->set_cpu(SPE_ANY);
119 task_array->spawn(); 120 task_array->spawn();
120 } else { 121 } else {
121 if (!all) t_next->wait_for(h_exec); 122 if (!all) t_next->wait_for(h_exec);
139 if (w->size >= w->division_size) 140 if (w->size >= w->division_size)
140 run_tasks(manager,w,w->task_num, w->t_print, w->division_size); 141 run_tasks(manager,w,w->task_num, w->t_print, w->division_size);
141 while (w->size>0) 142 while (w->size>0)
142 run_tasks(manager,w,1, w->t_print, w->size); 143 run_tasks(manager,w,1, w->t_print, w->size);
143 // printf("run16 last %d\n",w->task_num); 144 // printf("run16 last %d\n",w->task_num);
144 } else { 145 } else if (w->task_num > 0 ) {
145 HTaskPtr t_next = manager->create_task(RUN_TASK_BLOCKS, 146 HTaskPtr t_next = manager->create_task(RUN_TASK_BLOCKS,
146 (memaddr)&w->self,sizeof(memaddr),0,0); 147 (memaddr)&w->self,sizeof(memaddr),0,0);
147 w->t_print->wait_for(t_next); 148 w->t_print->wait_for(t_next);
148 149
149 run_tasks(manager,w, w->task_blocks, t_next, w->division_size); 150 run_tasks(manager,w, w->task_blocks, t_next, w->division_size);