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;
+
 }