diff example/word_count/main.cc @ 972:d093d601fc14

fix
author Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Fri, 27 Aug 2010 06:39:16 +0900
parents 33630c6ff445
children 18a548c337cb
line wrap: on
line diff
--- a/example/word_count/main.cc	Thu Aug 26 20:40:08 2010 +0900
+++ b/example/word_count/main.cc	Fri Aug 27 06:39:16 2010 +0900
@@ -90,10 +90,40 @@
     int loop = (task_count + spl - 1) / spl;
 
     for (int i = 0; i < loop; i += 1) {
-      
+
       if (spl > w->task_num) {
-	spe_num = 1;
-	array_task_num = w->task_num;
+	if (w->task_num >= spe_num) {
+	  array_task_num = w->task_num / spe_num;
+	} else {
+
+	  int task_num = w->task_num;
+
+	  for (int j = 0; j < task_num; j++) {
+	    HTask *h_exec = 0;
+	    int i = w->task_spwaned++;
+
+	    if (w->size < size) size = w->size;
+
+	    h_exec = manager->create_task(TASK_EXEC,
+					  (memaddr)(w->file_mmap + i*w->division_size), size,
+					  (memaddr)(w->o_data + i*w->out_size), w->division_out_size);
+	    
+	    if (all) {
+	      w->t_print->wait_for(h_exec);
+	    } else {
+	      t_next->wait_for(h_exec);
+	    }
+	    
+	    h_exec->set_cpu(SPE_ANY);
+	    h_exec->spawn();
+	    
+	    w->size -= size;
+	    w->task_num--;
+	    
+	  }
+
+	  return;
+	}
       }