Mercurial > hg > Members > kono > Cerium
changeset 63:54355e641172
*** empty log message ***
author | gongo |
---|---|
date | Sun, 17 Feb 2008 10:55:22 +0900 |
parents | b03e4cb64302 |
children | eb2cb212881c |
files | TaskManager/Cell/CellBufferManager.cc TaskManager/Changelog TaskManager/Test/simple_render/Makefile TaskManager/Test/simple_render/main.cpp TaskManager/Test/simple_render/viewer.cpp TaskManager/kernel/ppe/BufferManager.cc TaskManager/kernel/ppe/HTaskInfo.cc TaskManager/kernel/ppe/TaskManager.cc TaskManager/kernel/ppe/TaskManagerImpl.cc include/TaskManager/BufferManager.h include/TaskManager/CellBufferManager.h include/TaskManager/HTaskInfo.h include/TaskManager/TaskManager.h |
diffstat | 13 files changed, 156 insertions(+), 72 deletions(-) [+] |
line wrap: on
line diff
--- a/TaskManager/Cell/CellBufferManager.cc Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/Cell/CellBufferManager.cc Sun Feb 17 10:55:22 2008 +0900 @@ -6,18 +6,13 @@ void CellBufferManager::init(void) { - tlistImpl = new CellTaskListInfo; - tqueueImpl = new TaskQueueInfo; - htaskImpl = new HTaskInfo; + BufferManager::init(void); - tlistImpl->init(machineNum*2); - tqueueImpl->init(TASK_MAX_SIZE*4); - htaskImpl->init(TASK_MAX_SIZE*2); - - machineTaskList = new TaskListPtr[machineNum]; + cellTaskListImpl = new CellTaskListInfo; + machineTaskList = new TaskListPtr[machineNum]; for (int i = 0; i < machineNum; i++) { - machineTaskList[i] = tlistImpl->create(); + machineTaskList[i] = cellTaskListImpl->create(); } } @@ -27,8 +22,8 @@ { TaskQueuePtr q; - q = tqueueImpl->create(task); - activeTaskQueue = tqueueImpl->append(activeTaskQueue, q); + q = taskQueueImpl->create(task); + activeTaskQueue = taskQueueImpl->append(activeTaskQueue, q); } void @@ -36,8 +31,8 @@ { TaskQueuePtr q; - q = tqueueImpl->create(task); - waitTaskQueue = tqueueImpl->append(waitTaskQueue, q); + q = taskQueueImpl->create(task); + waitTaskQueue = taskQueueImpl->append(waitTaskQueue, q); } TaskListPtr @@ -52,8 +47,8 @@ if (list->length < TASK_MAX_SIZE) { return list; } else { - q = tlistImpl->create(); - machineTaskList[0] = tlistImpl->append(machineTaskList[0], q); + q = cellTaskListImpl->create(); + machineTaskList[0] = cellTaskListImpl->append(machineTaskList[0], q); return q; } } @@ -69,7 +64,7 @@ while (p) { p1 = p; p = p->next; - tlistImpl->free(p1); + cellTaskListImpl->free(p1); } } #endif
--- a/TaskManager/Changelog Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/Changelog Sun Feb 17 10:55:22 2008 +0900 @@ -1,3 +1,29 @@ +2008-02-17 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp> + + * fix: kernel/ppe/HTask.cpp + 今まで、manager->create_task で生成したタスクは + + - dependency の設定 + manager->set_task_depend(master, slave) // slave は master を待つ + + - 実行キューへの追加 + manager->spawn_task(master); + manager->spawn_task(slave); + + と、manager を介してやっていました。 + まあそれでもいいんだけど、特に dependency の所は + どっちがどっちを待つのかってのは、API見るだけじゃわからない。 + そこで、Task (HTask のこと) に、上二つに対応するような + + void set_depend(HTaskPtr) と void spawn(void) を追加しました。 + + - Usage + slave->set_depend(master); // slave は master を待つ + slave->spawn(); // slave をキューへ追加 + + 結局は、それぞれの関数の中では、上の set_task_depend とかを + 呼んでるんだけど、ユーザ側からするとこの方がわかりやすいと思います。 + 2008-02-16 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp> * tag: beta3
--- a/TaskManager/Test/simple_render/Makefile Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/Test/simple_render/Makefile Sun Feb 17 10:55:22 2008 +0900 @@ -13,9 +13,9 @@ EXTRA_CFLAGS = `sdl-config --cflags` `xml2-config --cflags`\ -LIBS = `sdl-config --libs` -lSDL_image -lGL \ +LIBS = `sdl-config --libs` -lSDL_image -Wl,-framework,OpenGL \ `xml2-config --libs`\ - -L../../ -lmanager -lspe2 -lpthread + -L../../ -lmanager #-lspe2 -lpthread .SUFFIXES: .cpp .o
--- a/TaskManager/Test/simple_render/main.cpp Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/Test/simple_render/main.cpp Sun Feb 17 10:55:22 2008 +0900 @@ -44,15 +44,20 @@ task_zrow_init = manager->create_task(fd_zrow_init, 0, 0, 0, NULL); task_run = manager->create_task(fd_run, 0, 0, 0, NULL); - manager->set_task_depend(task_sdl_init, task_run); - manager->set_task_depend(task_zrow_init, task_run); + // obsolute API + //manager->set_task_depend(task_sdl_init, task_run); + //manager->set_task_depend(task_zrow_init, task_run); + task_run->set_depend(task_sdl_init); + task_run->set_depend(task_zrow_init); - //task_sdl_init->set_depend(..); - //task_sdl_init->spawn(); + // obsolute API + //manager->spawn_task(task_sdl_init); + //manager->spawn_task(task_zrow_init); + //manager->spawn_task(task_run); - manager->spawn_task(task_sdl_init); - manager->spawn_task(task_zrow_init); - manager->spawn_task(task_run); + task_sdl_init->spawn(); + task_zrow_init->spawn(); + task_run->spawn(); free(initArg); return 0; @@ -162,7 +167,7 @@ fd_init = manager->open("init"); task_init = manager->create_task(fd_init, 0, 0, 0, NULL); - manager->spawn_task(task_init); + task_init->spawn(); manager->run();
--- a/TaskManager/Test/simple_render/viewer.cpp Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/Test/simple_render/viewer.cpp Sun Feb 17 10:55:22 2008 +0900 @@ -277,7 +277,8 @@ fd = manager->open("ViewerRunLoop"); task = manager->create_task(fd, 0, 0, 0, NULL); - manager->spawn_task(task); + //manager->spawn_task(task); + task->spawn(); } void @@ -297,7 +298,8 @@ this_time = get_ticks(); fd_finish = manager->open("ViewerRunFinish"); task_finish = manager->create_task(fd_finish, 0, 0, 0, NULL); - manager->spawn_task(task_finish); + //manager->spawn_task(task_finish); + task_finish->spawn(); return; } @@ -317,12 +319,17 @@ sgp_buff, pp_buff, NULL); task = manager->create_task(fd, 0, 0, 0, NULL); - manager->set_task_depend(task_update_sgp, task); - manager->set_task_depend(task_create_pp, task); + //manager->set_task_depend(task_update_sgp, task); + //manager->set_task_depend(task_create_pp, task); + task->set_depend(task_update_sgp); + task->set_depend(task_create_pp); - manager->spawn_task(task_update_sgp); - manager->spawn_task(task_create_pp); - manager->spawn_task(task); + //manager->spawn_task(task_update_sgp); + //manager->spawn_task(task_create_pp); + //manager->spawn_task(task); + task_update_sgp->spawn(); + task_create_pp->spawn(); + task->spawn(); sgp_buff->swap_buffer(); } @@ -345,7 +352,8 @@ fd = manager->open("ViewerRunLoop"); task = manager->create_task(fd, 0, 0, 0, NULL); - manager->spawn_task(task); + //manager->spawn_task(task); + task->spawn(); } void
--- a/TaskManager/kernel/ppe/BufferManager.cc Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/kernel/ppe/BufferManager.cc Sun Feb 17 10:55:22 2008 +0900 @@ -10,25 +10,21 @@ void BufferManager::init(void) { - tlistImpl = new TaskListInfo; - tqueueImpl = new TaskQueueInfo; - htaskImpl = new HTaskInfo; + taskListImpl = new TaskListInfo; + taskQueueImpl = new TaskQueueInfo; + htaskImpl = new HTaskInfo; - tlistImpl->init(machineNum*2); - tqueueImpl->init(TASK_MAX_SIZE*4); + taskListImpl->init(machineNum*2); + taskQueueImpl->init(TASK_MAX_SIZE*4); htaskImpl->init(TASK_MAX_SIZE*2); - - machineTaskList = new TaskListPtr[machineNum]; - for (int i = 0; i < machineNum; i++) { - machineTaskList[i] = tlistImpl->create(); - } + mainTaskList = taskListImpl->create(); } TaskQueuePtr BufferManager::create_taskQueue(HTaskPtr task) { - return tqueueImpl->create(task); + return taskQueueImpl->create(task); } HTaskPtr @@ -40,7 +36,7 @@ void BufferManager::free_taskQueue(TaskQueuePtr q) { - tqueueImpl->free(q); + taskQueueImpl->free(q); } void @@ -54,25 +50,33 @@ { TaskQueuePtr q; - q = tqueueImpl->create(task); - activeTaskQueue = tqueueImpl->append(activeTaskQueue, q); + q = taskQueueImpl->create(task); + activeTaskQueue = taskQueueImpl->append(activeTaskQueue, q); } void BufferManager::finish(void) { - delete tlistImpl; - delete tqueueImpl; + delete taskListImpl; + delete taskQueueImpl; delete htaskImpl; } +/** + * waitTaskList って別で持つ必要あるのかな。 + * ここでいう wait ってのは依存のことで、 + * 依存される? task はすでにこの task を持っているわけだから。 + * わざわざ waitTaskList を持つ必要は無い。 + * けど、OS とかだと依存とかじゃない wait もあるんだよな。 + * 消す必要は無いか。 + */ void BufferManager::append_waitTask(HTaskPtr task) { - TaskQueuePtr q; + //TaskQueuePtr q; - q = tqueueImpl->create(task); - waitTaskQueue = tqueueImpl->append(waitTaskQueue, q); + //q = taskQueueImpl->create(task); + //waitTaskQueue = taskQueueImpl->append(waitTaskQueue, q); } void @@ -99,7 +103,7 @@ d = p; p = p->next; append_activeTask(task); - waitTaskQueue = remove_taskQueue(waitTaskQueue, d); + //waitTaskQueue = remove_taskQueue(waitTaskQueue, d); } else { p = p->next; } @@ -116,7 +120,7 @@ if (p->task == task) { list = list->next; - tqueueImpl->free(p); + taskQueueImpl->free(p); } else { p1 = p->next; while (p1 && p1->task && p1->task != task) { @@ -125,7 +129,7 @@ } if (p1) { p->next = p1->next; - tqueueImpl->free(p1); + taskQueueImpl->free(p1); } } @@ -142,7 +146,7 @@ if (p == q) { list = list->next; - tqueueImpl->free(p); + taskQueueImpl->free(p); } else { p1 = p->next; while (p1 && p1 != q) { @@ -151,7 +155,7 @@ } if (p1) { p->next = p1->next; - tqueueImpl->free(p1); + taskQueueImpl->free(p1); } } @@ -163,15 +167,15 @@ { TaskListPtr list, q; - list = machineTaskList[0]; + list = mainTaskList; while (list->next) list = list->next; if (list->length < TASK_MAX_SIZE) { return list; } else { - q = tlistImpl->create(); - machineTaskList[0] = tlistImpl->append(machineTaskList[0], q); + q = taskListImpl->create(); + mainTaskList = taskListImpl->append(mainTaskList, q); return q; } } @@ -181,12 +185,12 @@ { TaskListPtr p, p1; - machineTaskList[0]->length = 0; + mainTaskList->length = 0; - p = machineTaskList[0]->next; + p = mainTaskList->next; while (p) { p1 = p; p = p->next; - tlistImpl->free(p1); + taskListImpl->free(p1); } }
--- a/TaskManager/kernel/ppe/HTaskInfo.cc Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/kernel/ppe/HTaskInfo.cc Sun Feb 17 10:55:22 2008 +0900 @@ -1,5 +1,6 @@ #include <stdio.h> #include <stdlib.h> +#include "TaskManagerImpl.h" #include "HTaskInfo.h" HTaskInfo::HTaskInfo(void) @@ -62,6 +63,7 @@ q->wait_me = NULL; q->wait_i = NULL; q->post_func = NULL; + q->mimpl = NULL; return q; } @@ -83,3 +85,27 @@ } freeHTask = htaskPool = NULL; } + + +/** + * manager->set_task_depend(task1, task2); // task2 は task1 の終了を待つ + * + * ってやるより + * + * task2->set_depend(task1); + * + * ってやったほうがわかりやすいよねー的な話し合いで + * 下のようなAPIを作りました + */ + +void +HTask::spawn(void) +{ + mimpl->spawn_task(this); +} + +void +HTask::set_depend(HTaskPtr master) +{ + mimpl->set_task_depend(master, this); +}
--- a/TaskManager/kernel/ppe/TaskManager.cc Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/kernel/ppe/TaskManager.cc Sun Feb 17 10:55:22 2008 +0900 @@ -58,6 +58,16 @@ return m_impl->create_task(cmd, size, in, out, func); } +/** + * TaskManager を介してではなく、 + * HTask から直接呼べるようにしたので不要に + * + * obsolute API + * manager->set_task_depend(master, slave); + * new API + * slave->set_depend(master); + */ +#if 0 void TaskManager::set_task_depend(HTaskPtr master, HTaskPtr slave) { @@ -69,6 +79,7 @@ { m_impl->spawn_task(task); } +#endif void TaskManager::run(void) @@ -89,7 +100,7 @@ init_fd = open(sym); init = m_impl->create_task(init_fd, 0, 0, 0, 0); - spawn_task(init); + m_impl->spawn_task(init); }
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc Sat Feb 16 21:42:17 2008 +0900 +++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc Sun Feb 17 10:55:22 2008 +0900 @@ -42,6 +42,8 @@ new_task->post_func = func; } + new_task->mimpl = this; + return new_task; } @@ -102,13 +104,11 @@ // かっこいい class 判定がないものか。typeinfoだっけ? // in,out にあるのが DmaBuffer 以外だったら通信させない決まりにしたい if (htask->in_addr != 0) { - //task->in_addr = (uint32)(htask->in_addr->get_buffer()); htask->in_addr->get_buffer(&task->in_addr); } else { task->in_addr = 0; } if (htask->in_addr != 0) { - //task->out_addr = (uint32)(htask->out_addr->get_buffer()); htask->out_addr->get_buffer(&task->out_addr); } else { task->out_addr = 0;
--- a/include/TaskManager/BufferManager.h Sat Feb 16 21:42:17 2008 +0900 +++ b/include/TaskManager/BufferManager.h Sun Feb 17 10:55:22 2008 +0900 @@ -32,14 +32,14 @@ virtual ~BufferManager(void); /* variables */ - TaskListInfo *tlistImpl; - TaskQueueInfo *tqueueImpl; + TaskListInfo *taskListImpl; + TaskQueueInfo *taskQueueImpl; HTaskInfo *htaskImpl; int machineNum; TaskQueuePtr activeTaskQueue; TaskQueuePtr waitTaskQueue; - TaskListPtr *machineTaskList; + TaskListPtr mainTaskList; /* function */ virtual void init(void);
--- a/include/TaskManager/CellBufferManager.h Sat Feb 16 21:42:17 2008 +0900 +++ b/include/TaskManager/CellBufferManager.h Sun Feb 17 10:55:22 2008 +0900 @@ -7,6 +7,8 @@ class CellBufferManager : public BufferManager { public: + TaskListPtr *machineTaskList; + void init(void); #if 0
--- a/include/TaskManager/HTaskInfo.h Sat Feb 16 21:42:17 2008 +0900 +++ b/include/TaskManager/HTaskInfo.h Sun Feb 17 10:55:22 2008 +0900 @@ -13,6 +13,8 @@ # include "DmaBuffer.h" #endif +class TaskManagerImpl; + struct htask { int command; int in_size; @@ -24,6 +26,11 @@ TaskQueuePtr wait_i; // List of task for which I am waiting void (*post_func)(void); struct htask *next; + + TaskManagerImpl *mimpl; + void spawn(void); + void set_depend(struct htask *); + //void (*set_cpu)(int); }; class HTaskInfo {
--- a/include/TaskManager/TaskManager.h Sat Feb 16 21:42:17 2008 +0900 +++ b/include/TaskManager/TaskManager.h Sun Feb 17 10:55:22 2008 +0900 @@ -23,8 +23,8 @@ void finish(void); HTaskPtr create_task(int cmd, int siz, DmaBuffer *in_addr, DmaBuffer *out_addr, void (*func)(void)); - void set_task_depend(HTaskPtr master, HTaskPtr slave); - void spawn_task(HTaskPtr); + //void set_task_depend(HTaskPtr master, HTaskPtr slave); + //void spawn_task(HTaskPtr); void run(void); void set_init_task(const char *sym);