Mercurial > hg > Members > kono > Cerium
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); |