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");
-}