Mercurial > hg > Game > Cerium
comparison TaskManager/Cell/spe/CellDmaManager.cc @ 675:daff9d9fd6a0 draft
fix
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Dec 2009 01:20:41 +0900 |
parents | 27fec8c70c9c |
children | fbccad536db1 |
comparison
equal
deleted
inserted
replaced
674:07351a5a51c9 | 675:daff9d9fd6a0 |
---|---|
36 { | 36 { |
37 (this->*start_dmawait_profile)(); | 37 (this->*start_dmawait_profile)(); |
38 mfc_write_tag_mask(1 << mask); | 38 mfc_write_tag_mask(1 << mask); |
39 mfc_write_tag_update_all(); | 39 mfc_write_tag_update_all(); |
40 mfc_read_tag_status(); | 40 mfc_read_tag_status(); |
41 (this->*end_dmawait_profile)(); | 41 (this->*end_dmawait_profile)(&global_wait_time); |
42 } | 42 } |
43 | 43 |
44 void CellDmaManager::mail_write(memaddr data) | 44 void CellDmaManager::mail_write(memaddr data) |
45 { | 45 { |
46 (this->*start_dmawait_profile)(); | 46 (this->*start_dmawait_profile)(); |
47 spu_write_out_mbox((uint32)data); | 47 spu_write_out_mbox((uint32)data); |
48 if (ABIBIT>32) { | 48 if (ABIBIT>32) { |
49 unsigned long data0 = (unsigned long)data; | 49 unsigned long data0 = (unsigned long)data; |
50 spu_write_out_mbox((uint32)(data0>>4)); | 50 spu_write_out_mbox((uint32)(data0>>4)); |
51 } | 51 } |
52 (this->*end_dmawait_profile)(); | 52 (this->*end_dmawait_profile)(&global_mail_time); |
53 } | 53 } |
54 | 54 |
55 memaddr CellDmaManager::mail_read() | 55 memaddr CellDmaManager::mail_read() |
56 { | 56 { |
57 (this->*start_dmawait_profile)(); | 57 (this->*start_dmawait_profile)(); |
58 memaddr data = (memaddr)spu_read_in_mbox(); | 58 memaddr data = (memaddr)spu_read_in_mbox(); |
59 if (ABIBIT>32) { | 59 if (ABIBIT>32) { |
60 data += (spu_read_in_mbox()<<4); | 60 data += (spu_read_in_mbox()<<4); |
61 } | 61 } |
62 (this->*end_dmawait_profile)(); | 62 (this->*end_dmawait_profile)(&global_mail_time); |
63 return data; | 63 return data; |
64 } | 64 } |
65 | 65 |
66 void CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) | 66 void CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask) |
67 { | 67 { |
107 global_busy_time += busy_time - wait_time; | 107 global_busy_time += busy_time - wait_time; |
108 spu_writech(SPU_WrDec, 0xffffffff); | 108 spu_writech(SPU_WrDec, 0xffffffff); |
109 } | 109 } |
110 | 110 |
111 void | 111 void |
112 CellDmaManager::do_end_dmawait_profile() | 112 CellDmaManager::do_end_dmawait_profile(long long *counter) |
113 { | 113 { |
114 wait_time = spu_readch(SPU_RdDec); | 114 wait_time = spu_readch(SPU_RdDec); |
115 global_wait_time += 0xffffffff - wait_time; | 115 *counter += 0xffffffff - wait_time; |
116 busy_time = wait_time; | 116 busy_time = wait_time; |
117 } | 117 } |
118 | 118 |
119 void CellDmaManager::null_start_dmawait_profile() {} | 119 void CellDmaManager::null_start_dmawait_profile() {} |
120 void CellDmaManager::null_end_dmawait_profile() {} | 120 void CellDmaManager::null_end_dmawait_profile() {} |
121 | 121 |
122 void | 122 void |
123 CellDmaManager::show_dma_wait(int cpu) | 123 CellDmaManager::show_dma_wait(int cpu) |
124 { | 124 { |
125 | 125 |
126 printf("spu%d: global_wait_time = %lld\n",cpu, global_wait_time); | 126 double r = ((double)global_busy_time)/((double)( |
127 printf("spu%d: global_busy_time = %lld\n",cpu, global_busy_time); | 127 global_busy_time+global_wait_time+global_mail_time |
128 printf("spu%d: busy_ratio = %g%%\n",cpu, | 128 ))*100.0); |
129 ((double)global_busy_time)/((double)(global_busy_time+global_wait_time))*100.0); | 129 printf("spu%d: busy_time = %lld",cpu, global_busy_time); |
130 printf(" wait_time = %lld", global_wait_time); | |
131 printf(" mail_time = %lld", global_mail_time); | |
132 printf(" busy_ratio = %g%%\n",r); | |
130 } | 133 } |
131 | 134 |
132 | 135 |
133 /* end */ | 136 /* end */ |