changeset 1429:ae5fb867cf84 draft

merge
author Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
date Wed, 28 Mar 2012 01:36:57 +0900
parents af2adce9752e (current diff) db5c022d871c (diff)
children f578c190a661
files TaskManager/Cell/CellTaskManagerImpl.cc TaskManager/Cell/CellTaskManagerImpl.h TaskManager/Fifo/FifoTaskManagerImpl.cc TaskManager/Fifo/FifoTaskManagerImpl.h TaskManager/kernel/ppe/HTask.cc TaskManager/kernel/ppe/TaskManagerImpl.h
diffstat 7 files changed, 32 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc	Wed Mar 28 01:36:31 2012 +0900
+++ b/TaskManager/Cell/CellTaskManagerImpl.cc	Wed Mar 28 01:36:57 2012 +0900
@@ -358,6 +358,12 @@
 	printf("CellTaskManager\n");
 }
 
+TaskListPtr CellTaskManagerImpl::createTaskList()
+{
+	return taskListInfo[0]->create();
+}
+
+
 #ifdef __CERIUM_CELL__
 TaskManagerImpl*
 create_impl(int num, int useRefDma)
--- a/TaskManager/Cell/CellTaskManagerImpl.h	Wed Mar 28 01:36:31 2012 +0900
+++ b/TaskManager/Cell/CellTaskManagerImpl.h	Wed Mar 28 01:36:57 2012 +0900
@@ -32,6 +32,7 @@
     void poll1(int spu_limit);
     void poll2(int spu_limit);
     void mail_check(int id);
+    TaskListPtr createTaskList();
     //void set_runTaskList(*QueueInfo<HTask>);
     void set_runTaskList(QueueInfo<HTask>* activeTaskQueue);
     void sendTaskList();
--- a/TaskManager/ChangeLog	Wed Mar 28 01:36:31 2012 +0900
+++ b/TaskManager/ChangeLog	Wed Mar 28 01:36:57 2012 +0900
@@ -1,3 +1,10 @@
+2012-3-16 Shinji KONO <toma@cr.ie.u-ryukyu.ac.jp>
+
+	create_taskを sub task でやると、tasklist のallocate にlockがいる。
+	SchedTask->task_create でschedulr毎に tasklist を持たせてやるとlockは不要になる。
+	task create は GPU/SPU 側では作成しないはず。しても良いが。TaskList を作って書きだせば良い。
+	それは、まぁ、先のことにして。
+
 2012-3-11 Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
 
 	create_task_array を、rbuf上にtaskarrayを構築している。
--- a/TaskManager/Fifo/FifoTaskManagerImpl.cc	Wed Mar 28 01:36:31 2012 +0900
+++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc	Wed Mar 28 01:36:57 2012 +0900
@@ -323,6 +323,11 @@
     printf("FifoTaskManagerImpl\n");
 }
 
+TaskListPtr FifoTaskManagerImpl::createTaskList()
+{
+    return taskListInfo->create();
+}
+
 /**
  * # # # # # # # # 
  *   Abstract Factory Pattern
--- a/TaskManager/Fifo/FifoTaskManagerImpl.h	Wed Mar 28 01:36:31 2012 +0900
+++ b/TaskManager/Fifo/FifoTaskManagerImpl.h	Wed Mar 28 01:36:57 2012 +0900
@@ -31,7 +31,7 @@
     void start_profile();
     void export_task_log();
     void polling();
-
+    TaskListPtr createTaskList();
 
     void mail_check();
 
--- a/TaskManager/kernel/ppe/HTask.cc	Wed Mar 28 01:36:31 2012 +0900
+++ b/TaskManager/kernel/ppe/HTask.cc	Wed Mar 28 01:36:57 2012 +0900
@@ -81,12 +81,17 @@
 Task *
 HTask::create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData)
 {
-    r_size = Task::calc_size(num_param, num_inData, num_outData)*num_task;
-    rbuf = (memaddr) mimpl->allocate(r_size);
+    r_size = 0;
+    int sz = Task::calc_size(num_param, num_inData, num_outData);
+    TaskListPtr tl =  mimpl->createTaskList();
+    if (sz>tl-> sizeof(tl->tasks)) {
+	mimpl->get_scheduler()->printf("too large task array.\n");
+    }
+    rbuf = (memaddr)tl;
     //printf("r_size %d\n",r_size);
 	//bzeroするのはcostが高いので外したい
-    bzero(rbuf,r_size);
-    Task *task = (Task*)rbuf;
+    bzero(tl->tasks,sizeof(tasks));
+    Task *task = tl->tasks;
     task->init(id, num_param,num_inData,num_outData);
 // task->print();
     return task;  // first task
@@ -104,6 +109,7 @@
     Task *first = (Task*)rbuf;
     if (t==0) {
 // first->print();
+        first->init(id, param_count, inData_count, outData_count);
 	return first;
     }
 
@@ -126,6 +132,7 @@
     Task *first = (Task*)rbuf;
     if (t==0) {
 // first->print();
+        first->init(id, param_count, inData_count, outData_count);
 	return first;
     }
 
--- a/TaskManager/kernel/ppe/TaskManagerImpl.h	Wed Mar 28 01:36:31 2012 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.h	Wed Mar 28 01:36:57 2012 +0900
@@ -58,6 +58,7 @@
     virtual HTaskPtr create_task(int cmd,void *from);
     virtual HTaskPtr create_task(int cmd, memaddr rbuf, long r_size, memaddr wbuf, long w_size,void *from);
     virtual HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData,void *from);
+    virtual TaskListPtr createTaskList();
 	const char *get_task_name(int cmd);
 	const char *get_task_name(TaskPtr task);
 	const char *get_task_name(SimpleTaskPtr simpletask);