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 */