# HG changeset patch # User shuhei kokubo # Date 1369906508 -32400 # Node ID 4fed76f4d101ac8b6beeb7f205bba1454b32c022 # Parent 6ff0c34c8a3cd801cd8bb33d79fcf199e4afd9a7 add gpuNum diff -r 6ff0c34c8a3c -r 4fed76f4d101 TaskManager/Cell/CellTaskManagerImpl.cc --- 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 diff -r 6ff0c34c8a3c -r 4fed76f4d101 TaskManager/Cell/CellTaskManagerImpl.h --- 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 */ diff -r 6ff0c34c8a3c -r 4fed76f4d101 TaskManager/include/types.h --- 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; diff -r 6ff0c34c8a3c -r 4fed76f4d101 TaskManager/kernel/main.cc --- 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); diff -r 6ff0c34c8a3c -r 4fed76f4d101 TaskManager/kernel/ppe/CpuThreads.cc --- 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; diff -r 6ff0c34c8a3c -r 4fed76f4d101 TaskManager/kernel/ppe/TaskManager.cc --- 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(); }