diff TaskManager/Cell/spe/CellDmaManager.cc @ 672:3b6290c05f9f

add profiling code
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 05 Dec 2009 20:20:08 +0900
parents 7c9ded1ea750
children 45ddb28c592d
line wrap: on
line diff
--- a/TaskManager/Cell/spe/CellDmaManager.cc	Sat Dec 05 17:26:58 2009 +0900
+++ b/TaskManager/Cell/spe/CellDmaManager.cc	Sat Dec 05 20:20:08 2009 +0900
@@ -2,6 +2,8 @@
 #include <stdlib.h>
 #include "CellDmaManager.h"
 
+
+
 /**
  * DMA Load
  *
@@ -10,8 +12,7 @@
  * @param[in] size Size of Load Data
  * @param[in] mask DMA tag
 */
-void
-CellDmaManager::dma_load(void *buf, memaddr addr, uint32 size, uint32 mask)
+void CellDmaManager::dma_load(void *buf, memaddr addr, uint32 size, uint32 mask)
 {
     if (size == 0) return ;
     mfc_get((volatile void *)buf, addr, size, mask, 0, 0);
@@ -25,20 +26,82 @@
  * @param[in] size Size of Store Data
  * @param[in] mask DMA tag
 */
-void
-CellDmaManager::dma_store(void *buf, memaddr addr, uint32 size, uint32 mask)
+void CellDmaManager::dma_store(void *buf, memaddr addr, uint32 size, uint32 mask)
 {
     if (size == 0) return ;
     mfc_put((volatile void *)buf, addr, size, mask, 0, 0);
 }
 
+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();
+    (this->*end_dmawait_profile)();
+}
+
+void CellDmaManager::mail_write(memaddr data)
+{
+    (this->*start_dmawait_profile)();
+    spu_write_out_mbox((uint32)data);
+    if (ABIBIT>32) {
+	unsigned long data0 = (unsigned long)data;
+	spu_write_out_mbox((uint32)(data0>>4));
+    }
+    (this->*end_dmawait_profile)();
+}
+
+memaddr CellDmaManager::mail_read()
+{
+    (this->*start_dmawait_profile)();
+    memaddr data = (memaddr)spu_read_in_mbox();
+    if (ABIBIT>32) {
+	data += (spu_read_in_mbox()<<4);
+    }
+    (this->*end_dmawait_profile)();
+    return data;
+}
+
+void CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask)
+{
+    mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
+	     mask, 0, 0);
+}
+
+void CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask)
+{
+    mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
+	     mask, 0, 0);
+}
+
+
+CellDmaManager::CellDmaManager() 
+{
+    stop_profile();
+}
+
+void
+CellDmaManager::start_profile()
+{
+    start_dmawait_profile =  &CellDmaManager::do_start_dmawait_profile;
+    end_dmawait_profile =  &CellDmaManager::do_end_dmawait_profile;
+}
+
+void
+CellDmaManager::stop_profile()
+{
+    start_dmawait_profile =  &CellDmaManager::null_start_dmawait_profile;
+    end_dmawait_profile =  &CellDmaManager::null_end_dmawait_profile;
+}
+
 /**
  * DMA Wait
  *
  * @param[in] mask Tag for Wait DMA process
  */
 void
-CellDmaManager::start_dmawait_profile()
+CellDmaManager::do_start_dmawait_profile()
 {
     wait_time = spu_readch(SPU_RdDec); 
     global_busy_time += busy_time - wait_time;
@@ -46,13 +109,16 @@
 }
 
 void
-CellDmaManager::end_dmawait_profile()
+CellDmaManager::do_end_dmawait_profile()
 {
     wait_time = spu_readch(SPU_RdDec);
     global_wait_time += 0xffffffff - wait_time;
     busy_time = wait_time;
 }
 
+void CellDmaManager::null_start_dmawait_profile() {}
+void CellDmaManager::null_end_dmawait_profile() {}
+
 void
 CellDmaManager::show_dma_wait(int cpu)
 {
@@ -63,52 +129,5 @@
 	 ((double)global_busy_time)/((double)(global_busy_time+global_wait_time))*100.0);
 }
 
-void
-CellDmaManager::dma_wait(uint32 mask)
-{
-#ifdef SPU_PROFILE
-    start_dmawait_profile();
-#endif
-    mfc_write_tag_mask(1 << mask);
-    mfc_write_tag_update_all();
-    mfc_read_tag_status();
-#ifdef SPU_PROFILE
-    end_dmawait_profile();
-#endif
-}
-
-void
-CellDmaManager::mail_write(memaddr data)
-{
-    spu_write_out_mbox((uint32)data);
-    if (ABIBIT>32) {
-	unsigned long data0 = (unsigned long)data;
-	spu_write_out_mbox((uint32)(data0>>4));
-    }
-}
-
-memaddr
-CellDmaManager::mail_read()
-{
-    memaddr data = (memaddr)spu_read_in_mbox();
-    if (ABIBIT>32) {
-	data += (spu_read_in_mbox()<<4);
-    }
-    return data;
-}
-
-void
-CellDmaManager::dma_loadList(ListDataPtr list, void *buff, uint32 mask)
-{
-    mfc_getl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
-	     mask, 0, 0);
-}
-
-void
-CellDmaManager::dma_storeList(ListDataPtr list, void *buff, uint32 mask)
-{
-    mfc_putl(buff, 0, list->element, sizeof(mfc_list_element_t)*list->length,
-	     mask, 0, 0);
-}
 
 /* end */