# HG changeset patch # User Shinji KONO # Date 1260028450 -32400 # Node ID bde5f13adf10c66ae1282789d16038c02da97c6c # Parent d9111086b2c43986136e02d47df244f03c204048 fix many task example (sort). Dummy task is now system supported. diff -r d9111086b2c4 -r bde5f13adf10 Renderer/Engine/RenderingTasks.h --- a/Renderer/Engine/RenderingTasks.h Sat Dec 05 20:54:12 2009 +0900 +++ b/Renderer/Engine/RenderingTasks.h Sun Dec 06 00:54:10 2009 +0900 @@ -17,7 +17,7 @@ Move, Draw, - Dummy, + // Dummy, UpdateKey, InitKey, diff -r d9111086b2c4 -r bde5f13adf10 Renderer/Engine/task/dummy.cc --- a/Renderer/Engine/task/dummy.cc Sat Dec 05 20:54:12 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -#include "dummy.h" - -SchedDefineTask(Dummy); - -static int -run(SchedTask *s,void *rbuf, void *wbuf) -{ - return 0; -} diff -r d9111086b2c4 -r bde5f13adf10 Renderer/Engine/task/dummy.h --- a/Renderer/Engine/task/dummy.h Sat Dec 05 20:54:12 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -#include "SchedTask.h" - diff -r d9111086b2c4 -r bde5f13adf10 Renderer/Engine/task/task_init.cc --- a/Renderer/Engine/task/task_init.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/Renderer/Engine/task/task_init.cc Sun Dec 06 00:54:10 2009 +0900 @@ -16,7 +16,7 @@ SchedExternTask(Move); SchedExternTask(Draw); -SchedExternTask(Dummy); +// SchedExternTask(Dummy); SchedExternTask(ShowTime); SchedExternTask(ChainMove); @@ -48,7 +48,7 @@ SchedRegister( Move); SchedRegister( Draw); - SchedRegister( Dummy); + // SchedRegister( Dummy); SchedRegister( UpdateKey); SchedRegister( InitKey); diff -r d9111086b2c4 -r bde5f13adf10 TaskManager/Fifo/FifoTaskManagerImpl.cc --- a/TaskManager/Fifo/FifoTaskManagerImpl.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc Sun Dec 06 00:54:10 2009 +0900 @@ -62,6 +62,8 @@ mainTaskList = taskListImpl->create(); + schedTaskManager = new SchedTask(); + schedTaskManager->init(0,0,0,mainScheduler); } diff -r d9111086b2c4 -r bde5f13adf10 TaskManager/Makefile.def --- a/TaskManager/Makefile.def Sat Dec 05 20:54:12 2009 +0900 +++ b/TaskManager/Makefile.def Sun Dec 06 00:54:10 2009 +0900 @@ -32,8 +32,8 @@ # SIMPLE_TASK=-DSIMPLE_TASK SIMPLE_TASK= -# OPT = -O9 -OPT = -g +OPT = -O9 +# OPT = -g CC = g++ CFLAGS = $(SIMPLE_TASK) -Wall `sdl-config --cflags` -m$(ABIBIT) $(OPT) diff -r d9111086b2c4 -r bde5f13adf10 TaskManager/kernel/main.cc --- a/TaskManager/kernel/main.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/TaskManager/kernel/main.cc Sun Dec 06 00:54:10 2009 +0900 @@ -10,9 +10,12 @@ /* User main function */ extern int TMmain(TaskManager* manager, int argc, char *argv[]); +static int profile = 0; + /* Default TMend function */ static void -defaultTMend(TaskManager *manager) {} +defaultTMend(TaskManager *manager) { +} //TaskManager *manager; @@ -35,8 +38,9 @@ for (int i = 1; argv[i]; ++i) { if (strcmp(argv[i], "-cpu") == 0) { machineNum = atoi(argv[++i]); - } - if (strcmp(argv[i], "-help") == 0) { + } else if (strcmp(argv[i], "-p") == 0) { + profile = 1; + } else if (strcmp(argv[i], "-help") == 0) { if (usr_help_str) { printf("%s", usr_help_str); } @@ -50,6 +54,8 @@ manager->set_TMend(defaultTMend); + if (profile) + manager->start_profile(); if (TMmain(manager, argc, argv) < 0) { goto FINISH; } @@ -57,10 +63,14 @@ manager->run(); (manager->tm_end)(manager); - manager->run(); // tm_end may create a Task.. + if (profile) + manager->show_profile(); + manager->run(); // tm_end/show_profile may create a Task.. FINISH: delete manager; return EXIT_SUCCESS; } + +/* end */ diff -r d9111086b2c4 -r bde5f13adf10 TaskManager/kernel/schedule/SchedTask.cc --- a/TaskManager/kernel/schedule/SchedTask.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Sun Dec 06 00:54:10 2009 +0900 @@ -321,6 +321,11 @@ scheduler->show_dma_wait(); } +long +SchedTask::get_random() { + return scheduler->get_random(); +} + void SchedTask::start_profile() { scheduler->start_profile(); diff -r d9111086b2c4 -r bde5f13adf10 TaskManager/kernel/schedule/SchedTask.h --- a/TaskManager/kernel/schedule/SchedTask.h Sat Dec 05 20:54:12 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.h Sun Dec 06 00:54:10 2009 +0900 @@ -117,9 +117,11 @@ void dma_load(void *buf, memaddr addr, uint32 size, uint32 mask); void dma_store(void *buf,memaddr addr, uint32 size, uint32 mask); void dma_wait(uint32 mask); + void show_dma_wait(); void start_profile(); + /*! SPU用の get_input, get_output */ @@ -142,6 +144,7 @@ void set_task_cpu(HTaskPtr, CPU_TYPE); void* allocate(int size,int align); Scheduler* get_scheduler(); + long get_random(); /* system call */ diff -r d9111086b2c4 -r bde5f13adf10 TaskManager/kernel/sys_task/SysTasks.h --- a/TaskManager/kernel/sys_task/SysTasks.h Sat Dec 05 20:54:12 2009 +0900 +++ b/TaskManager/kernel/sys_task/SysTasks.h Sun Dec 06 00:54:10 2009 +0900 @@ -2,3 +2,4 @@ FinishTask, ShowTime, StartProfile, +#define Dummy StartTask diff -r d9111086b2c4 -r bde5f13adf10 example/many_task/Makefile.def --- a/example/many_task/Makefile.def Sat Dec 05 20:54:12 2009 +0900 +++ b/example/many_task/Makefile.def Sun Dec 06 00:54:10 2009 +0900 @@ -6,8 +6,10 @@ CERIUM = ../../../Cerium +OPT = -O9 +# OPT = -g CC = g++ -CFLAGS = -g -Wall -O9 +CFLAGS = -Wall $(OPT) INCLUDE = -I${CERIUM}/include/TaskManager -I. -I.. LIBS = -L${CERIUM}/TaskManager diff -r d9111086b2c4 -r bde5f13adf10 example/many_task/main.cc --- a/example/many_task/main.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/example/many_task/main.cc Sun Dec 06 00:54:10 2009 +0900 @@ -70,7 +70,11 @@ task_init(); - sort_init(manager, manager->get_cpuNum(), length); + HTask *dummy = manager->create_task(Dummy); + int cpu = manager->get_cpuNum(); + if (cpu==0) cpu = 1; + dummy->set_post(sort_init, (void*)cpu, (void*)length); + dummy->spawn(); st_time = getTime(); @@ -87,3 +91,5 @@ //show_data(); printf("Time: %0.6f\n",ed_time-st_time); } + +/* end */ diff -r d9111086b2c4 -r bde5f13adf10 example/many_task/sort.cc --- a/example/many_task/sort.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/example/many_task/sort.cc Sun Dec 06 00:54:10 2009 +0900 @@ -12,10 +12,9 @@ static int last_block_num; static int half_block_num; static int last_half_block_num; -static TaskManger *manager; static void sort_restart(SchedTask *, void *, void *); -static void sort_start(); +static void sort_start(SchedTask *); /** * 一つの block にある data の数が MAX_BLOCK_SIZE 超えないような @@ -48,22 +47,22 @@ sort_restart(SchedTask *s, void *d, void *e) { static int cnt = 0; +// static int ccc = 0; long max = (long)d; if (++cnt == max) { cnt = 0; - sort_start(); +// printf("restarted %d\n",ccc++); + sort_start(s); } } static void -sort_start() +sort_start(SchedTask *manager) { if (--sort_count < 0) { return; } -#ifdef SIMPLE_TASK -#endif HTaskPtr fsort[split_num]; @@ -114,7 +113,7 @@ for (int i = 0; i < half_num; i++) { bsort[i]->wait_for(fsort[i]); bsort[i]->wait_for(fsort[i+1]); - bsort[i]->set_post(sort_restart, (void*)(half_num),0); + bsort[i]->set_post(sort_restart, (void*)(half_num),(void*)manager); bsort[i]->spawn(); } } @@ -125,10 +124,10 @@ } void -sort_init(TaskManager *_manager, int cpuNum , int length ) +sort_init(SchedTask *manager, void *a, void *b) { - - manager = _manager; + int cpuNum = (int)a; + int length = (int)b; data = (DataPtr)manager->allocate(sizeof(Data)*length); data_length = length; @@ -148,7 +147,7 @@ last_block_num = length - (split_num-1)*block_num; last_half_block_num = half_block_num+(last_block_num/2); - sort_start(); + sort_start(manager); } /* end */ diff -r d9111086b2c4 -r bde5f13adf10 example/word_count_test/Makefile.def --- a/example/word_count_test/Makefile.def Sat Dec 05 20:54:12 2009 +0900 +++ b/example/word_count_test/Makefile.def Sun Dec 06 00:54:10 2009 +0900 @@ -10,8 +10,8 @@ # SIMPLE_TASK= -DSIMPLE_TASK SIMPLE_TASK= -# OPT = -O9 -OPT = -g +OPT = -O9 +# OPT = -g CC = g++ CFLAGS = -Wall $(OPT) $(SIMPLE_TASK) diff -r d9111086b2c4 -r bde5f13adf10 example/word_count_test/main.cc --- a/example/word_count_test/main.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/example/word_count_test/main.cc Sun Dec 06 00:54:10 2009 +0900 @@ -193,10 +193,6 @@ /*各SPEの結果を合計して出力するタスク*/ - if (profile) { - manager->start_profile(); - } - #ifdef SIMPLE_TASK t_print = manager->create_task(TASK_PRINT, (memaddr)&w->self,sizeof(memaddr),0,0); @@ -254,12 +250,6 @@ return filename; } -static void -myTMend(TaskManager *manager) -{ - if (profile) - manager->show_profile(); -} int TMmain(TaskManager *manager, int argc, char *argv[]) @@ -271,7 +261,6 @@ if (filename < 0) { return -1; } - manager->set_TMend(myTMend); task_init(); run_start(manager, filename); diff -r d9111086b2c4 -r bde5f13adf10 example/word_count_test/spe/Exec.cc --- a/example/word_count_test/spe/Exec.cc Sat Dec 05 20:54:12 2009 +0900 +++ b/example/word_count_test/spe/Exec.cc Sun Dec 06 00:54:10 2009 +0900 @@ -26,36 +26,22 @@ int line_num = 0; int i = 0; - /*文字なら1,スペースか改行なら0*/ head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A); word_num -= 1-head_tail_flag[0]; for (; i < length; i++) { - - //s->printf("[SPE%d]%c",id,i_data[i]); - - if (i_data[i] == 0x20) { - //s->printf("スペース\n"); word_flag = 1; - } - - else if (i_data[i] == 0x0A) { - //s->printf("改行\n"); + } else if (i_data[i] == 0x0A) { line_num += 1; word_flag = 1; - } - - else { + } else { word_num += word_flag; word_flag = 0; } - } word_num += word_flag; - /*文字なら1,スペースか改行なら0*/ - //printf("last word %c",i_data[i-1]); head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A); // s->printf("SPE word %d line %d\n",word_num,line_num);