Mercurial > hg > Game > Cerium
annotate TaskManager/Cell/spe/CellDmaManager.cc @ 1213:a49c02dffe6f draft
DMA connector reogranization
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 22 Jul 2011 13:25:30 +0900 |
parents | 801d57ae1e29 |
children | 2a4ba6366394 |
rev | line source |
---|---|
1142
801d57ae1e29
cut compile CreatePolygonTask on spe side because not enough spe memory. We have to use code loading.
yutaka@localhost.localdomain
parents:
1125
diff
changeset
|
1 //#include <stdio.h> |
88 | 2 #include <stdlib.h> |
59 | 3 #include "CellDmaManager.h" |
736 | 4 #include "Scheduler.h" |
672 | 5 |
6 | |
1001 | 7 unsigned long long alloc_flag = 0; |
1009 | 8 |
180
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
9 /** |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
10 * DMA Load |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
11 * |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
12 * @param[in] buf Buffer of Load Data |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
13 * @param[in] addr Address of Load Data at Main Memory |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
14 * @param[in] size Size of Load Data |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
15 * @param[in] mask DMA tag |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
16 */ |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
17 void *CellDmaManager::dma_load(Scheduler *s, void *buf, memaddr addr, uint32 size, uint32 mask) |
59 | 18 { |
1091 | 19 |
1090
c5797afaaff1
fix getTapestry return index. debug bus error
yutaka@localhost.localdomain
parents:
1071
diff
changeset
|
20 if ((unsigned long)addr&0xf) { |
1142
801d57ae1e29
cut compile CreatePolygonTask on spe side because not enough spe memory. We have to use code loading.
yutaka@localhost.localdomain
parents:
1125
diff
changeset
|
21 //s->printf("dma_load is not aligned. addr = 0x%lx, size = %d\n", |
801d57ae1e29
cut compile CreatePolygonTask on spe side because not enough spe memory. We have to use code loading.
yutaka@localhost.localdomain
parents:
1125
diff
changeset
|
22 // (unsigned long)addr, size); |
1090
c5797afaaff1
fix getTapestry return index. debug bus error
yutaka@localhost.localdomain
parents:
1071
diff
changeset
|
23 return ; |
1091 | 24 } |
25 | |
88 | 26 if (size == 0) return ; |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
27 if (s) buf = s->allocate(size); |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
28 |
180
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
29 mfc_get((volatile void *)buf, addr, size, mask, 0, 0); |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
30 return buf; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
31 } |
970
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
32 |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
33 void * |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
34 CellDmaManager::get_writebuf(Scheduler *s,memaddr addr, uint32 size) |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
35 { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
36 void *b = s->allocaet(size); |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
37 return b; |
59 | 38 } |
39 | |
180
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
40 /** |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
41 * DMA Store |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
42 * |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
43 * @param[in] buf Buffer of Store Data at SPE |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
44 * @param[in] addr Address of Store Data at Main Memory |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
45 * @param[in] size Size of Store Data |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
46 * @param[in] mask DMA tag |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
47 */ |
672 | 48 void CellDmaManager::dma_store(void *buf, memaddr addr, uint32 size, uint32 mask) |
59 | 49 { |
88 | 50 if (size == 0) return ; |
180
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
51 mfc_put((volatile void *)buf, addr, size, mask, 0, 0); |
59 | 52 } |
53 | |
672 | 54 void CellDmaManager::dma_wait(uint32 mask) |
55 { | |
970
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
56 |
672 | 57 (this->*start_dmawait_profile)(); |
58 mfc_write_tag_mask(1 << mask); | |
59 mfc_write_tag_update_all(); | |
60 mfc_read_tag_status(); | |
871
d30617ef4b20
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
736
diff
changeset
|
61 __asm__ __volatile__(" sync"); |
675 | 62 (this->*end_dmawait_profile)(&global_wait_time); |
970
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
63 |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
64 } |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
65 |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
66 void CellDmaManager::dma_wait(uint32 mask, int cmd) |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
67 { |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
68 |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
69 unsigned long long wait = 0; |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
70 |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
71 (this->*start_dmawait_profile)(); |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
72 mfc_write_tag_mask(1 << mask); |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
73 mfc_write_tag_update_all(); |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
74 mfc_read_tag_status(); |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
75 __asm__ __volatile__(" sync"); |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
76 (this->*end_dmawait_profile)(&wait); |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
77 |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
78 global_wait_time += wait; |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
79 |
672 | 80 } |
81 | |
82 void CellDmaManager::mail_write(memaddr data) | |
83 { | |
84 (this->*start_dmawait_profile)(); | |
85 spu_write_out_mbox((uint32)data); | |
871
d30617ef4b20
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
736
diff
changeset
|
86 #if 0 |
672 | 87 if (ABIBIT>32) { |
88 unsigned long data0 = (unsigned long)data; | |
871
d30617ef4b20
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
736
diff
changeset
|
89 spu_write_out_mbox((uint32)(data0>>32)); |
672 | 90 } |
871
d30617ef4b20
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
736
diff
changeset
|
91 #endif |
675 | 92 (this->*end_dmawait_profile)(&global_mail_time); |
672 | 93 } |
94 | |
1007 | 95 // mail を queue にしたみた。mailの書き出しの待ちあるのかわからないけど |
96 //TASK_LIST_MAIL は仕事が最後に溜まってしまうけど、MailQueueなら出来る時にmailを書き出す | |
97 //ので多少は効果あるといいな。 | |
98 void CellDmaManager::mail_write_queue(memaddr data) | |
99 { | |
1124 | 100 |
101 | |
102 | |
103 unsigned long long wait = 0; | |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
104 |
1009 | 105 if (0 != spu_readchcnt(SPU_WrOutMbox)) { |
1021 | 106 if (mail_queue->count()) { |
1124 | 107 (this->*start_dmawait_profile)(); |
1007 | 108 spu_write_out_mbox((uint32)data); |
1124 | 109 (this->*end_dmawait_profile)(&wait); |
110 mail_write_time += wait; | |
111 global_wait_time += wait; | |
1007 | 112 } else { |
1021 | 113 |
114 //mail_queue から poll する | |
1124 | 115 (this->*start_dmawait_profile)(); |
1021 | 116 spu_write_out_mbox((uint32)mail_queue->recv()); |
1124 | 117 (this->*end_dmawait_profile)(&wait); |
118 mail_write_time += wait; | |
119 global_wait_time += wait; | |
1021 | 120 //mail_queue に加える |
121 mail_queue->send(data); | |
122 | |
1007 | 123 } |
124 } else { | |
1021 | 125 |
126 mail_queue->send(data); | |
127 | |
1007 | 128 } |
1124 | 129 |
1007 | 130 } |
131 | |
1125 | 132 // tasklist がもうない場合に、MailQueue 全部を書き出す |
1007 | 133 void CellDmaManager::mail_write_finish_list(memaddr data) |
134 { | |
135 | |
1124 | 136 unsigned long long wait = 0; |
1007 | 137 |
1021 | 138 while (mail_queue->count()) { |
1124 | 139 (this->*start_dmawait_profile)(); |
140 spu_write_out_mbox((uint32)mail_queue->recv()); | |
141 (this->*end_dmawait_profile)(&wait); | |
1021 | 142 |
1124 | 143 global_mail_time += wait; |
144 finish_mail_write_time += wait; | |
1021 | 145 |
1007 | 146 } |
147 | |
1124 | 148 (this->*start_dmawait_profile)(); |
1007 | 149 spu_write_out_mbox((uint32)data); |
1124 | 150 (this->*end_dmawait_profile)(&wait); |
1007 | 151 |
1124 | 152 global_mail_time += wait; |
153 finish_mail_write_time += wait; | |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
154 |
1007 | 155 } |
156 | |
672 | 157 memaddr CellDmaManager::mail_read() |
158 { | |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
159 |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
160 |
1124 | 161 unsigned long long wait = 0; |
162 | |
672 | 163 (this->*start_dmawait_profile)(); |
164 memaddr data = (memaddr)spu_read_in_mbox(); | |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
165 |
871
d30617ef4b20
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
736
diff
changeset
|
166 #if 0 |
672 | 167 if (ABIBIT>32) { |
871
d30617ef4b20
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
736
diff
changeset
|
168 data += (spu_read_in_mbox()<<32); |
672 | 169 } |
871
d30617ef4b20
fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
736
diff
changeset
|
170 #endif |
1124 | 171 (this->*end_dmawait_profile)(&wait); |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
172 |
1124 | 173 global_mail_time += wait; |
174 mail_read_time += wait; | |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
175 |
672 | 176 return data; |
177 } | |
178 | |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
179 memaddr CellDmaManager::task_list_mail_read() |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
180 { |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
181 |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
182 unsigned long long wait = 0; |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
183 |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
184 (this->*start_dmawait_profile)(); |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
185 memaddr data = (memaddr)spu_read_in_mbox(); |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
186 (this->*end_dmawait_profile)(&wait); |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
187 |
1123 | 188 |
1124 | 189 task_list_mail_read_time += wait; |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
190 global_mail_time += wait; |
1123 | 191 task_list_read_count += 1; |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
192 |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
193 return data; |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
194 } |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
195 |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
196 |
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
197 |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
198 void *CellDmaManager::dma_loadList(Scheduler *s, ListDataPtr list, void *buff, uint32 mask) |
672 | 199 { |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
200 buff = s->allocate(list->size); |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
201 |
672 | 202 mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, |
203 mask, 0, 0); | |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
204 return buff; |
672 | 205 } |
206 | |
207 void CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask) | |
208 { | |
209 mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length, | |
210 mask, 0, 0); | |
211 } | |
212 | |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
213 void * |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
214 CellDmaManager::get_writebuf(Scheduler *s,ListDataPtr addr, uint32 size) |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
215 { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
216 void *b = s->allocate(addr->size); |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
217 return b; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
218 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
219 |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
220 |
672 | 221 |
222 CellDmaManager::CellDmaManager() | |
223 { | |
1009 | 224 |
1021 | 225 mail_queue = new MailManager(); |
672 | 226 stop_profile(); |
227 } | |
228 void | |
229 CellDmaManager::start_profile() | |
230 { | |
925
292bb8c79cdb
add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
924
diff
changeset
|
231 global_busy_time = 0; |
292bb8c79cdb
add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
924
diff
changeset
|
232 global_mail_time = 0; |
292bb8c79cdb
add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
924
diff
changeset
|
233 global_wait_time = 0; |
1124 | 234 task_list_mail_read_time = 0; |
235 finish_mail_write_time = 0; | |
1123 | 236 task_list_read_count = 0; |
1124 | 237 |
238 mail_read_time = 0; | |
239 mail_write_time = 0; | |
240 | |
672 | 241 start_dmawait_profile = &CellDmaManager::do_start_dmawait_profile; |
970
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
242 end_dmawait_profile = &CellDmaManager::do_end_dmawait_profile; |
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
243 |
672 | 244 } |
245 | |
246 void | |
247 CellDmaManager::stop_profile() | |
248 { | |
249 start_dmawait_profile = &CellDmaManager::null_start_dmawait_profile; | |
250 end_dmawait_profile = &CellDmaManager::null_end_dmawait_profile; | |
251 } | |
252 | |
59 | 253 /** |
180
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
254 * DMA Wait |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
255 * |
e3b7776b1420
いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents:
109
diff
changeset
|
256 * @param[in] mask Tag for Wait DMA process |
59 | 257 */ |
275 | 258 void |
672 | 259 CellDmaManager::do_start_dmawait_profile() |
242 | 260 { |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
261 |
242 | 262 wait_time = spu_readch(SPU_RdDec); |
263 global_busy_time += busy_time - wait_time; | |
1071 | 264 //printf("busy_time = %d, wait_time = %d\n", busy_time, wait_time); |
242 | 265 spu_writech(SPU_WrDec, 0xffffffff); |
999
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
266 |
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
267 // Measurement of mainMem_alloc |
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
268 mainMemalloc_time += (alloc_busy_time - wait_time)*alloc_flag; |
242 | 269 } |
270 | |
970
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
271 |
275 | 272 void |
676 | 273 CellDmaManager::do_end_dmawait_profile(unsigned long long *counter) |
242 | 274 { |
275 wait_time = spu_readch(SPU_RdDec); | |
1053 | 276 //printf("wait_time = %d", wait_time); |
675 | 277 *counter += 0xffffffff - wait_time; |
242 | 278 busy_time = wait_time; |
970
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
279 |
999
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
280 // Measurement of mainMem_alloc |
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
281 alloc_busy_time = wait_time; |
242 | 282 } |
239 | 283 |
672 | 284 void CellDmaManager::null_start_dmawait_profile() {} |
676 | 285 void CellDmaManager::null_end_dmawait_profile(unsigned long long *counter) {} |
672 | 286 |
239 | 287 void |
736 | 288 CellDmaManager::show_dma_wait(Scheduler *s, int cpu) |
255 | 289 { |
290 | |
675 | 291 double r = ((double)global_busy_time)/((double)( |
292 global_busy_time+global_wait_time+global_mail_time | |
676 | 293 ))*100.0; |
924 | 294 |
295 double d = ((double)global_wait_time)/((double)( | |
296 global_busy_time+global_wait_time+global_mail_time | |
297 ))*100.0; | |
298 | |
299 double m = ((double)global_mail_time)/((double)( | |
300 global_busy_time+global_wait_time+global_mail_time | |
301 ))*100.0; | |
302 | |
1124 | 303 double tr = ((double)task_list_mail_read_time)/((double)( |
304 global_busy_time+global_wait_time+global_mail_time | |
305 ))*100.0; | |
306 | |
307 double tw = ((double)finish_mail_write_time)/((double)( | |
308 global_busy_time+global_wait_time+global_mail_time | |
309 ))*100.0; | |
310 | |
311 double mr = ((double)mail_read_time)/((double)( | |
312 global_busy_time+global_wait_time+global_mail_time | |
313 ))*100.0; | |
314 | |
315 double mw = ((double)mail_write_time)/((double)( | |
1025 | 316 global_busy_time+global_wait_time+global_mail_time |
317 ))*100.0; | |
318 | |
319 | |
1124 | 320 s->printf("spu%d:\n busy_time = %lld" |
924 | 321 " wait_time = %lld(%.3g%%), " |
322 " mail_time = %lld(%.3g%%), " | |
1124 | 323 " mail_read_time = %lld(%.3g%%), " |
324 " mail_write_time = %lld(%.3g%%),\n" | |
325 " task_list_mail_read_time = %lld(%.3g%%), " | |
326 " finish_mail_write_time = %lld(%.3g%%) " | |
327 " busy_ratio = %.3g%%, \n" | |
1123 | 328 " task_list_read_count = %d" |
329 " average_tasklist_mail_time = %lld" | |
999
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
330 " mainMem_alloc_time = %lld\n" |
970
1a4849b2acad
change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents:
925
diff
changeset
|
331 ,cpu, global_busy_time, |
1024
cf0ad93028e9
add task list mail time profile.
yutaka@localhost.localdomain
parents:
1023
diff
changeset
|
332 global_wait_time, d, global_mail_time, m, |
1124 | 333 mail_read_time, mr, |
334 mail_write_time, mw, | |
335 task_list_mail_read_time, tr, | |
336 finish_mail_write_time, tw, | |
337 r, | |
1123 | 338 task_list_read_count, |
1124 | 339 task_list_mail_read_time / task_list_read_count, |
999
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
340 mainMemalloc_time); |
925
292bb8c79cdb
add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
924
diff
changeset
|
341 |
292bb8c79cdb
add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
924
diff
changeset
|
342 global_busy_time = 0; |
292bb8c79cdb
add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
924
diff
changeset
|
343 global_mail_time = 0; |
292bb8c79cdb
add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
924
diff
changeset
|
344 global_wait_time = 0; |
1124 | 345 |
346 mail_read_time = 0; | |
347 mail_write_time = 0; | |
348 | |
349 task_list_mail_read_time = 0; | |
350 finish_mail_write_time = 0; | |
351 task_list_read_count = 0; | |
352 | |
999
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
353 mainMemalloc_time = 0; |
aed8b3ca5537
Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents:
970
diff
changeset
|
354 alloc_flag = 0; |
255 | 355 } |
356 | |
1213
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
357 uint32 |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
358 CellDmaManager::get_tag() |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
359 { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
360 static int tag = 16; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
361 tag ++; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
362 tag &= 0x0f; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
363 return tag+16; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
364 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
365 |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
366 /** |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
367 * DMA buffer offset in rbuf |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
368 */ |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
369 void |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
370 CellDmaManager::bound(ListData *list) |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
371 { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
372 ListElement *elm = list->element; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
373 int *bound = list->bound; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
374 int offset=0; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
375 for(int i=0;i<list->length;i++) { |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
376 bound[i] = offset; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
377 offset += elm[i].size; |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
378 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
379 } |
a49c02dffe6f
DMA connector reogranization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
1142
diff
changeset
|
380 |
604 | 381 |
382 /* end */ |