Mercurial > hg > Members > kono > Cerium
diff example/many_task/sort.cc @ 674:bde5f13adf10
fix many task example (sort).
Dummy task is now system supported.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Dec 2009 00:54:10 +0900 |
parents | c13bbb7d70b3 |
children | f4d7cf77ec3d |
line wrap: on
line diff
--- a/example/many_task/sort.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/example/many_task/sort.cc Sun Dec 06 00:54:10 2009 +0900 @@ -12,10 +12,9 @@ static int last_block_num; static int half_block_num; static int last_half_block_num; -static TaskManger *manager; static void sort_restart(SchedTask *, void *, void *); -static void sort_start(); +static void sort_start(SchedTask *); /** * 一つの block にある data の数が MAX_BLOCK_SIZE 超えないような @@ -48,22 +47,22 @@ sort_restart(SchedTask *s, void *d, void *e) { static int cnt = 0; +// static int ccc = 0; long max = (long)d; if (++cnt == max) { cnt = 0; - sort_start(); +// printf("restarted %d\n",ccc++); + sort_start(s); } } static void -sort_start() +sort_start(SchedTask *manager) { if (--sort_count < 0) { return; } -#ifdef SIMPLE_TASK -#endif HTaskPtr fsort[split_num]; @@ -114,7 +113,7 @@ for (int i = 0; i < half_num; i++) { bsort[i]->wait_for(fsort[i]); bsort[i]->wait_for(fsort[i+1]); - bsort[i]->set_post(sort_restart, (void*)(half_num),0); + bsort[i]->set_post(sort_restart, (void*)(half_num),(void*)manager); bsort[i]->spawn(); } } @@ -125,10 +124,10 @@ } void -sort_init(TaskManager *_manager, int cpuNum , int length ) +sort_init(SchedTask *manager, void *a, void *b) { - - manager = _manager; + int cpuNum = (int)a; + int length = (int)b; data = (DataPtr)manager->allocate(sizeof(Data)*length); data_length = length; @@ -148,7 +147,7 @@ last_block_num = length - (split_num-1)*block_num; last_half_block_num = half_block_num+(last_block_num/2); - sort_start(); + sort_start(manager); } /* end */