Mercurial > hg > Members > kono > Cerium
changeset 956:15026ebf7a17
unified queue worked on Mac OS X
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 04 Aug 2010 17:02:26 +0900 |
parents | 9989dd7b9ac2 |
children | 559d041313dc |
files | TaskManager/Cell/CellTaskManagerImpl.cc TaskManager/kernel/ppe/HTask.h TaskManager/kernel/ppe/QueueInfo.h TaskManager/kernel/ppe/TaskList.h TaskManager/kernel/ppe/TaskQueue.h |
diffstat | 5 files changed, 17 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc Wed Aug 04 16:46:25 2010 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Wed Aug 04 17:02:26 2010 +0900 @@ -4,7 +4,8 @@ #include <stdlib.h> #include <string.h> #include "CellTaskManagerImpl.h" -#include "HTaskInfo.h" +#include "HTask.h" +#include "QueueInfo.h" #include "SchedTask.h" #include "MainScheduler.h" #include "types.h" @@ -26,7 +27,7 @@ spe_running = 0; // 実行可能な HTask のリスト。 FifoTaskManager と共有される - activeTaskQueue = new HTaskInfo(); + activeTaskQueue = new QueueInfo<HTask>(htaskPool); // HTask の factory。 HTaskInfo ならなんでもいい。 htaskImpl = activeTaskQueue ; // any HTaskInfo @@ -34,12 +35,12 @@ speThreads->init(); // 実行される Task 用の パイプライン用のダブルバッファ - speTaskList = new TaskListInfoPtr[machineNum]; // spe上の走っている Task の配列 - taskListInfo = new TaskListInfoPtr[machineNum]; // 次に走る Task の配列 + speTaskList = new *QueueInfo<TaskList>[machineNum]; // spe上の走っている Task の配列 + taskListInfo = new *QueueInfo<TaskList>[machineNum]; // 次に走る Task の配列 for (int i = 0; i < machineNum; i++) { - taskListInfo[i] = new TaskListInfo(); - speTaskList[i] = new TaskListInfo(); + taskListInfo[i] = new QueueInfo<TaskList>(taskListPool); + speTaskList[i] = new QueueInfo<TaskList>(taskListPool); } // PPE 側の管理をする Manager
--- a/TaskManager/kernel/ppe/HTask.h Wed Aug 04 16:46:25 2010 +0900 +++ b/TaskManager/kernel/ppe/HTask.h Wed Aug 04 17:02:26 2010 +0900 @@ -13,6 +13,8 @@ typedef void (*PostFunction)(SchedTask *s, void *read, void *write); +extern QueueInfo<TaskQueue>* taskQueuePool; + /*! @class @@ -61,6 +63,11 @@ return this; } + void initOnce() { + wait_me = new QueueInfo<TaskQueue>(taskQueuePool); + wait_i = new QueueInfo<TaskQueue>(taskQueuePool); + } + private: int param_index;
--- a/TaskManager/kernel/ppe/QueueInfo.h Wed Aug 04 16:46:25 2010 +0900 +++ b/TaskManager/kernel/ppe/QueueInfo.h Wed Aug 04 17:02:26 2010 +0900 @@ -111,6 +111,7 @@ T* p = q; for (; num-- > 0;) { p->waiter = NULL; + p->initOnce(); queuePool->addLast(p); p = (T*)ROUND_UP_ALIGN((long)(p+1),DEFAULT_ALIGNMENT); }
--- a/TaskManager/kernel/ppe/TaskList.h Wed Aug 04 16:46:25 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskList.h Wed Aug 04 17:02:26 2010 +0900 @@ -19,6 +19,7 @@ SimpleTask tasks[TASK_MAX_SIZE]; // 32*TASK_MAX_SIZE void init() { length = 0; waiter=this; } + void initOnce() { } } ; typedef TaskList* TaskListPtr;