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