changeset 681:b976bed4e46a

TaskArray structure
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 06 Dec 2009 16:41:10 +0900
parents af0942d42de0
children 80b23718df18
files TaskManager/kernel/ppe/Task.cc TaskManager/kernel/ppe/Task.h example/Bulk/main.cc
diffstat 3 files changed, 57 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/Task.cc	Sun Dec 06 13:17:42 2009 +0900
+++ b/TaskManager/kernel/ppe/Task.cc	Sun Dec 06 16:41:10 2009 +0900
@@ -83,56 +83,28 @@
 
 #else /* ifdef SIMPLE_TASK */
 
-int 
-Task::add_inData_t(memaddr addr, int size)
-{
-}
-  
-int 
-Task::add_outData_t(memaddr addr, int size)
-{
-}
- 
-int 
-Task::set_inData_length(int length)
+void 
+Task::set_inData_t( int index, memaddr addr, int size)
 {
-}
+    ListElementPtr elm = (ListElementPtr) inData(0);
+#ifdef __CERIUM_CELL__
+    elm->addr = (uint32)(unsigned long)addr;
+#else
+    elm->addr = addr;
+#endif
+    elm->size = size;
+}  
 
-int 
-Task::set_inData_t(int index, memaddr addr, int size)
-{
-}
-  
-int 
-Task::set_outData_length(int length)
-{
-}
-
-int 
+void 
 Task::set_outData_t(int index, memaddr addr, int size)
 {
-}
- 
-int 
-Task::add_data(ListData &list, memaddr addr, int size)
-{
-}
-
-void 
-Task::set_param_length(int i)
-{
-}
-
-int 
-Task::add_param_t(memaddr param)
-{
-    this->param[param_size++] = _param;
-}
-  
-int 
-Task::set_param_t(int index, memaddr param)
-{
-    this->param[index] = _param;
+    ListElementPtr elm = (ListElementPtr) outData(0);
+#ifdef __CERIUM_CELL__
+    elm->addr = (uint32)(unsigned long)addr;
+#else
+    elm->addr = addr;
+#endif
+    elm->size = size;
 }
 
 
--- a/TaskManager/kernel/ppe/Task.h	Sun Dec 06 13:17:42 2009 +0900
+++ b/TaskManager/kernel/ppe/Task.h	Sun Dec 06 16:41:10 2009 +0900
@@ -37,36 +37,52 @@
 class Task {
 public: // variables
 
-    BASE_NEW_DELETE(Task);
-
     int size;
     int param_size;
-    memaddr *param;
     int inData_size;
-    ListEelemnt *inData;
     int outData_size;
-    ListElement *outData;
+    void *data[] __attribute__ ((aligned (DEFAULT_ALIGNMENT))); 
+    // memaddr param[param_size];
+    // ListEelemnt inData[inData_size];
+    // ListElement outData[outData_size];
 
 public: // functions
-    int add_inData_t(memaddr addr, int size);  
-    int add_outData_t(memaddr addr, int size); 
-    int set_inData_length(int length);
-    int set_inData_t(int index, memaddr addr, int size);  
-    int set_outData_length(int length);
-    int set_outData_t(int index, memaddr addr, int size); 
-    int add_data(ListData &list, memaddr addr, int size);
-    void set_param_length(int i);
-    int add_param_t(memaddr param);  // obsolete. do not use.
-    int set_param_t(int index, memaddr param);
-    int size() { return size; }
+    // int add_inData_t(memaddr addr, int size);  
+    // int add_outData_t(memaddr addr, int size); 
+    memaddr param(int index) {
+	memaddr p = (memaddr)data->data;
+	return p + sizeof(memaddr)*index;
+    }
+    memaddr inData(int index) {
+	memaddr p = (memaddr)data
+	     + (sizeof(memaddr)*index);
+	return p + sizeof(ListElement)*index;
+    }
+    memaddr outData(int index) {
+	memaddr p = inData(inData_size);
+	return p + sizeof(ListEelement)* index;
+    }
 
-#define add_param(param) add_param_t((memaddr)(param))
+    void set_param_length(int i) { param_size = i; }
+    void set_inData_length(int length)  { inData_size = length; }
+    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); 
+    int set_param_t(int index, memaddr param) {
+	memaddr *p = (memaddr*)param(index);
+	*p = param;
+    }
+    int size() {
+	return outData(outData_size)-(memaddr)data;
+    }
+
+// #define add_param(param) add_param_t((memaddr)(param))
 #define set_param(index,param) set_param_t(index, (memaddr) (param))
 
-#define add_inData(addr, size)			\
-    add_inData_t((memaddr)(addr), (size));
-#define add_outData(addr, size)			\
-    add_outData_t((memaddr)(addr), (size));
+// #define add_inData(addr, size)			\
+//     add_inData_t((memaddr)(addr), (size));
+// #define add_outData(addr, size)			\
+//     add_outData_t((memaddr)(addr), (size));
 #define set_inData(index, addr, size)			\
     set_inData_t(index, (memaddr)(addr), (size));
 #define set_outData(index, addr, size)			\
--- a/example/Bulk/main.cc	Sun Dec 06 13:17:42 2009 +0900
+++ b/example/Bulk/main.cc	Sun Dec 06 16:41:10 2009 +0900
@@ -73,7 +73,7 @@
     HTask *twice_main = manager->create_task_array(size);
     int pos = 0;
     for(int i = 0;i<count;i++) {
-	Task t = twice_main->create_task(Twice,pos);
+	Task *t = twice_main->create_task(Twice,pos);
 	int length2 = length/2;
         //  以下の順序でデータを追加する必要がある。
         //  length を先に指定すればsetは後からでも良い。
@@ -100,7 +100,7 @@
 	t->set_outData(1,data+length2, sizeof(int)*length2);
 	pos += t->size();
 
-        delete t; // Wao!
+        // delete t; // Wao!
     }
     twice_main->set_cpu(SPE_ANY);
     /*