changeset 1626:4fed76f4d101 draft

add gpuNum
author shuhei kokubo
date Thu, 30 May 2013 18:35:08 +0900
parents 6ff0c34c8a3c
children 8b2d3ac19991 b3edf26734f5
files TaskManager/Cell/CellTaskManagerImpl.cc TaskManager/Cell/CellTaskManagerImpl.h TaskManager/include/types.h TaskManager/kernel/main.cc TaskManager/kernel/ppe/CpuThreads.cc TaskManager/kernel/ppe/TaskManager.cc
diffstat 6 files changed, 26 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/Cell/CellTaskManagerImpl.cc	Wed May 29 21:42:47 2013 +0900
+++ b/TaskManager/Cell/CellTaskManagerImpl.cc	Thu May 30 18:35:08 2013 +0900
@@ -91,19 +91,21 @@
             htask = activeTaskQueue->getNext(htask);
         }  else {
             if (htask->cpu_type == SPE_ANY) {
-                speid = cur_anySpeid++;
+                speid = cur_anySpeid++ % machineNum;
+		if (speid < gpuNum) speid = gpuNum;
 #ifdef __CERIUM_GPU__
-            } else if (htask->cpu_type == GPU_0) {
-                speid = htask->cpu_type - 1;
+            } else if (htask->cpu_type < GPU_0+gpuNum) {
+                speid = htask->cpu_type - (int)(GPU_0);
 #endif
+            } else if (htask->cpu_type == ANY_ANY) { 
+                speid = cur_anySpeid++ % machineNum;
             } else {
                 // -1 してるのは
                 // htask->cpu_type - CPU_SPE で
                 // SPE0 = 1, SPE1 = 2, ... SPE5 = 6 ってなってるので
                 // 配列的 (SPE0 = arr[0], SPE1 = arr[1]) にするため
-                speid = htask->cpu_type - CPU_SPE - 1;
+                speid = htask->cpu_type - CPU_SPE - 1 + gpuNum;
             }
-            speid %= machineNum;
             
             set_taskList(htask, taskListInfo[speid]);
             
@@ -374,18 +376,17 @@
 }
 
 #if defined (__CERIUM_CELL__)||defined (__CERIUM_GPU__)
-TaskManagerImpl *create_impl(int num, int useRefDma)
+TaskManagerImpl *create_impl(int num, int num_gpu, int useRefDma)
 {
 #ifdef __CERIUM_CELL__
     Threads *cpus = new SpeThreads(num);
 
 #elif __CERIUM_GPU__    
-    int num_gpu = 1;
     Threads *cpus = new CpuThreads(num, useRefDma,num_gpu);
     num += num_gpu; // for GPU
 #else    
     Threads *cpus = new CpuThreads(num, useRefDma);
 #endif
-    return new CellTaskManagerImpl(num, cpus);
+    return new CellTaskManagerImpl(num, num_gpu, cpus);
 }
 #endif // __CERIUM_CELL
--- a/TaskManager/Cell/CellTaskManagerImpl.h	Wed May 29 21:42:47 2013 +0900
+++ b/TaskManager/Cell/CellTaskManagerImpl.h	Thu May 30 18:35:08 2013 +0900
@@ -12,7 +12,7 @@
 class CellTaskManagerImpl : public TaskManagerImpl {
 public:
     /* constructor */
-    CellTaskManagerImpl(int num, Threads *cpus) : TaskManagerImpl(num) {speThreads = cpus;}
+ CellTaskManagerImpl(int num, Threads *cpus) : TaskManagerImpl(num,gpu) {speThreads = cpus;}
     ~CellTaskManagerImpl();
 
     /* variables */
--- a/TaskManager/include/types.h	Wed May 29 21:42:47 2013 +0900
+++ b/TaskManager/include/types.h	Thu May 30 18:35:08 2013 +0900
@@ -75,7 +75,8 @@
     SPE_3 = 9,
     SPE_4 = 10,
     SPE_5 = 11,
-
+    GPU_ANY = 128,
+    ANY_ANY = 129,
 
 } CPU_TYPE;
 
--- a/TaskManager/kernel/main.cc	Wed May 29 21:42:47 2013 +0900
+++ b/TaskManager/kernel/main.cc	Thu May 30 18:35:08 2013 +0900
@@ -35,12 +35,15 @@
 main(int argc, char *argv[])
 {
     int machineNum = 1;
+    int gpuNum = 0;
     int speIdle = 0;
     int useRefDma = 0;
 
     for (int i = 1; argv[i]; ++i) {
         if (strcmp(argv[i], "-cpu") == 0) {
             machineNum = atoi(argv[++i]);
+	} else if (strcmp(argv[i], "-gpu") == 0) {
+            gpuNum = atoi(argv[++i]);
         } else if (strcmp(argv[i], "-p") == 0) {
             profile = 1;
         } else if (strcmp(argv[i], "-export") == 0) {
@@ -54,7 +57,7 @@
         }
     }
 
-    TaskManager *manager = new TaskManager(machineNum);
+    TaskManager *manager = new TaskManager(machineNum, gpuNum);
     manager->init(speIdle,export_task_log, useRefDma);
 
     manager->set_TMend(defaultTMend);
--- a/TaskManager/kernel/ppe/CpuThreads.cc	Wed May 29 21:42:47 2013 +0900
+++ b/TaskManager/kernel/ppe/CpuThreads.cc	Thu May 30 18:35:08 2013 +0900
@@ -14,7 +14,10 @@
 SchedExternTask(ShowTime);
 SchedExternTask(StartProfile);
 
-CpuThreads::CpuThreads(int num, int useRefDma, int start_id) : cpu_num(num), use_refdma(useRefDma), id_offset(start_id){
+/**
+ id_offset is gpu_num
+*/
+CpuThreads::CpuThreads(int num, int useRefDma, int start_id) : cpu_num(num), use_refdma(useRefDma), id_offset(start_id) {
 #ifdef __CERIUM_GPU__
     gpu = new GpuThreads(useRefDma);
 #endif
@@ -102,7 +105,9 @@
 void
 CpuThreads::spawn_task(int id, TaskListPtr p) {
     p->self->flag.dim_count = 1; // always dim_count set min cpu. min cpu is 1.
-    if (p->dim>0) {
+
+    if (p->dim>0 && id >= id_offset) { 
+        // emulate ND_range in cpu
         int dim_count = (p->x)*(p->y)*(p->z);
         if (cpu_num < dim_count) {
             dim_count = cpu_num;
@@ -191,7 +196,7 @@
 int
 CpuThreads::is_gpu(int cpuid)
 {
-    if ( (cpuid-id_offset) < id_offset) {
+    if (cpuid < id_offset) {
         return 1;
     } else {
         return 0;
--- a/TaskManager/kernel/ppe/TaskManager.cc	Wed May 29 21:42:47 2013 +0900
+++ b/TaskManager/kernel/ppe/TaskManager.cc	Thu May 30 18:35:08 2013 +0900
@@ -4,7 +4,7 @@
 #include "Task.h"
 #include "SysFunc.h"
 
-TaskManager::TaskManager(int num) : machineNum(num)
+TaskManager::TaskManager(int num, int gpu) : machineNum(num) : gpuNum(gpu)
 {
 }
 
@@ -34,7 +34,7 @@
 void
 TaskManager::init(int spuIdle, int export_task_log, int useRefDma=0)
 {
-    m_impl = create_impl(machineNum,useRefDma);
+    m_impl = create_impl(machineNum,gpuNum,useRefDma);
     m_impl->init(spuIdle, useRefDma, export_task_log);
     m_impl->systask_init();
 }