changeset 741:a969d3cdd20a

Task Arrayed Word Count (not yet worked) please fix vprintf
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 12 Jan 2010 10:18:48 +0900
parents d50fc4ca79e4
children 4c2e6493b008
files TaskManager/Makefile.def example/word_count/main.cc
diffstat 2 files changed, 31 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/Makefile.def	Fri Jan 01 21:24:27 2010 +0900
+++ b/TaskManager/Makefile.def	Tue Jan 12 10:18:48 2010 +0900
@@ -30,7 +30,7 @@
 ABIBIT = 32
 
 
-# OPT = -O9 
+OPT = -O9 
 OPT =  -g
 
 CC     = g++   
--- a/example/word_count/main.cc	Fri Jan 01 21:24:27 2010 +0900
+++ b/example/word_count/main.cc	Tue Jan 12 10:18:48 2010 +0900
@@ -120,33 +120,42 @@
     /*渡すデータの最後が文字かどうか。(スペース、改行以外)*/
     int word_flag = 0;
     int i;
-    for (i = 0; i < task_num; i++) {
+    int task_size = 32;
+    for (i = 0; i < task_num; i+=task_size) {
+	HTask *task_main = manager->create_task_array(TASK_EXEC,task_size,2,1,1);
+	int j ;
+	Task *t_exec = task_main->next_task_array(TASK_EXEC, 0);
+	for(j = 0; j < task_size; j++) {
+	    task_main->next_task_array(TASK_EXEC,t_exec);
+	    task_main->set_cpu(SPE_ANY);
+	    t_print->wait_for(task_main);
+
+	    // t_exec = manager->create_task(TASK_EXEC);
+	    t_exec->set_param(0,division_size);
+	    t_exec->set_param(1,word_flag);
+	    t_exec->set_inData(0,file_mmap + i*division_size, division_size);
+	    t_exec->set_outData(0,o_data + i*status_num, division_out_size);
+
+	    word_flag = ((file_mmap[(i+1)*division_size-1] != 0x20) && (file_mmap[(i+1)*division_size-1] != 0x0A)); 
+
+	    size -= division_size;
+       }
+       task_main->spawn_task_array(t_exec->next());
+
+    }
+
+    while (size>0) {
 
 	t_exec = manager->create_task(TASK_EXEC);
-	t_exec->add_inData(file_mmap + i*division_size, division_size);
-	t_exec->add_outData(o_data + i*status_num, division_out_size);
-	t_exec->add_param(division_size);
-	t_exec->add_param(word_flag);
+	t_exec->set_param(0,size);
+	t_exec->set_param(1,word_flag);
+	t_exec->set_inData(0,file_mmap + i*division_size, size);
+	t_exec->set_outData(0,o_data + i*status_num, division_out_size);
 	t_exec->set_cpu(SPE_ANY);
 	t_print->wait_for(t_exec);
 	t_exec->spawn();
-
-	word_flag = ((file_mmap[(i+1)*division_size-1] != 0x20) && (file_mmap[(i+1)*division_size-1] != 0x0A)); 
-
+	i++;
 	size -= division_size;
-
-    }
-
-    if (size) {
-
-	t_exec = manager->create_task(TASK_EXEC);
-	t_exec->add_inData(file_mmap + i*division_size, size);
-	t_exec->add_outData(o_data + i*status_num, division_out_size);
-	t_exec->add_param(size);
-	t_exec->add_param(word_flag);
-	t_exec->set_cpu(SPE_ANY);
-	t_print->wait_for(t_exec);
-	t_exec->spawn();
     }