Mercurial > hg > Game > Cerium
annotate TaskManager/kernel/ppe/HTask.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 | 8ee897303cd0 |
children | b09f44c7c052 |
rev | line source |
---|---|
109 | 1 #ifndef INCLUDED_HTASK |
2 #define INCLUDED_HTASK | |
3 | |
307 | 4 #include "base.h" |
5 #include "types.h" | |
6 #include "Task.h" | |
1462
8cf62aea798f
HTask/TaskList fix (on going)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1425
diff
changeset
|
7 #include "TaskList.h" |
955 | 8 #include "TaskQueue.h" |
9 #include "QueueInfo.h" | |
1423
515a0f15b5d2
add to log taskdependency
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1412
diff
changeset
|
10 #include "TaskLog.h" |
1142
801d57ae1e29
cut compile CreatePolygonTask on spe side because not enough spe memory. We have to use code loading.
yutaka@localhost.localdomain
parents:
1110
diff
changeset
|
11 //#include <stdio.h> |
109 | 12 |
13 class TaskManagerImpl; | |
539 | 14 class SchedTask; |
15 | |
547 | 16 typedef void (*PostFunction)(SchedTask *s, void *read, void *write); |
109 | 17 |
956
197b7e19a345
unified queue worked on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
955
diff
changeset
|
18 extern QueueInfo<TaskQueue>* taskQueuePool; |
197b7e19a345
unified queue worked on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
955
diff
changeset
|
19 |
293 | 20 /*! |
21 @class | |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
22 |
293 | 23 @brief |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
24 |
293 | 25 Cerium の Task で、spawn() でキューに格納されて順次実行される。 |
26 cpu の指定があれば並列に実行される。 | |
27 特定の Task を待ち合わせる事が可能。 | |
28 Task の入出力は dma などで copy される。 | |
29 */ | |
688 | 30 |
31 #include "SimpleTask.h" | |
32 | |
641
0605f27ba7d9
Regression on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
634
diff
changeset
|
33 class HTask : public SimpleTask { |
109 | 34 public: |
35 BASE_NEW_DELETE(HTask); | |
36 | |
955 | 37 QueueInfo<TaskQueue> *wait_me; // List of task waiting for me |
38 QueueInfo<TaskQueue> *wait_i; // List of task for which I am waiting | |
546 | 39 PostFunction post_func; |
539 | 40 void *post_arg1; |
41 void *post_arg2; | |
109 | 42 CPU_TYPE cpu_type; |
43 TaskManagerImpl *mimpl; | |
1466 | 44 TaskPtr last; |
109 | 45 |
1479
163220e54cc0
remove hard code for TaskLog
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1474
diff
changeset
|
46 int export_task_log; |
1423
515a0f15b5d2
add to log taskdependency
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1412
diff
changeset
|
47 TaskLog *tasklog; |
515a0f15b5d2
add to log taskdependency
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
1412
diff
changeset
|
48 |
498
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
480
diff
changeset
|
49 HTask *waiter; |
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
480
diff
changeset
|
50 HTask *next; |
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
480
diff
changeset
|
51 HTask *prev; |
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
480
diff
changeset
|
52 |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
53 struct htask_flag { |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
54 unsigned no_auto_free:1; // bit 0 auto free flag (0 .. auto, 1 manual) |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
55 unsigned flip:1; // use read write buffers for all |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
56 unsigned nd_range:1; // openCL nd_range |
1580
806b4658ced6
add multi dimension
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1550
diff
changeset
|
57 unsigned dim_count:8; // count finished cpu on multi dim execution |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
58 } flag; |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
59 |
689
ecf63089f5bb
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
688
diff
changeset
|
60 void spawn(); |
1580
806b4658ced6
add multi dimension
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1550
diff
changeset
|
61 void iterate(long x); // spawn x tasks with paramtor0 as index |
1581
8ee897303cd0
fix multi_dimention
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1580
diff
changeset
|
62 void iterate(long x, long y); // spawn y tasks with paramtor1 as index |
8ee897303cd0
fix multi_dimention
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1580
diff
changeset
|
63 void iterate(long x, long y, long z); // spawn z tasks with paramtor2 as index |
293 | 64 void wait_for(HTask *); |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
65 void set_cpu(CPU_TYPE type); |
539 | 66 void set_post(PostFunction func, void *read, void *write); |
700 | 67 Task *create_task_array(int task_id, int num_task, int num_param, int num_inData, int num_outData); |
68 Task *next_task_array(int task_id, Task *t); | |
1425 | 69 Task *next_task_array(int id, Task *t, int param_count, int inData_count, int outData_count); |
1581
8ee897303cd0
fix multi_dimention
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
1580
diff
changeset
|
70 Task *get_nextTaskArea(Task* t, TaskList* tl); |
700 | 71 void spawn_task_array(Task *t); |
703 | 72 |
955 | 73 HTask *init(int cmd, memaddr rbuf, int rs, memaddr wbuf, int ws) { |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
74 init(cmd); |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
75 set_input(rbuf, rs); |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
76 set_output(wbuf, ws); |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
77 return this; |
955 | 78 } |
714 | 79 |
956
197b7e19a345
unified queue worked on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
955
diff
changeset
|
80 void initOnce() { |
197b7e19a345
unified queue worked on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
955
diff
changeset
|
81 wait_me = new QueueInfo<TaskQueue>(taskQueuePool); |
197b7e19a345
unified queue worked on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
955
diff
changeset
|
82 wait_i = new QueueInfo<TaskQueue>(taskQueuePool); |
197b7e19a345
unified queue worked on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
955
diff
changeset
|
83 } |
197b7e19a345
unified queue worked on Mac OS X
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
955
diff
changeset
|
84 |
958 | 85 void freeOnce() { |
86 delete wait_me; | |
87 delete wait_i; | |
88 } | |
89 | |
713
97adb3fe85c6
remove SIMPLE_TASK conditional
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
703
diff
changeset
|
90 private: |
703 | 91 |
92 // compatibility | |
93 public: // functions | |
94 void set_inData_t(int index, memaddr addr, int size) { | |
949 | 95 #ifdef EARLY_TOUCH |
96 if ((unsigned long)addr&0xf) { | |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
97 printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
98 command, index, (unsigned long)addr, size); |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
99 } |
949 | 100 char *p = (char *)addr; char b = *p; |
101 p = (char *)(addr+size-1); b += *p; | |
102 #endif | |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
103 Task *t = ((TaskList*)rbuf)->tasks; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
104 t->set_inData_t(index, addr,size); |
703 | 105 } |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
106 void set_outData_t(int index, memaddr addr, int size) { |
949 | 107 #ifdef EARLY_TOUCH |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
108 if ((unsigned long)addr&0xf) { |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
109 printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
110 command, index, (unsigned long)addr, size); |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
111 } |
949 | 112 char *p = (char *)addr; char b = *p; |
113 p = (char *)(addr+size-1); b += *p; | |
114 #endif | |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
115 Task *t = ((TaskList*)rbuf)->tasks; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
116 t->set_outData_t(index, addr,size); |
703 | 117 } |
118 void set_param_t(int index, memaddr param) { | |
1474 | 119 Task *t = ((TaskList*)rbuf)->tasks; |
120 t->set_param_t(index, param); | |
703 | 121 } |
122 | |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
123 void no_auto_free() { |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
124 flag.no_auto_free = 1; |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
125 } |
954 | 126 void auto_free() { |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
127 flag.no_auto_free = 0; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
128 } |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
129 |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
130 void flip() { |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
131 flag.flip = 1; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
132 } |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
133 void no_flip() { |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
134 flag.flip = 0; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
135 } |
1550 | 136 void nd_range() { |
1548
614a3f62c881
add set work item size function
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1506
diff
changeset
|
137 flag.nd_range = 1; |
614a3f62c881
add set work item size function
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1506
diff
changeset
|
138 } |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
139 |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
140 htask_flag get_flag(){ |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
141 return flag; |
954 | 142 } |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
143 |
955 | 144 void init() { |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
145 next = prev = NULL; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
146 waiter = NULL; |
955 | 147 } |
714 | 148 |
955 | 149 void init(int cmd) { |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
150 command = cmd; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
151 flag.no_auto_free = 0; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
152 flag.flip = 0; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
153 flag.nd_range = 0; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
154 self = (memaddr) this; |
714 | 155 |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
156 post_func = NULL; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
157 mimpl = NULL; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
158 cpu_type = CPU_PPE; |
1089 | 159 |
1506
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
160 post_arg1 = NULL; |
a7895ab4d0e3
add flip flag and NDRange flag
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1479
diff
changeset
|
161 post_arg2 = NULL; |
714 | 162 } |
703 | 163 #define set_param(index,param) set_param_t(index, (memaddr) (param)) |
164 | |
895
b662e9dd26b0
add alignment of classes in SPU
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
788
diff
changeset
|
165 } __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
109 | 166 |
167 typedef HTask* HTaskPtr; | |
168 | |
169 #endif |