Mercurial > hg > Members > kono > Cerium
diff TaskManager/Cell/spe/CellDmaManager.cc @ 970:33630c6ff445
change pipeline and TaskArray fast
author | Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 26 Aug 2010 20:38:06 +0900 |
parents | 9da903858400 |
children | 451ddde9a16d |
line wrap: on
line diff
--- a/TaskManager/Cell/spe/CellDmaManager.cc Mon Aug 09 00:09:00 2010 +0900 +++ b/TaskManager/Cell/spe/CellDmaManager.cc Thu Aug 26 20:38:06 2010 +0900 @@ -16,6 +16,8 @@ { if (size == 0) return ; mfc_get((volatile void *)buf, addr, size, mask, 0, 0); + + } /** @@ -34,12 +36,35 @@ void CellDmaManager::dma_wait(uint32 mask) { + (this->*start_dmawait_profile)(); mfc_write_tag_mask(1 << mask); mfc_write_tag_update_all(); mfc_read_tag_status(); __asm__ __volatile__(" sync"); (this->*end_dmawait_profile)(&global_wait_time); + +} + +void CellDmaManager::dma_wait(uint32 mask, int cmd) +{ + + unsigned long long wait = 0; + + (this->*start_dmawait_profile)(); + mfc_write_tag_mask(1 << mask); + mfc_write_tag_update_all(); + mfc_read_tag_status(); + __asm__ __volatile__(" sync"); + (this->*end_dmawait_profile)(&wait); + + global_wait_time += wait; + + if (cmd == TaskArray) { + task_array_load_time += wait; + } else if (cmd == TaskArray1) { + } + } void CellDmaManager::mail_write(memaddr data) @@ -92,8 +117,10 @@ global_busy_time = 0; global_mail_time = 0; global_wait_time = 0; + task_array_load_time = 0; start_dmawait_profile = &CellDmaManager::do_start_dmawait_profile; - end_dmawait_profile = &CellDmaManager::do_end_dmawait_profile; + end_dmawait_profile = &CellDmaManager::do_end_dmawait_profile; + } void @@ -116,12 +143,14 @@ spu_writech(SPU_WrDec, 0xffffffff); } + void CellDmaManager::do_end_dmawait_profile(unsigned long long *counter) { wait_time = spu_readch(SPU_RdDec); *counter += 0xffffffff - wait_time; busy_time = wait_time; + } void CellDmaManager::null_start_dmawait_profile() {} @@ -146,12 +175,17 @@ s->printf("spu%d: busy_time = %lld" " wait_time = %lld(%.3g%%), " " mail_time = %lld(%.3g%%), " - " busy_ratio = %.3g%%\n", cpu, global_busy_time, - global_wait_time, d, global_mail_time, m, r); + " busy_ratio = %.3g%%" + " array_load_time = %lld\n" + ,cpu, global_busy_time, + global_wait_time, d, global_mail_time, m, r, + task_array_load_time); global_busy_time = 0; global_mail_time = 0; global_wait_time = 0; + task_array_load_time = 0; + }