changeset 682:80b23718df18

test code for TaskArray
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 06 Dec 2009 18:13:46 +0900
parents b976bed4e46a
children 9a6cb2439593
files TaskManager/kernel/ppe/HTask.cc TaskManager/kernel/ppe/HTask.h TaskManager/kernel/ppe/Task.cc TaskManager/kernel/ppe/Task.h TaskManager/kernel/sys_task/TaskArray.cc example/Bulk/main.cc
diffstat 6 files changed, 63 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/HTask.cc	Sun Dec 06 16:41:10 2009 +0900
+++ b/TaskManager/kernel/ppe/HTask.cc	Sun Dec 06 18:13:46 2009 +0900
@@ -49,4 +49,16 @@
     this->post_arg2 = arg2;
 }
 
+#ifdef SIMPLE_TASK
+
+Task *
+HTask::create_task(int task_id, int pos)
+{
+    Task *task = (Task*)((memaddr)rbuf + pos);
+    task->set_task_id(task_id);
+    return task;
+}
+
+#endif
+
 /* end */
--- a/TaskManager/kernel/ppe/HTask.h	Sun Dec 06 16:41:10 2009 +0900
+++ b/TaskManager/kernel/ppe/HTask.h	Sun Dec 06 18:13:46 2009 +0900
@@ -46,7 +46,7 @@
     void set_cpu(CPU_TYPE type);    
     void set_post(PostFunction func, void *read, void *write);
 #ifdef SIPMLE_TASK
-    Task *create_task_array(int size);
+    Task *create_task(int task_id, int pos);
 #endif
 };
 
--- a/TaskManager/kernel/ppe/Task.cc	Sun Dec 06 16:41:10 2009 +0900
+++ b/TaskManager/kernel/ppe/Task.cc	Sun Dec 06 18:13:46 2009 +0900
@@ -107,6 +107,18 @@
     elm->size = size;
 }
 
+void
+Task::print(SchedTask *s)
+{
+    s->printf("task id %d param size %d "
+       "inData size %d "
+       "outData size %d\n", task_id, param_size, inData_size, outData_size;
+    );
+    for(int i=0; i< param_size; i++) {
+	s->printf("param %d = 0x%ld\n", param(i));
+    }
+
+}
 
 #endif
 
--- a/TaskManager/kernel/ppe/Task.h	Sun Dec 06 16:41:10 2009 +0900
+++ b/TaskManager/kernel/ppe/Task.h	Sun Dec 06 18:13:46 2009 +0900
@@ -37,7 +37,7 @@
 class Task {
 public: // variables
 
-    int size;
+    int task_id;
     int param_size;
     int inData_size;
     int outData_size;
@@ -49,6 +49,9 @@
 public: // functions
     // int add_inData_t(memaddr addr, int size);  
     // int add_outData_t(memaddr addr, int size); 
+
+    void print(SchedTask *s);
+
     memaddr param(int index) {
 	memaddr p = (memaddr)data->data;
 	return p + sizeof(memaddr)*index;
@@ -68,6 +71,7 @@
     void set_outData_length(int length) { outData_size = length; }
     void set_inData_t( int index, memaddr addr, int size); 
     void set_outData_t(int index, memaddr addr, int size); 
+    void set_task_id(int id) { task_id = id; }
     int set_param_t(int index, memaddr param) {
 	memaddr *p = (memaddr*)param(index);
 	*p = param;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/sys_task/TaskArray.cc	Sun Dec 06 18:13:46 2009 +0900
@@ -0,0 +1,29 @@
+#include "Finish.h"
+#include "SysFunc.h"
+#include "Scheduler.h"
+#include "Task.h"
+
+
+SchedDefineTask(TaskArray);
+
+static Task *
+next(Task *t) 
+{
+    char *p = (char*)t;
+    p += t->size();
+    return (Task*)p;
+}
+
+static int
+run(SchedTask *s,void *rbuf, void *wbuf)
+{
+    Task *task = (Task *)rbuf;
+    Task *last = ((char*)rbuf)+ s->read_size();
+   
+    while( task <  last) {
+	task->print(s);
+	task = next(task);
+    }
+
+    return 0;
+}
--- a/example/Bulk/main.cc	Sun Dec 06 16:41:10 2009 +0900
+++ b/example/Bulk/main.cc	Sun Dec 06 18:13:46 2009 +0900
@@ -70,7 +70,10 @@
      */ 
     int size = count*(SizeOfParam(2) + SizeOfData(sizeof(int)*length) +
 			SizeOfData(sizeof(int)*length));
-    HTask *twice_main = manager->create_task_array(size);
+
+    memaddr task_buf = (memaddr)manager->allocate(size);
+    HTask *twice_main = manager->create_task(TaskArray, task_buf, size, 0, 0);
+
     int pos = 0;
     for(int i = 0;i<count;i++) {
 	Task *t = twice_main->create_task(Twice,pos);