small changes
[IRC.git] / Robust / src / Runtime / bamboo / multicorecache.h
index 2c56825b779f680e8d3914f352782a293e65eb27..68c9f8ebe2fddce280911a78f3dce88970db7d9c 100644 (file)
@@ -1,23 +1,30 @@
 #ifndef BAMBOO_MULTICORE_CACHE_H
 #define BAMBOO_MULTICORE_CACHE_H
-
 #ifdef MULTICORE_GC
+#include "multicore.h"
+#include "multicoremem.h"
+#include "multicoregccompact.h"
+#include "multicoregarbage.h"
+
 #ifdef GC_CACHE_ADAPT
-#define GC_CACHE_SAMPLING_UNIT 100000000
-#define GC_TILE_TIMER_EVENT_SETTING 100000000  
-#define GC_NUM_SAMPLING 24
+// sampling unit to compute access frequency, this should be consistent all the
+// time.
+#define GC_CACHE_SAMPLING_UNIT 0x800000000 
+// freqeuency to trigger timer interrupt
+#define GC_TILE_TIMER_EVENT_SETTING 10000000  
 
+// data structure to record policy information for a page
 // should be consistent with multicoreruntime.h
 typedef union
 {
   unsigned int word;
   struct
   {
-    // policy type
-    unsigned int cache_mode   : 2;
-       // Reserved.
-    unsigned int __reserved_0 : 6;
-       // Location Override Target Y
+    // policy type, should be enough to accommodate all 4 possible polices
+    unsigned int cache_mode   : 3;
+    // Reserved.
+    unsigned int __reserved_0 : 5;
+    // Location Override Target Y
     unsigned int lotar_y      : 4;
     // Reserved.
     unsigned int __reserved_1 : 4;
@@ -28,12 +35,93 @@ typedef union
   };
 } bamboo_cache_policy_t;
 
-#define BAMBOO_CACHE_MODE_LOCAL 0
-#define BAMBOO_CACHE_MODE_HASH 1
-#define BAMBOO_CACHE_MODE_NONE 2
-#define BAMBOO_CACHE_MODE_COORDS 3
+#define BAMBOO_CACHE_MODE_LOCAL 1  // locally cached
+#define BAMBOO_CACHE_MODE_HASH 2   // hash-for-home
+#define BAMBOO_CACHE_MODE_NONE 3   // no caching
+#define BAMBOO_CACHE_MODE_COORDS 4 // cached on a specific core
+
+void cacheadapt_finish_compact(void *toptr);
+void cacheadapt_finish_src_page(void *srcptr, void *tostart, void *tofinish);
+void cacheadapt_finish_dst_page(void *origptr, void *tostart, void *toptr, unsigned int bytesneeded);
+void cacheAdapt_gc(bool isgccachestage);
+void cacheAdapt_master();
+void cacheAdapt_mutator();
+void cacheAdapt_phase_client();
+void cacheAdapt_phase_master();
+void gc_output_cache_sampling();
+void gc_output_cache_sampling_r();
+
+#ifdef GC_CACHE_SAMPLING
+// enable the timer interrupt
+#define CACHEADAPT_ENABLE_TIMER() \
+  { \
+    bamboo_tile_timer_set_next_event(GC_TILE_TIMER_EVENT_SETTING); \
+    bamboo_unmask_timer_intr(); \
+    bamboo_dtlb_sampling_process(); \
+  }
+#else
+#define CACHEADAPT_ENABLE_TIMER() 
+#endif
+// disable the TILE_TIMER interrupt
+#define CACHEADAPT_DISABLE_TIMER() bamboo_mask_timer_intr() 
+
+#ifdef GC_CACHE_SAMPLING
+// reset the sampling arrays
+#define CACHEADAPT_SAMPLING_RESET()  bamboo_dtlb_sampling_reset()
+#else // GC_CACHE_SAMPING
+#define CACHEADAPT_SAMPLING_RESET() 
+#endif
+
+#define CACHEADAPT_FINISH_SRC_PAGE(a,b,c) cacheadapt_finish_src_page(a,b,c);
+#define CACHEADAPT_FINISH_DST_PAGE(a,b,c,d) cacheadapt_finish_dst_page(a,b,c,d);
+#define CACHEADAPT_FINISH_COMPACT(a) cacheadapt_finish_compact(a);
 
+#define CACHEADAPT_GC(b) cacheAdapt_gc(b)
+#define CACHEADAPT_MASTER() cacheAdapt_master()
+#define CACHEADAPT_PHASE_CLIENT() cacheAdapt_phase_client()
+#define CACHEADAPT_PHASE_MASTER() cacheAdapt_phase_master()
+
+#ifdef GC_CACHE_ADAPT_OUTPUT
+#define CACHEADAPT_OUTPUT_CACHE_SAMPLING() gc_output_cache_sampling()
+#define CACHEADAPT_OUTPUT_CACHE_SAMPLING_R() gc_output_cache_sampling_r()
+#else
+#define CACHEADAPT_OUTPUT_CACHE_SAMPLING()
+#define CACHEADAPT_OUTPUT_CACHE_SAMPLING_R() 
+#endif
+
+#ifdef GC_CACHE_ADAPT_OUTPUT_POLICY
+#ifdef MGC_SPEC
+#define CACHEADAPT_OUTPUT_CACHE_POLICY() \
+  { \
+    if(gc_profile_flag) { \
+      bamboo_output_cache_policy(); \
+    } \
+  }
+#else // MGC_SPEC
+#define CACHEADAPT_OUTPUT_CACHE_POLICY() bamboo_output_cache_policy()
+#endif // MGC_SPEC
+#else // GC_CACHE_ADAPT_OUTPUT_POLICY
+#define CACHEADAPT_OUTPUT_CACHE_POLICY() 
+#endif // GC_CACHE_ADAPT_OUTPUT
+
+#else // GC_CACHE_ADAPT
+#define CACHEADAPT_ENABLE_TIMER() 
+#define CACHEADAPT_DISABLE_TIMER() 
+#define CACHEADAPT_SAMPING_RESET()
+#define CACHEADAPT_FINISH_SRC_PAGE(a,b,c)
+#define CACHEADAPT_FINISH_DST_PAGE(a,b,c,d)
+#define CACHEADAPT_FINISH_COMPACT(a)
+#define CACHEADAPT_GC(b)
+#define CACHEADAPT_MASTER()
+#define CACHEADAPT_PHASE_CLIENT() 
+#define CACHEADAPT_PHASE_MASTER() 
+#define CACHEADAPT_OUTPUT_CACHE_SAMPLING()
+#define CACHEADAPT_OUTPUT_CACHE_SAMPLING_R() 
+#define CACHEADAPT_OUTPUT_CACHE_POLICY() 
 #endif // GC_CACHE_ADAPT
+#else // MULTICORE_GC
+#define CACHEADAPT_ENABLE_TIMER() 
+#define CACHEADAPT_DISABLE_TIMER()
 #endif // MULTICORE_GC
 
-#endif
+#endif // BAMBOO_MULTICORE_CACHE_H