changeset 787:5df90e02e34f

fix Bulk
author yutaka@localhost.localdomain
date Sat, 24 Apr 2010 17:25:46 +0900
parents ccf78a465459
children 821ab210cafa
files TaskManager/kernel/ppe/HTask.h TaskManager/kernel/ppe/Task.h example/Bulk/main.cc example/Bulk/ppe/Twice.cc example/Bulk/spe/Twice.cc example/hello_array/main.cc
diffstat 6 files changed, 45 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/HTask.h	Sat Apr 24 15:24:33 2010 +0900
+++ b/TaskManager/kernel/ppe/HTask.h	Sat Apr 24 17:25:46 2010 +0900
@@ -5,6 +5,7 @@
 #include "types.h"
 #include "Task.h"
 #include "TaskQueueInfo.h"
+#include <stdio.h>
 
 class TaskManagerImpl;
 class SchedTask;
@@ -66,10 +67,18 @@
 	t->set_outData_t(out_index++, addr,size);
     }
     void set_inData_t(int index, memaddr addr, int size) {
+      if ((unsigned long)addr&0xf) {
+	  printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", 
+		 command, index, (unsigned long)addr, size);
+	}
 	Task *t = (Task*)rbuf;
 	t->set_inData_t(index, addr,size);
     }
     void set_outData_t(int index, memaddr addr, int size) { 
+      if ((unsigned long)addr&0xf) {
+	  printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", 
+		 command, index, (unsigned long)addr, size);
+	}
 	Task *t = (Task*)rbuf;
 	t->set_inData_t(index, addr,size);
     }
--- a/TaskManager/kernel/ppe/Task.h	Sat Apr 24 15:24:33 2010 +0900
+++ b/TaskManager/kernel/ppe/Task.h	Sat Apr 24 17:25:46 2010 +0900
@@ -6,7 +6,6 @@
 #include "ListData.h"
 #include "SimpleTask.h"
 
-
 class SchedTask;
 class Scheduler;
 
--- a/example/Bulk/main.cc	Sat Apr 24 15:24:33 2010 +0900
+++ b/example/Bulk/main.cc	Sat Apr 24 17:25:46 2010 +0900
@@ -10,12 +10,14 @@
 
 static int length = DATA_NUM;
 static int task = 3;
-static int count = 3;
-static int data_count = 3;
+static int task_array_num = 3;
+static int block_num = 3;
 
-const char *usr_help_str = "Usage: ./twice [-length data_length] [-count task_num]\n\
-  -length  Number of data (default DATA_NUM (Func.h))\n\
-  -count   Number of task (default 1)\n";
+const char *usr_help_str = "Usage: ./twice [-length data_length] [-task_array_num task_num]\n\
+  -task_array_num Number of data in a block (default 16)\n\
+  -block_num      Number of block\n\
+  -task           Number of task\n\
+  -block_size     Size of a block\n";
 
 
 static void
@@ -36,7 +38,7 @@
 {
     int* data = (int*)a;
     int* task_buf = (int*)b;
-    print_data(data, length*count, "after");
+    print_data(data, length*task_array_num, "after");
     free(data);
     free(task_buf);
 }
@@ -44,17 +46,19 @@
 static int
 init(int argc, char **argv)
 {
+    int block_size = 16;
     for (int i = 1; argv[i]; ++i) {
-        if (strcmp(argv[i], "-length") == 0) {
-            length = atoi(argv[++i]);
-        } else if (strcmp(argv[i], "-task") == 0) {
+        if (strcmp(argv[i], "-task") == 0) {
             task = atoi(argv[++i]);
-        } else if (strcmp(argv[i], "-count") == 0) {
-            count = atoi(argv[++i]);
-        } else if (strcmp(argv[i], "-data_count") == 0) {
-            data_count = atoi(argv[++i]);
+        } else if (strcmp(argv[i], "-task_array_num") == 0) {
+            task_array_num = atoi(argv[++i]);
+        } else if (strcmp(argv[i], "-block_num") == 0) {
+            block_num = atoi(argv[++i]);
+        } else if (strcmp(argv[i], "-block_size") == 0) {
+            block_size = atoi(argv[++i]);
         }
     }
+    length = task_array_num * block_num * block_size;
 
     return 0;
 }
@@ -73,54 +77,54 @@
 {
 
 
-    for (int i = 0; i < length*count; i++) {
+    for (int i = 0; i < length*task_array_num; i++) {
 	data[i] = i;
     }
 
-    print_data(data, length*count, "before");
+    print_data(data, length*task_array_num, "before");
 
     /**
      * Create Task
      *   create_task(Task ID);
      */ 
 
-    HTask *twice_main = manager->create_task_array(Twice,count,data_count+1,data_count,data_count);
+    HTask *twice_main = manager->create_task_array(Twice,task_array_num,block_num+1,block_num,block_num);
     Task *t = twice_main->next_task_array(Twice, 0);
 #if 0
     printf("allocate task size 0x%0x\n",t->size());
     printf("allocate task total size 0x%0x = 0x%0x * %d\n",twice_main->r_size,
-		t->size(), count);
+		t->size(), task_array_num);
 #endif
     void *task_buf = twice_main->rbuf;
     twice_main->set_post(twice_result, (void*)data, task_buf);
 
     t = 0;
-    for(int i = 0;i<count;i++) {
+    for(int i = 0;i<task_array_num;i++) {
 	t = twice_main->next_task_array(Twice, t);
-	int length2 = length/data_count;
-	t->set_param(0, (memaddr)data_count);
+	int block_size = length/block_num;
+	t->set_param(0, (memaddr)block_num);
 
-	for(int j = 0;j<data_count;j++) {
+	for(int j = 0;j<block_num;j++) {
 	    /**
 	     * Set 32bits parameter
 	     *   add_param(32bit parameter);
 	     */
-	    t->set_param(j+1, (memaddr)length2);
+	    t->set_param(j+1, (memaddr)block_size);
 	    /**
 	     * Set of Input Data
 	     *   add_inData(address of input data, size of input data);
 	     */
-	    t->set_inData(j,data, sizeof(int)*length2);
+	    t->set_inData(j,data, sizeof(int)*block_size);
 	    /**
 	     * Set of Output area
 	     *   add_outData(address of output area, size of output area);
 	     */
-	    t->set_outData(j,data, sizeof(int)*length2);
-	    data += length2;
+	    t->set_outData(j,data, sizeof(int)*block_size);
+	    data += block_size;
 	}
 #if 0
-	print_ListData(data_count,t->inData(0));
-	print_ListData(data_count,t->outData(0));
+	print_ListData(block_num,t->inData(0));
+	print_ListData(block_num,t->outData(0));
 	printf("pos 0x%0lx size 0x%0x\n",(unsigned long)t, t->size());
 #endif
     }
@@ -146,7 +150,7 @@
     task_init();
 
     for (int i = 0; i < task; ++i) {
-	int *data = (int*)manager->allocate(sizeof(int)*length*count);
+	int *data = (int*)manager->allocate(sizeof(int)*length*task_array_num);
 	twice_init(manager, data, length);
     }
 
--- a/example/Bulk/ppe/Twice.cc	Sat Apr 24 15:24:33 2010 +0900
+++ b/example/Bulk/ppe/Twice.cc	Sat Apr 24 17:25:46 2010 +0900
@@ -4,10 +4,10 @@
 #include "Func.h"
 
 /* これは必須 */
-SchedDefineTask(Twice);
+SchedDefineTask1(Twice,twice_run);
 
 static int
-run(SchedTask *s,void *rbuf, void *wbuf)
+twice_run(SchedTask *s,void *rbuf, void *wbuf)
 {
     // SchedTaskArray *a = (SchedTaskArray *)s;
 
--- a/example/Bulk/spe/Twice.cc	Sat Apr 24 15:24:33 2010 +0900
+++ b/example/Bulk/spe/Twice.cc	Sat Apr 24 17:25:46 2010 +0900
@@ -14,9 +14,9 @@
     int *i_data;
     int *o_data;
     long length;
-    int count = (int)s->get_param(0);
+    int data_count = (int)s->get_param(0);
 
-    for(int j = 0; j<count; j++) {
+    for(int j = 0; j<data_count; j++) {
 	i_data = (int*)s->get_input(rbuf, j);
 	o_data = (int*)s->get_output(wbuf, j);
 	length = (long)s->get_param(j+1);
--- a/example/hello_array/main.cc	Sat Apr 24 15:24:33 2010 +0900
+++ b/example/hello_array/main.cc	Sat Apr 24 17:25:46 2010 +0900
@@ -32,8 +32,6 @@
 void
 hello_init(TaskManager *manager)
 {
-
-
     /**
      * Create Task
      *   create_task(Task ID);
@@ -46,7 +44,6 @@
     for(int i = 0;i<task_num;i++) {
         t = twice_main->next_task_array(Hello, t);
     }
-
     twice_main->spawn_task_array(t->next());
     twice_main->set_cpu(SPE_ANY);
     twice_main->spawn();