# HG changeset patch # User Shinji KONO # Date 1260711975 -32400 # Node ID 7e937a1cd121c8d2c92c03fe265ddfda05d47036 # Parent dcaa40ec963d4c18b058b12e3335832db3568b24 .... diff -r dcaa40ec963d -r 7e937a1cd121 TaskManager/kernel/ppe/Task.cc --- a/TaskManager/kernel/ppe/Task.cc Sun Dec 13 20:14:18 2009 +0900 +++ b/TaskManager/kernel/ppe/Task.cc Sun Dec 13 22:46:15 2009 +0900 @@ -88,7 +88,7 @@ void Task::set_inData_t( int index, memaddr addr, int size) { - ListElementPtr elm = (ListElementPtr) inData(0); + ListElementPtr elm = (ListElementPtr) inData(index); #ifdef __CERIUM_CELL__ elm->addr = (uint32)(unsigned long)addr; #else @@ -100,7 +100,7 @@ void Task::set_outData_t(int index, memaddr addr, int size) { - ListElementPtr elm = (ListElementPtr) outData(0); + ListElementPtr elm = (ListElementPtr) outData(index); #ifdef __CERIUM_CELL__ elm->addr = (uint32)(unsigned long)addr; #else diff -r dcaa40ec963d -r 7e937a1cd121 TaskManager/kernel/ppe/Task.h --- a/TaskManager/kernel/ppe/Task.h Sun Dec 13 20:14:18 2009 +0900 +++ b/TaskManager/kernel/ppe/Task.h Sun Dec 13 22:46:15 2009 +0900 @@ -58,26 +58,38 @@ void print(); + int const offset() { return (memaddr)data-(memaddr)&task_size; } + + // on host memaddr param(int index) { return (memaddr)data + sizeof(memaddr)*index; } + // on host memaddr inData(int index) { memaddr p = (memaddr)data + inData_offset; return p + sizeof(ListElement)*index; } + // on host memaddr outData(int index) { memaddr p = (memaddr)data + outData_offset; return p + sizeof(ListElement)* index; } + // on client + memaddr get_param(int index) { + memaddr data = (memaddr)this + offset(); + return (memaddr)data + sizeof(memaddr)*index; + } + // on client ListElement *inListData() { - memaddr data = (memaddr)this; + memaddr data = (memaddr)this + offset(); ListElement *list = (ListElement *)(data+inData_offset); return list; } + // on client ListElement *outListData() { - memaddr data = (memaddr)this; + memaddr data = (memaddr)this + offset(); ListElement *list = (ListElement *)(data+outData_offset); return list; } diff -r dcaa40ec963d -r 7e937a1cd121 TaskManager/kernel/schedule/ListData.h --- a/TaskManager/kernel/schedule/ListData.h Sun Dec 13 20:14:18 2009 +0900 +++ b/TaskManager/kernel/schedule/ListData.h Sun Dec 13 22:46:15 2009 +0900 @@ -40,6 +40,13 @@ length = 0; size = 0; } + + void print() { + printf("inList length %d size %d\n",length, size); + for(int i=0;iw_size > 0) { + writebuf = scheduler->allocate(task->w_size); + } +#else + if (outListData->length > 0) { + writebuf = scheduler->allocate(outListData->size); + } +#endif scheduler->dma_wait(DMA_READ); task_list[task->command].wait(scheduler,task->command); task_list[task->command].run(this, readbuf, writebuf); @@ -169,7 +178,7 @@ scheduler); if (nextTask->command==TaskArray) { // Start Task Array - return (SchedTaskBase*)(new SchedTaskArrayLoad(nextSched)); + return (SchedTaskBase*)(new SchedTaskArrayLoad(scheduler, nextSched)); } return nextSched; diff -r dcaa40ec963d -r 7e937a1cd121 TaskManager/kernel/schedule/SchedTaskArray.cc --- a/TaskManager/kernel/schedule/SchedTaskArray.cc Sun Dec 13 20:14:18 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArray.cc Sun Dec 13 22:46:15 2009 +0900 @@ -2,11 +2,12 @@ #include "Scheduler.h" -SchedTaskArray::SchedTaskArray(SchedTaskBase *savedTask_, Task *curTask_, Task *_array) +SchedTaskArray::SchedTaskArray(Scheduler *s, SchedTaskBase *savedTask_, Task *curTask_, Task *_array) { savedTask = savedTask_; task = curTask_; array = _array; + scheduler = s; inListData.bound = 0; inListData.size = 0; @@ -55,6 +56,7 @@ // load Input Data readbuf = scheduler->allocate(inListData.size); + inListData.print(); scheduler->dma_loadList(&inListData, readbuf, DMA_READ); bound(&inListData); @@ -66,6 +68,16 @@ { __debug("[SchedTaskArrayArray:%s]\n", __FUNCTION__); + if (task->outData_count > 0) { + outListData.length = task->outData_count; + outListData.size = task->outData_total_size(); + outListData.element = task->outListData(); + outListData.bound = (int*)scheduler->allocate(outListData.length*sizeof(int)); + bound(&outListData); + + writebuf = scheduler->allocate(outListData.size); + } + scheduler->dma_wait(DMA_READ); task_list[task->command].wait(scheduler,task->command); task_list[task->command].run(this, readbuf, writebuf); @@ -75,14 +87,8 @@ // User 側で作る方法が必要... if (task->outData_count > 0) { - outListData.length = task->outData_count; - outListData.size = task->outData_total_size(); - outListData.element = task->outListData(); - outListData.bound = (int*)scheduler->allocate(outListData.length*sizeof(int)); - - writebuf = scheduler->allocate(outListData.size); + outListData.print(); scheduler->dma_storeList(&outListData, writebuf, DMA_WRITE); - bound(&outListData); } } @@ -119,7 +125,7 @@ Task *next = task->next(); if (next < last()) { // Task List が残っているので、次を準備 - return (SchedTaskBase*)new SchedTaskArray(savedTask, next, array); + return (SchedTaskBase*)new SchedTaskArray(scheduler, savedTask, next, array); } else { // このTaskArrayは終り。save していた Task の次を返す。 // savedTask の read/exec は実行されない (command = TaskArray) @@ -195,8 +201,7 @@ memaddr SchedTaskArray::get_param(int index) { - memaddr *param = (memaddr*)task->param(index); - return *param; + return task->get_param(index); } diff -r dcaa40ec963d -r 7e937a1cd121 TaskManager/kernel/schedule/SchedTaskArray.h --- a/TaskManager/kernel/schedule/SchedTaskArray.h Sun Dec 13 20:14:18 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArray.h Sun Dec 13 22:46:15 2009 +0900 @@ -9,7 +9,7 @@ class SchedTaskArray : public SchedTask { public: /* constructor */ - SchedTaskArray(SchedTaskBase *savedTask_, Task *task_, Task *array_); + SchedTaskArray(Scheduler *s, SchedTaskBase *savedTask_, Task *task_, Task *array_); virtual ~SchedTaskArray(); BASE_NEW_DELETE(SchedTaskArray); diff -r dcaa40ec963d -r 7e937a1cd121 TaskManager/kernel/schedule/SchedTaskArrayLoad.cc --- a/TaskManager/kernel/schedule/SchedTaskArrayLoad.cc Sun Dec 13 20:14:18 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayLoad.cc Sun Dec 13 22:46:15 2009 +0900 @@ -2,9 +2,12 @@ #include "SchedTaskArray.h" #include "Task.h" -SchedTaskArrayLoad::SchedTaskArrayLoad(SchedTaskBase *savedTask_) +SchedTaskArrayLoad::SchedTaskArrayLoad(Scheduler *s, SchedTaskBase *savedTask_) { + SchedTask *sv = (SchedTask*)savedTask_; + scheduler = s; savedTask = savedTask_; + task = sv->task; } SchedTaskArrayLoad::~SchedTaskArrayLoad() {} @@ -28,7 +31,7 @@ SchedTaskArrayLoad::next(Scheduler *scheduler, SchedTaskBase *p) { Task *nextTask = (Task *)readbuf; - return new SchedTaskArray(savedTask, nextTask, nextTask); + return new SchedTaskArray(scheduler, savedTask, nextTask, nextTask); } /* end */ diff -r dcaa40ec963d -r 7e937a1cd121 TaskManager/kernel/schedule/SchedTaskArrayLoad.h --- a/TaskManager/kernel/schedule/SchedTaskArrayLoad.h Sun Dec 13 20:14:18 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayLoad.h Sun Dec 13 22:46:15 2009 +0900 @@ -8,7 +8,7 @@ class SchedTaskArrayLoad : public SchedTask { public: /* constructor */ - SchedTaskArrayLoad(SchedTaskBase *savedTask_); + SchedTaskArrayLoad(Scheduler *s, SchedTaskBase *savedTask_); virtual ~SchedTaskArrayLoad(); BASE_NEW_DELETE(SchedTaskArrayLoad); @@ -19,6 +19,7 @@ /* variables */ void *readbuf; + SimpleTask *task; /* functions */ diff -r dcaa40ec963d -r 7e937a1cd121 example/Bulk/main.cc --- a/example/Bulk/main.cc Sun Dec 13 20:14:18 2009 +0900 +++ b/example/Bulk/main.cc Sun Dec 13 22:46:15 2009 +0900 @@ -3,20 +3,21 @@ #include #include "TaskManager.h" #include "Task.h" +#include "ListData.h" #include "Func.h" extern void task_init(void); static int length = DATA_NUM; -static int task = 10; -static int count = 10; +static int task = 3; +static int count = 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"; -void +static void print_data(int *data, int size, const char *title) { printf("%s ---\n", title); @@ -29,7 +30,7 @@ /** * タスク終了後の data1, data2 の確認 */ -void +static void twice_result(SchedTask *s, void *a, void *b) { int* data = (int*)a; @@ -39,7 +40,7 @@ free(task_buf); } -int +static int init(int argc, char **argv) { for (int i = 1; argv[i]; ++i) { @@ -55,6 +56,13 @@ return 0; } +static void print_ListData(int count, ListElement *t) +{ + for(int i = 0;iset_inData_length(2); t->set_inData(0,data, sizeof(int)*length2); t->set_inData(1,data+length2, sizeof(int)*length2); + print_ListData(2,t->inListData()); /** * Set of Output area * add_outData(address of output area, size of output area); @@ -105,6 +114,7 @@ t->set_outData_length(2); t->set_outData(0,data, sizeof(int)*length2); t->set_outData(1,data+length2, sizeof(int)*length2); + print_ListData(2,t->outListData()); pos += t->size(); printf("pos 0x%0x size 0x%0x\n",pos, t->size()); } diff -r dcaa40ec963d -r 7e937a1cd121 example/Bulk/ppe/Twice.cc --- a/example/Bulk/ppe/Twice.cc Sun Dec 13 20:14:18 2009 +0900 +++ b/example/Bulk/ppe/Twice.cc Sun Dec 13 22:46:15 2009 +0900 @@ -9,7 +9,7 @@ static int run(SchedTask *s,void *rbuf, void *wbuf) { - SchedTaskArray *a = (SchedTaskArray *)s; + // SchedTaskArray *a = (SchedTaskArray *)s; int *i_data; int *o_data; diff -r dcaa40ec963d -r 7e937a1cd121 example/Simple/Makefile.def --- a/example/Simple/Makefile.def Sun Dec 13 20:14:18 2009 +0900 +++ b/example/Simple/Makefile.def Sun Dec 13 22:46:15 2009 +0900 @@ -8,8 +8,10 @@ SIMPLE_TASK=-DSIMPLE_TASK # SIMPLE_TASK= +OPT= -g + CC = g++ -CFLAGS = -g -Wall -O9 $(SIMPLE_TASK) +CFLAGS = -Wall $(OPT) $(SIMPLE_TASK) INCLUDE = -I${CERIUM}/include/TaskManager -I. -I.. LIBS = -L${CERIUM}/TaskManager diff -r dcaa40ec963d -r 7e937a1cd121 example/Simple/Makefile.macosx --- a/example/Simple/Makefile.macosx Sun Dec 13 20:14:18 2009 +0900 +++ b/example/Simple/Makefile.macosx Sun Dec 13 22:46:15 2009 +0900 @@ -22,7 +22,7 @@ all: $(TARGET) $(TARGET): $(OBJS) $(TASK_OBJS) - $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) + $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) $(OPT) link: $(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS) diff -r dcaa40ec963d -r 7e937a1cd121 example/Simple/spe/Makefile --- a/example/Simple/spe/Makefile Sun Dec 13 20:14:18 2009 +0900 +++ b/example/Simple/spe/Makefile Sun Dec 13 22:46:15 2009 +0900 @@ -6,7 +6,7 @@ SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) OBJS = $(SRCS:.cc=.o) -CC = spu-g++ -DABIBIT=$(ABIBIT) $(SIMPLE_TASK) +CC = spu-g++ -DABIBIT=$(ABIBIT) $(SIMPLE_TASK) $(OPT) CFLAGS = -g -Wall -fno-exceptions -fno-rtti #-DDEBUG INCLUDE = -I../${CERIUM}/include/TaskManager -I. -I.. LIBS = -L../${CERIUM}/TaskManager -lspemanager @@ -19,7 +19,7 @@ all: $(TARGET) $(TARGET): $(OBJS) - $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) + $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) $(OPT) clean: rm -f $(TARGET) $(OBJS)