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 */