Mercurial > hg > Game > Cerium
annotate TaskManager/kernel/ppe/TaskManagerImpl.h @ 1602:e33e106ca3e0 draft
change default make parallel from fifo
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 06 Apr 2013 17:27:30 +0900 |
parents | f7d35318ea76 |
children | 5b99bcc6bdb0 |
rev | line source |
---|---|
3 | 1 #ifndef INCLUDED_TASK_MANAGER_IMPL |
2 #define INCLUDED_TASK_MANAGER_IMPL | |
3 | |
307 | 4 #include "MailManager.h" |
5 #include "ListData.h" | |
955 | 6 #include "QueueInfo.h" |
7 #include "TaskQueue.h" | |
8 #include "HTask.h" | |
736 | 9 #include "Scheduler.h" |
1423
515a0f15b5d2
add to log taskdependency
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1229
diff
changeset
|
10 #include "TaskLog.h" |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
11 #include <OpenCL/opencl.h> |
619 | 12 class MemList; |
475
4e0308d2ba73
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
13 |
955 | 14 extern QueueInfo<TaskQueue> *taskQueuePool ; |
15 extern QueueInfo<HTask> *htaskPool ; | |
1428
af2adce9752e
add to export TaskLog
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1424
diff
changeset
|
16 extern QueueInfo<TaskList> *taskListPool; |
af2adce9752e
add to export TaskLog
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1424
diff
changeset
|
17 extern QueueInfo<TaskLog> *taskLogQueue; |
955 | 18 |
3 | 19 class TaskManagerImpl { |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
20 public: |
3 | 21 |
22 /* variables */ | |
23 int machineNum; | |
955 | 24 QueueInfo<HTask> *activeTaskQueue; |
25 QueueInfo<HTask> *waitTaskQueue; | |
475
4e0308d2ba73
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
26 |
955 | 27 QueueInfo<TaskQueue> *taskQueueImpl; |
28 QueueInfo<HTask> *htaskImpl; | |
619 | 29 |
546 | 30 SchedTask *schedTaskManager; |
637 | 31 Scheduler *scheduler; |
833
577bde5d0cec
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
830
diff
changeset
|
32 TaskManagerImpl *others; |
1479
163220e54cc0
remove hard code for TaskLog
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1468
diff
changeset
|
33 int _export_task_log; |
3 | 34 |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
35 /* constructor */ |
1149 | 36 TaskManagerImpl(int num = 0) ; |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
37 |
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
38 virtual ~TaskManagerImpl() { } |
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
39 |
3 | 40 /* functions */ |
109 | 41 // system |
1479
163220e54cc0
remove hard code for TaskLog
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1468
diff
changeset
|
42 virtual void init(int,int,int) = 0; |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
43 virtual void run() = 0; |
672 | 44 virtual void start_profile() = 0; |
45 virtual void show_profile() = 0; | |
1452 | 46 virtual void export_task_log(){} |
498
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
47 virtual void append_activeTask(HTaskPtr); |
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
48 virtual void append_waitTask(HTaskPtr); |
833
577bde5d0cec
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
830
diff
changeset
|
49 virtual void polling() = 0; |
1067 | 50 virtual void print_arch() = 0; |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
51 virtual void set_NDRange(void*) = 0; |
955 | 52 void check_task_finish(HTaskPtr task, QueueInfo<HTask> *wait_queue); |
53 void check_task_list_finish(SchedTask *s, TaskListPtr list, QueueInfo<HTask> *wait_queue); | |
109 | 54 |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
55 void systask_init(); |
109 | 56 |
57 // user | |
897
6bd218d3f643
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
58 virtual HTaskPtr create_task(int cmd,void *from); |
6bd218d3f643
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
59 virtual HTaskPtr create_task(int cmd, memaddr rbuf, long r_size, memaddr wbuf, long w_size,void *from); |
6bd218d3f643
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
60 virtual HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData,void *from); |
1465 | 61 virtual TaskListPtr createTaskList() = 0; |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
62 |
1436
42057124fb44
change to Singleton Pattern
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1429
diff
changeset
|
63 const char *get_task_name(int cmd); |
42057124fb44
change to Singleton Pattern
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1429
diff
changeset
|
64 const char *get_task_name(TaskPtr task); |
42057124fb44
change to Singleton Pattern
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1429
diff
changeset
|
65 const char *get_task_name(SimpleTaskPtr simpletask); |
42057124fb44
change to Singleton Pattern
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1429
diff
changeset
|
66 const char *get_task_name(SchedTaskBase *schedtask); |
42057124fb44
change to Singleton Pattern
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1429
diff
changeset
|
67 const char *get_task_name(HTaskPtr htask); |
42057124fb44
change to Singleton Pattern
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1429
diff
changeset
|
68 const char *get_task_name(HTaskPtr htask, int index); |
637 | 69 virtual void set_task_depend(HTaskPtr master, HTaskPtr slave); |
70 virtual void spawn_task(HTaskPtr); | |
71 virtual void set_task_cpu(HTaskPtr, CPU_TYPE); | |
1062
f994f5032299
add TaskManagerImpl::get_task_name()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
1057
diff
changeset
|
72 void set_taskList(HTaskPtr htask, QueueInfo<TaskList> * taskList); |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
73 |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
74 void free_htask(HTaskPtr htask) { |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
75 #if !defined(__SPU__) |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
76 if (htask->self) { |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
77 htask->flag.no_auto_free = 0; |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
78 return; |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
79 } |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
80 htaskImpl->free_(htask); |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
81 #endif |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
82 } |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
83 |
637 | 84 void* allocate(int size, int alignment) |
85 { | |
1169 | 86 |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
87 void *buff = 0; |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
88 if (size==0) return 0; |
666 | 89 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
90 buff = malloc(size); |
666 | 91 #else |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
92 posix_memalign(&buff, alignment, size); |
666 | 93 #endif |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
94 if (buff==0) |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
95 get_scheduler()->printf("Can't allocate memory\n"); |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
96 return buff; |
637 | 97 } |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
98 |
637 | 99 void* allocate(int size) |
100 { | |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
101 |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
102 void *buff = 0; |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
103 if (size==0) return 0; |
666 | 104 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
105 buff = malloc(size); |
666 | 106 #else |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
107 posix_memalign(&buff, DEFAULT_ALIGNMENT, size); |
666 | 108 #endif |
736 | 109 if (buff==0) |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
110 get_scheduler()->printf("Can't allocate memory\n"); |
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
111 return buff; |
637 | 112 } |
113 | |
114 Scheduler* get_scheduler() { return scheduler; } | |
115 void set_scheduler(Scheduler *s) { scheduler = s; } | |
1561
e8c9a7099bcc
add set NDRange param
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1543
diff
changeset
|
116 |
895
b662e9dd26b0
add alignment of classes in SPU
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
835
diff
changeset
|
117 } __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
1543 | 118 extern void error(const char* error_message); |
3 | 119 #endif |