Mercurial > hg > Game > Cerium
annotate TaskManager/kernel/ppe/Task.h @ 2054:2e7a6f40672f draft
add param(4) in FileMapReduce.cc
author | masa |
---|---|
date | Fri, 29 Jan 2016 15:56:28 +0900 |
parents | ac16a57f5dd7 |
children |
rev | line source |
---|---|
276 | 1 #ifndef INCLUDED_TASK |
2 #define INCLUDED_TASK | |
3 | |
307 | 4 #include "base.h" |
5 #include "types.h" | |
6 #include "ListData.h" | |
625
94d82f2c842f
64bit mode worked on Mac OS X.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
616
diff
changeset
|
7 #include "SimpleTask.h" |
276 | 8 |
688 | 9 class SchedTask; |
736 | 10 class Scheduler; |
688 | 11 |
684 | 12 class Task { |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
13 public: // variables |
689
ecf63089f5bb
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
688
diff
changeset
|
14 int task_size; |
688 | 15 int command; |
696 | 16 int param_count; |
17 int inData_count; | |
18 int outData_count; | |
689
ecf63089f5bb
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
688
diff
changeset
|
19 int inData_offset; |
ecf63089f5bb
Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
688
diff
changeset
|
20 int outData_offset; |
686 | 21 void *data[] __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
684 | 22 |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
23 public: // functions |
687
25afcd4ae380
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
686
diff
changeset
|
24 |
736 | 25 void print(Scheduler *s); |
687
25afcd4ae380
test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
686
diff
changeset
|
26 |
700 | 27 memaddr *param(int index) { |
1498
8034e0212281
run twice, but not return. dead lock?
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1480
diff
changeset
|
28 memaddr p = (memaddr)data + sizeof(memaddr)*index; |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
29 return (memaddr *)p; |
695 | 30 } |
31 | |
700 | 32 ListElement *inData(int index) { |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
33 memaddr p = (memaddr)data + inData_offset; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
34 p += sizeof(ListElement)*index; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
35 return (ListElement*)p; |
698
72b2da99e875
no compile error for Task Array
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
697
diff
changeset
|
36 } |
696 | 37 |
700 | 38 ListElement *outData(int index) { |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
39 memaddr p = (memaddr)data + outData_offset; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
40 p += sizeof(ListElement)* index; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
41 return (ListElement*)p; |
686 | 42 } |
43 | |
696 | 44 static int calc_size(int params, int ins, int outs) { |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
45 int size = round_up16(sizeof(Task)) |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
46 + round_up16(sizeof(memaddr)*params) |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
47 + round_up16(sizeof(ListElement)*ins) |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
48 + round_up16(sizeof(ListElement)*outs); |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
49 return size; |
688 | 50 } |
51 | |
700 | 52 void init(int task_id, int params, int ins, int outs) { |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
53 set_task_id(task_id); |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
54 param_count = params; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
55 inData_count = ins; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
56 outData_count = outs; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
57 inData_offset = round_up16(sizeof(memaddr)*params); |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
58 outData_offset = round_up16(inData_offset+sizeof(ListElement)*ins); |
2000 | 59 task_size = calc_size(params, ins, outs); |
700 | 60 } |
61 | |
62 int size() { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
63 return task_size; |
700 | 64 } |
65 | |
66 int inData_total_size() { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
67 int size = 0; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
68 ListElement *in= inData(0); |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
69 for(int i=0; i< inData_count; i++) { |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
70 size += in[i].size; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
71 } |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
72 return size; |
700 | 73 } |
74 int outData_total_size() { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
75 int size = 0; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
76 ListElement *out= outData(0); |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
77 for(int i=0; i< outData_count; i++) { |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
78 size += out[i].size; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
79 } |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
80 return size; |
700 | 81 } |
82 | |
83 void set_inData_t( int index, memaddr addr, int size) { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
84 ListElement *list = inData(index); |
949 | 85 #ifdef EARLY_TOUCH |
86 if ((unsigned long)addr&0xf) { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
87 printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
88 command, index, (unsigned long)addr, size); |
949 | 89 } |
90 char *p = (char *)addr; int b = *p; | |
91 p = (char *)(addr+size-1); b += *p; | |
92 #endif | |
1480
f2512fb94223
GpuTaskManager no compile error
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
970
diff
changeset
|
93 |
700 | 94 #ifdef __CERIUM_CELL__ |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
95 list->addr = (uint32)addr; |
700 | 96 #else |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
97 list->addr = addr; |
700 | 98 #endif |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
99 list->size = size; |
700 | 100 } |
101 | |
102 void set_outData_t(int index, memaddr addr, int size) { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
103 ListElement *list = outData(index); |
949 | 104 #ifdef EARLY_TOUCH |
105 if ((unsigned long)addr&0xf) { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
106 printf("inData is not aligned. command = %d, index = %d, addr = 0x%lx, size = %d\n", |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
107 command, index, (unsigned long)addr, size); |
949 | 108 } |
109 char *p = (char *)addr; int b = *p; | |
110 p = (char *)(addr+size-1); b += *p; | |
111 #endif | |
700 | 112 #ifdef __CERIUM_CELL__ |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
113 list->addr = (uint32)addr; |
700 | 114 #else |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
115 list->addr = addr; |
700 | 116 #endif |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
117 list->size = size; |
700 | 118 } |
119 void set_task_id(int id) { command = id; } | |
120 void set_param_t(int index, memaddr param) { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
121 memaddr *p = (memaddr*)this->param(index); |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
122 *p = param; |
700 | 123 } |
124 | |
690 | 125 Task * next() |
126 { | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
127 char *p = (char*)this; |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
128 p += size(); |
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
129 return (Task*)p; |
690 | 130 } |
131 | |
132 | |
684 | 133 #define set_param(index,param) set_param_t(index, (memaddr) (param)) |
134 | |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
135 #define set_inData(index, addr, size) \ |
684 | 136 set_inData_t(index, (memaddr)(addr), (size)); |
1551
57317332f6ef
create fft example
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
1498
diff
changeset
|
137 #define set_outData(index, addr, size) \ |
684 | 138 set_outData_t(index, (memaddr)(addr), (size)); |
895
b662e9dd26b0
add alignment of classes in SPU
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
787
diff
changeset
|
139 } __attribute__ ((aligned (DEFAULT_ALIGNMENT))) ; |
276 | 140 |
141 typedef Task* TaskPtr; | |
142 | |
143 #endif |