Mercurial > hg > Members > kono > Cerium
comparison example/many_task/sort.cc @ 941:0c11c2fd7e63
add no_auto_free flag on HTask
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 31 Jul 2010 17:50:38 +0900 |
parents | 0d404f6c36a8 |
children | a9c7784e5dae |
comparison
equal
deleted
inserted
replaced
940:0d404f6c36a8 | 941:0c11c2fd7e63 |
---|---|
104 } | 104 } |
105 | 105 |
106 if (split_num > 1) { | 106 if (split_num > 1) { |
107 | 107 |
108 for (int i = 0; i < half_num-1; i++) { | 108 for (int i = 0; i < half_num-1; i++) { |
109 if (bsort[i]) manager->free_htask(bsort[i]); | |
109 bsort[i] = manager->create_task(QUICK_SORT, | 110 bsort[i] = manager->create_task(QUICK_SORT, |
110 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num, | 111 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num, |
111 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num); | 112 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num); |
112 bsort[i]->set_cpu(SPE_ANY); | 113 bsort[i]->set_cpu(SPE_ANY); |
113 } | 114 } |
114 | 115 |
115 { | 116 { |
116 int i = half_num-1; | 117 int i = half_num-1; |
117 | 118 |
119 if (bsort[i]) manager->free_htask(bsort[i]); | |
118 bsort[i] = manager->create_task(QUICK_SORT, | 120 bsort[i] = manager->create_task(QUICK_SORT, |
119 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num, | 121 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num, |
120 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num); | 122 (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num); |
121 bsort[i]->set_cpu(SPE_ANY); | 123 bsort[i]->set_cpu(SPE_ANY); |
122 } | 124 } |
123 | 125 |
124 for (int i = 0; i < half_num; i++) { | 126 for (int i = 0; i < half_num; i++) { |
125 bsort[i]->wait_for(fsort[i]); | 127 bsort[i]->wait_for(fsort[i]); |
126 bsort[i]->wait_for(fsort[i+1]); | 128 bsort[i]->wait_for(fsort[i+1]); |
129 bsort[i]->no_auto_free(); | |
127 bsort[i]->spawn(); | 130 bsort[i]->spawn(); |
128 } | 131 } |
129 } | 132 } |
130 | 133 |
131 HTaskPtr restart = manager->create_task(RESTART,0,0,0,0); | 134 HTaskPtr restart = manager->create_task(RESTART,0,0,0,0); |
184 } | 187 } |
185 fsort[i]->set_cpu(SPE_ANY); | 188 fsort[i]->set_cpu(SPE_ANY); |
186 } | 189 } |
187 | 190 |
188 if (split_num > 1) { | 191 if (split_num > 1) { |
189 HTaskPtr bsort[half_num]; | |
190 | 192 |
191 for (int i = 0; i < half_num-1; i++) { | 193 for (int i = 0; i < half_num-1; i++) { |
194 if (bsort[i]) manager->free_htask(bsort[i]); | |
192 bsort[i] = manager->create_task(QUICK_SORT); | 195 bsort[i] = manager->create_task(QUICK_SORT); |
193 bsort[i]->add_inData(&data[i*block_num+half_block_num], | 196 bsort[i]->add_inData(&data[i*block_num+half_block_num], |
194 sizeof(Data)*block_num); | 197 sizeof(Data)*block_num); |
195 bsort[i]->add_outData(&data[i*block_num+half_block_num], | 198 bsort[i]->add_outData(&data[i*block_num+half_block_num], |
196 sizeof(Data)*block_num); | 199 sizeof(Data)*block_num); |
199 } | 202 } |
200 | 203 |
201 { | 204 { |
202 int i = half_num-1; | 205 int i = half_num-1; |
203 | 206 |
207 if (bsort[i]) manager->free_htask(bsort[i]); | |
204 bsort[i] = manager->create_task(QUICK_SORT); | 208 bsort[i] = manager->create_task(QUICK_SORT); |
205 bsort[i]->add_inData(&data[i*block_num+half_block_num], | 209 bsort[i]->add_inData(&data[i*block_num+half_block_num], |
206 sizeof(Data)*last_half_block_num); | 210 sizeof(Data)*last_half_block_num); |
207 bsort[i]->add_outData(&data[i*block_num+half_block_num], | 211 bsort[i]->add_outData(&data[i*block_num+half_block_num], |
208 sizeof(Data)*last_half_block_num); | 212 sizeof(Data)*last_half_block_num); |
211 } | 215 } |
212 | 216 |
213 for (int i = 0; i < half_num; i++) { | 217 for (int i = 0; i < half_num; i++) { |
214 bsort[i]->wait_for(fsort[i]); | 218 bsort[i]->wait_for(fsort[i]); |
215 bsort[i]->wait_for(fsort[i+1]); | 219 bsort[i]->wait_for(fsort[i+1]); |
220 bsort[i]->no_auto_free(); | |
216 bsort[i]->spawn(); | 221 bsort[i]->spawn(); |
217 } | 222 } |
218 } | 223 } |
219 | 224 |
220 HTaskPtr restart = manager->create_task(RESTART,0,0,0,0); | 225 HTaskPtr restart = manager->create_task(RESTART,0,0,0,0); |