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