annotate TaskManager/Cell/spe/CellDmaManager.cc @ 1009:c67379f9d411

not yet....
author yutaka@localhost.localdomain
date Thu, 28 Oct 2010 13:00:51 +0900
parents 18a548c337cb
children 44b2c4cb539d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
6bc72fde6615 *** empty log message ***
gongo
parents: 59
diff changeset
1 #include <stdio.h>
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
2 #include <stdlib.h>
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
3 #include "CellDmaManager.h"
736
31d0a5baafdf cut printf
hiroki@localhost.localdomain
parents: 676
diff changeset
4 #include "Scheduler.h"
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
5
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
6
1001
61f33945f85d error fix.
root@henri.cr.ie.u-ryukyu.ac.jp
parents: 999
diff changeset
7 unsigned long long alloc_flag = 0;
61f33945f85d error fix.
root@henri.cr.ie.u-ryukyu.ac.jp
parents: 999
diff changeset
8
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
9 QueueInfo<MailQueue> *MailPool = new QueueInfo<MailQueue>() ;
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
10
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
11 /**
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
12 * DMA Load
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
13 *
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
14 * @param[in] buf Buffer of Load Data
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
15 * @param[in] addr Address of Load Data at Main Memory
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
16 * @param[in] size Size of Load Data
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
17 * @param[in] mask DMA tag
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
18 */
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
19 void CellDmaManager::dma_load(void *buf, memaddr addr, uint32 size, uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
20 {
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
21 if (size == 0) return ;
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
22 mfc_get((volatile void *)buf, addr, size, mask, 0, 0);
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
23
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
24
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
25 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
26
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
27 /**
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
28 * DMA Store
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
29 *
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
30 * @param[in] buf Buffer of Store Data at SPE
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
31 * @param[in] addr Address of Store Data at Main Memory
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
32 * @param[in] size Size of Store Data
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
33 * @param[in] mask DMA tag
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
34 */
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
35 void CellDmaManager::dma_store(void *buf, memaddr addr, uint32 size, uint32 mask)
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
36 {
88
504899860e66 *** empty log message ***
gongo
parents: 61
diff changeset
37 if (size == 0) return ;
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
38 mfc_put((volatile void *)buf, addr, size, mask, 0, 0);
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
39 }
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
40
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
41 void CellDmaManager::dma_wait(uint32 mask)
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
42 {
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
43
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
44 (this->*start_dmawait_profile)();
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
45 mfc_write_tag_mask(1 << mask);
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
46 mfc_write_tag_update_all();
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
47 mfc_read_tag_status();
871
ab3cd3aeacff fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 736
diff changeset
48 __asm__ __volatile__(" sync");
675
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 672
diff changeset
49 (this->*end_dmawait_profile)(&global_wait_time);
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
50
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
51 }
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
52
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
53 void CellDmaManager::dma_wait(uint32 mask, int cmd)
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
54 {
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
55
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
56 unsigned long long wait = 0;
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
57
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
58 (this->*start_dmawait_profile)();
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
59 mfc_write_tag_mask(1 << mask);
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
60 mfc_write_tag_update_all();
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
61 mfc_read_tag_status();
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
62 __asm__ __volatile__(" sync");
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
63 (this->*end_dmawait_profile)(&wait);
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
64
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
65 global_wait_time += wait;
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
66
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
67 if (cmd == TaskArray) {
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
68 task_array_load_time += wait;
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
69 } else if (cmd == TaskArray1) {
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
70 }
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
71
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
72 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
73
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
74 void CellDmaManager::mail_write(memaddr data)
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
75 {
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
76 (this->*start_dmawait_profile)();
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
77 spu_write_out_mbox((uint32)data);
871
ab3cd3aeacff fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 736
diff changeset
78 #if 0
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
79 if (ABIBIT>32) {
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
80 unsigned long data0 = (unsigned long)data;
871
ab3cd3aeacff fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 736
diff changeset
81 spu_write_out_mbox((uint32)(data0>>32));
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
82 }
871
ab3cd3aeacff fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 736
diff changeset
83 #endif
675
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 672
diff changeset
84 (this->*end_dmawait_profile)(&global_mail_time);
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
85 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
86
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
87 // mail を queue にしたみた。mailの書き出しの待ちあるのかわからないけど
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
88 //TASK_LIST_MAIL は仕事が最後に溜まってしまうけど、MailQueueなら出来る時にmailを書き出す
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
89 //ので多少は効果あるといいな。
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
90 void CellDmaManager::mail_write_queue(memaddr data)
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
91 {
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
92 (this->*start_dmawait_profile)();
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
93 if (0 != spu_readchcnt(SPU_WrOutMbox)) {
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
94 if (mail_queue->empty()) {
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
95 spu_write_out_mbox((uint32)data);
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
96 } else {
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
97 MailQueuePtr mail = mail_queue->poll();
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
98 if (mail == NULL) {
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
99 printf("あっるえぇー、おっかっしぃぞぉー\n");
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
100 }
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
101 spu_write_out_mbox((uint32)mail->data);
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
102 mail_queue->free_(mail);
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
103 mail = mail_queue->create();
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
104 mail->data = data;
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
105 mail_queue->addLast(mail);
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
106 }
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
107 } else {
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
108 MailQueuePtr mail = mail_queue->create();
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
109 mail->data = data;
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
110 mail_queue->addLast(mail);
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
111 }
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
112 (this->*end_dmawait_profile)(&global_mail_time);
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
113 }
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
114
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
115 // tasklist おわりに、MailQueue 全部を書き出す
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
116 void CellDmaManager::mail_write_finish_list(memaddr data)
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
117 {
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
118
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
119 (this->*start_dmawait_profile)();
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
120
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
121 while (!mail_queue->empty()) {
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
122 MailQueuePtr mail = mail_queue->poll();
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
123 spu_write_out_mbox((uint32)mail->data);
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
124 mail_queue->free_(mail);
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
125 }
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
126
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
127 spu_write_out_mbox((uint32)data);
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
128 //mail_queue.freePool();
1007
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
129
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
130 (this->*end_dmawait_profile)(&global_mail_time);
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
131 }
18a548c337cb add mail_queue
yutaka@localhost.localdomain
parents: 1001
diff changeset
132
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
133 memaddr CellDmaManager::mail_read()
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
134 {
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
135 (this->*start_dmawait_profile)();
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
136 memaddr data = (memaddr)spu_read_in_mbox();
871
ab3cd3aeacff fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 736
diff changeset
137 #if 0
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
138 if (ABIBIT>32) {
871
ab3cd3aeacff fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 736
diff changeset
139 data += (spu_read_in_mbox()<<32);
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
140 }
871
ab3cd3aeacff fix get segment dma tag zero problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 736
diff changeset
141 #endif
675
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 672
diff changeset
142 (this->*end_dmawait_profile)(&global_mail_time);
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
143 return data;
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
144 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
145
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
146 void CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask)
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
147 {
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
148 mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
149 mask, 0, 0);
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
150 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
151
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
152 void CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask)
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
153 {
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
154 mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
155 mask, 0, 0);
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
156 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
157
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
158
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
159 CellDmaManager::CellDmaManager()
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
160 {
1009
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
161
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
162 mail_queue = new QueueInfo<MailQueue>(MailPool);
c67379f9d411 not yet....
yutaka@localhost.localdomain
parents: 1007
diff changeset
163
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
164 stop_profile();
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
165 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
166 void
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
167 CellDmaManager::start_profile()
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
168 {
925
9da903858400 add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 924
diff changeset
169 global_busy_time = 0;
9da903858400 add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 924
diff changeset
170 global_mail_time = 0;
9da903858400 add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 924
diff changeset
171 global_wait_time = 0;
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
172 task_array_load_time = 0;
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
173 start_dmawait_profile = &CellDmaManager::do_start_dmawait_profile;
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
174 end_dmawait_profile = &CellDmaManager::do_end_dmawait_profile;
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
175
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
176 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
177
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
178 void
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
179 CellDmaManager::stop_profile()
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
180 {
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
181 start_dmawait_profile = &CellDmaManager::null_start_dmawait_profile;
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
182 end_dmawait_profile = &CellDmaManager::null_end_dmawait_profile;
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
183 }
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
184
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
185 /**
180
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
186 * DMA Wait
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
187 *
5cde66c926b4 いろいろ fix 。詳しくは TaskManager/Changelog、test_render/Changelog を
gongo@localhost.localdomain
parents: 109
diff changeset
188 * @param[in] mask Tag for Wait DMA process
59
16f9f6251f49 *** empty log message ***
gongo
parents:
diff changeset
189 */
273
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
190 void
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
191 CellDmaManager::do_start_dmawait_profile()
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
192 {
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
193 wait_time = spu_readch(SPU_RdDec);
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
194 global_busy_time += busy_time - wait_time;
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
195 spu_writech(SPU_WrDec, 0xffffffff);
999
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
196
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
197 // Measurement of mainMem_alloc
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
198 mainMemalloc_time += (alloc_busy_time - wait_time)*alloc_flag;
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
199 }
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
200
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
201
273
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 271
diff changeset
202 void
676
a06eef665c45 mail time
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 675
diff changeset
203 CellDmaManager::do_end_dmawait_profile(unsigned long long *counter)
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
204 {
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
205 wait_time = spu_readch(SPU_RdDec);
675
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 672
diff changeset
206 *counter += 0xffffffff - wait_time;
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
207 busy_time = wait_time;
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
208
999
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
209 // Measurement of mainMem_alloc
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
210 alloc_busy_time = wait_time;
242
8382f0f8c0b4 dma_wait
e065746@localhost.localdomain
parents: 240
diff changeset
211 }
239
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 180
diff changeset
212
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
213 void CellDmaManager::null_start_dmawait_profile() {}
676
a06eef665c45 mail time
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 675
diff changeset
214 void CellDmaManager::null_end_dmawait_profile(unsigned long long *counter) {}
672
3b6290c05f9f add profiling code
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 647
diff changeset
215
239
admin@mcbk.cr.ie.u-ryukyu.ac.jp
parents: 180
diff changeset
216 void
736
31d0a5baafdf cut printf
hiroki@localhost.localdomain
parents: 676
diff changeset
217 CellDmaManager::show_dma_wait(Scheduler *s, int cpu)
255
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
218 {
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
219
675
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 672
diff changeset
220 double r = ((double)global_busy_time)/((double)(
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 672
diff changeset
221 global_busy_time+global_wait_time+global_mail_time
676
a06eef665c45 mail time
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 675
diff changeset
222 ))*100.0;
924
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
223
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
224 double d = ((double)global_wait_time)/((double)(
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
225 global_busy_time+global_wait_time+global_mail_time
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
226 ))*100.0;
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
227
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
228 double m = ((double)global_mail_time)/((double)(
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
229 global_busy_time+global_wait_time+global_mail_time
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
230 ))*100.0;
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
231
736
31d0a5baafdf cut printf
hiroki@localhost.localdomain
parents: 676
diff changeset
232 s->printf("spu%d: busy_time = %lld"
924
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
233 " wait_time = %lld(%.3g%%), "
ad6903dd6419 show dma wait format
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 871
diff changeset
234 " mail_time = %lld(%.3g%%), "
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
235 " busy_ratio = %.3g%%"
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
236 " array_load_time = %lld\n"
999
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
237 " mainMem_alloc_time = %lld\n"
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
238 ,cpu, global_busy_time,
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
239 global_wait_time, d, global_mail_time, m, r,
999
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
240 task_array_load_time,
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
241 mainMemalloc_time);
925
9da903858400 add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 924
diff changeset
242
9da903858400 add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 924
diff changeset
243 global_busy_time = 0;
9da903858400 add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 924
diff changeset
244 global_mail_time = 0;
9da903858400 add profile in Redering Engine
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 924
diff changeset
245 global_wait_time = 0;
970
33630c6ff445 change pipeline and TaskArray fast
Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
parents: 925
diff changeset
246 task_array_load_time = 0;
999
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
247 mainMemalloc_time = 0;
451ddde9a16d Measurement of mainMem_alloc at waiting time. not done.
tkaito
parents: 970
diff changeset
248 alloc_flag = 0;
255
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
249 }
6bb8725e60ae show dma wait
tkaito@localhost.localdomain
parents: 242
diff changeset
250
604
7a41d2cb0a84 fix mail box size
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 364
diff changeset
251
7a41d2cb0a84 fix mail box size
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 364
diff changeset
252 /* end */