Mercurial > hg > Game > Cerium
changeset 1653:cb1e5f6177b9 draft
problem on speTaskList free
author | shoheikokubo |
---|---|
date | Wed, 26 Jun 2013 19:09:29 +0900 |
parents | 1709dde36b0d |
children | 0e1d40a3474b |
files | TaskManager/Cell/CellTaskManagerImpl.cc example/multiply/Makefile.def example/multiply/Makefile.gpu example/multiply/Makefile.macosx example/multiply/gpu/gpu_task_init.cc example/multiply/gpu/task_init.cc |
diffstat | 6 files changed, 28 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc Tue Jun 25 19:54:23 2013 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Wed Jun 26 19:09:29 2013 +0900 @@ -237,15 +237,20 @@ memaddr data; // SPE Scheduler からの mail check - while (speThreads->has_mail(id,1,&data)) { + mail:while (speThreads->has_mail(id,1,&data)) { if (data == (memaddr) MY_SPE_STATUS_READY) { // MY_SPE_STATUS_READY: SPE が持ってた Task 全て終了 // freeAll する前に循環リストに戻す + spe_running--; if (!speTaskList[id]->empty()) { + // multi_dimension がすべて終わるまで speTaskList をフリーすることはできない + for(TaskListPtr list = speTaskList[id]->getFirst();list;list=list->next) { + if (list->self->flag.dim_count>0) + goto mail; + } speTaskList[id]->getLast()->next = speTaskList[id]; speTaskList[id]->freeAll(); } - spe_running--; // printf("SPE %d status ready, %d running\n",id, spe_running); } else if (data == (memaddr) MY_SPE_COMMAND_MALLOC) { // MY_SPE_COMMAND_MALLOC SPE からのmain memory request
--- a/example/multiply/Makefile.def Tue Jun 25 19:54:23 2013 +0900 +++ b/example/multiply/Makefile.def Wed Jun 26 19:09:29 2013 +0900 @@ -11,5 +11,5 @@ OPT = -g CFLAGS = $(OPT) -Wall -INCLUDE = -I${CERIUM}/include/TaskManager -I. -I.. +INCLUDE = -I. -I.. -I${CERIUM}/include/TaskManager LIBS = -L${CERIUM}/TaskManager
--- a/example/multiply/Makefile.gpu Tue Jun 25 19:54:23 2013 +0900 +++ b/example/multiply/Makefile.gpu Wed Jun 26 19:09:29 2013 +0900 @@ -5,10 +5,11 @@ SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) OBJS = $(SRCS:.cc=.o) -TASK_DIR = gpu +GPU_TASK_DIR = gpu +TASK_DIR = ppe TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc) TASK_SRCS_EXCLUDE = -TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP)) +TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP)) $(wildcard $(GPU_TASK_DIR)/*.cc) TASK_OBJS = $(TASK_SRCS:.cc=.o) LIBS += `sdl-config --libs` -lGpuManager -framework opencl
--- a/example/multiply/Makefile.macosx Tue Jun 25 19:54:23 2013 +0900 +++ b/example/multiply/Makefile.macosx Wed Jun 26 19:09:29 2013 +0900 @@ -12,7 +12,7 @@ TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP)) TASK_OBJS = $(TASK_SRCS:.cc=.o) -LIBS += -lFifoManager `sdl-config --libs` +LIBS += -lParallelManager `sdl-config --libs` CC += -m$(ABIBIT) .SUFFIXES: .cc .o
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/multiply/gpu/gpu_task_init.cc Wed Jun 26 19:09:29 2013 +0900 @@ -0,0 +1,16 @@ +#include "Func.h" +#include "GpuScheduler.h" + +/* 必ずこの位置に書いて */ + +/** + * この関数は ../spe/spe-main と違って + * 自分で呼び出せばいい関数なので + * 好きな関数名でおk (SchedRegisterTask は必須) + */ + +void +gpu_task_init(void) +{ + GpuSchedRegister(MULTIPLY_TASK, "gpu/Multi.cl","multi"); +}
--- a/example/multiply/gpu/task_init.cc Tue Jun 25 19:54:23 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -#include "Func.h" -#include "GpuScheduler.h" - -/* 必ずこの位置に書いて */ - -/** - * この関数は ../spe/spe-main と違って - * 自分で呼び出せばいい関数なので - * 好きな関数名でおk (SchedRegisterTask は必須) - */ - -void -task_init(void) -{ - GpuSchedRegister(MULTIPLY_TASK, "gpu/Multi.cl","multi"); -}