Mercurial > hg > Game > Cerium
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);