annotate paper/src/createTaskManager.cbc @ 2:c7acb9211784

add code, figure. and paper fix content
author ryokka
date Mon, 27 Jan 2020 20:41:36 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
1 TaskManager* createTaskManagerImpl(struct Context* context, int numCPU, int numGPU, int numIO) {
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
2 struct TaskManager* taskManager = new TaskManager();
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
3 taskManager->spawnTasks = C_spawnTasksTaskManagerImpl;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
4 taskManager->spawn = C_spawnTaskManagerImpl;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
5 taskManager->shutdown = C_shutdownTaskManagerImpl;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
6 taskManager->incrementTaskCount = C_incrementTaskCountTaskManagerImpl;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
7 taskManager->decrementTaskCount = C_decrementTaskCountTaskManagerImpl;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
8 taskManager->setWaitTask = C_setWaitTaskTaskManagerImpl;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
9 struct TaskManagerImpl* taskManagerImpl = new TaskManagerImpl();
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
10 // 0...numIO-1 IOProcessor
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
11 // numIO...numIO+numGPU-1 GPUProcessor
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
12 // numIO+numGPU...numIO+numGPU+numCPU-1 CPUProcessor
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
13 taskManagerImpl->io = 0;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
14 taskManagerImpl->gpu = numIO;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
15 taskManagerImpl->cpu = numIO+numGPU;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
16 taskManagerImpl->maxCPU = numIO+numGPU+numCPU;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
17 taskManagerImpl->numWorker = taskManagerImpl->maxCPU;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
18 taskManagerImpl->sendGPUWorkerIndex = taskManagerImpl->gpu;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
19 taskManagerImpl->sendCPUWorkerIndex = taskManagerImpl->cpu;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
20 taskManagerImpl->taskCount = 0;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
21 taskManagerImpl->loopCounter = 0;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
22 createWorkers(context, taskManagerImpl);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
23 taskManager->taskManager = (union Data*)taskManagerImpl;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
24 return taskManager;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
25 }
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
26
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
27 void createWorkers(struct Context* context, TaskManagerImpl* taskManager) {
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
28 int i = 0;
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
29 taskManager->workers = (Worker**)ALLOCATE_PTR_ARRAY(context, Worker, taskManager->maxCPU);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
30 for (;i<taskManager->gpu;i++) {
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
31 Queue* queue = createSynchronizedQueue(context);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
32 taskManager->workers[i] = (Worker*)createCPUWorker(context, i, queue);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
33 }
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
34 for (;i<taskManager->cpu;i++) {
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
35 Queue* queue = createSynchronizedQueue(context);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
36 #ifdef USE_CUDAWorker
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
37 taskManager->workers[i] = (Worker*)createCUDAWorker(context, i, queue,0);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
38 #else
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
39 taskManager->workers[i] = (Worker*)createCPUWorker(context, i, queue);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
40 #endif
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
41 }
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
42 for (;i<taskManager->maxCPU;i++) {
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
43 Queue* queue = createSynchronizedQueue(context);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
44 taskManager->workers[i] = (Worker*)createCPUWorker(context, i, queue);
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
45 }
c7acb9211784 add code, figure. and paper fix content
ryokka
parents:
diff changeset
46 }