remove sampling for policy1&2, tmp solution
[IRC.git] / Robust / src / Runtime / bamboo / multicoremsg.c
index 15c1ee8cffde0fb27475da0a67d040fe3a514057..43b335c23ea5da4ed039a3ae9f9559b64092c1d1 100644 (file)
@@ -9,6 +9,9 @@
 #include "gcqueue.h"
 #include "markbit.h"
 #endif
+#ifdef PERFCOUNT
+#include "bme_perf_counter.h"
+#endif
 
 int msgsizearray[] = {
   0, //MSGSTART,
@@ -31,9 +34,15 @@ int msgsizearray[] = {
   1, //TERMINATE,             // 0xDf
   3, //MEMREQUEST,            // 0xE0
   3, //MEMRESPONSE,           // 0xE1
-#ifdef MULTICORE_GC
+#ifdef PERFCOUNT
+  1,
+  1,
+#endif
+#if defined(MULTICORE_GC)||defined(PMC_GC)
   1, //GCINVOKE
   1, //GCSTARTPRE,            // 0xE2
+#endif
+#ifdef MULTICORE_GC
   1, //GCSTARTINIT,           // 0xE3
   1, //GCSTART,               // 0xE4
   2, //GCSTARTCOMPACT,        // 0xE5
@@ -54,7 +63,7 @@ int msgsizearray[] = {
   1, //GCGRANTBLOCK,  
   -1, //GCLOBJINFO,            // 0xF2
 #ifdef GC_PROFILE
-  4, //GCPROFILES,            // 0xF3
+  3, //GCPROFILES,            // 0xF3
 #endif // GC_PROFILE
 #ifdef GC_CACHE_ADAPT
   1, //GCSTARTCACHEPOLICY     // 0xF4
@@ -295,8 +304,7 @@ void processmsg_profileoutput_I() {
   stall = true;
   totalexetime = msgdata[msgdataindex];
   MSG_INDEXINC_I();
-#ifdef RT_TEST
-#else
+#if !defined(RT_TEST)
   outputProfileData();
 #endif
   // cache the msg first
@@ -345,14 +353,13 @@ void processmsg_statusreport_I() {
 
 void processmsg_terminate_I() {
   disruntimedata();
-#ifdef MULTICORE_GC
-#ifdef GC_CACHE_ADAPT
+#if defined(MULTICORE_GC)&&defined(GC_CACHE_ADAPT)&&defined(GC_CACHE_SAMPLING)&&defined(GC_CACHE_ADAPT_POLICY4)
   bamboo_mask_timer_intr(); // disable the TILE_TIMER interrupt
-#endif
 #endif
   BAMBOO_EXIT_APP(0);
 }
 
+#ifndef PMC_GC
 void processmsg_memrequest_I() {
   int data1 = msgdata[msgdataindex];
   MSG_INDEXINC_I();
@@ -411,10 +418,13 @@ void processmsg_memresponse_I() {
   }
 #endif
 }
+#endif //ifndef PMCGC
 
-#ifdef MULTICORE_GC
+
+#if defined(MULTICORE_GC)||defined(PMC_GC)
 void processmsg_gcinvoke_I() {
   BAMBOO_ASSERT(BAMBOO_NUM_OF_CORE==STARTUPCORE);
+#ifdef MULTICORE_GC
   if(!gc_status_info.gcprocessing && !gcflag) {
     gcflag = true;
     gcprecheck = true;
@@ -423,6 +433,11 @@ void processmsg_gcinvoke_I() {
       gcnumsendobjs[0][i] = 0;
       gcnumreceiveobjs[0][i] = 0;
     }
+#endif
+#ifdef PMC_GC
+  if(!gcflag) {
+    gcflag = true;
+#endif
     for(int i = 0; i < NUMCORES4GC; i++) {
       if(i != STARTUPCORE) {
         if(BAMBOO_CHECK_SEND_MODE()) {
@@ -439,7 +454,8 @@ void processmsg_gcstartpre_I() {
   // the first time to be informed to start gc
   gcflag = true;
 }
-
+#endif
+#ifdef MULTICORE_GC
 void processmsg_gcstartinit_I() {
   gc_status_info.gcphase = INITPHASE;
 }
@@ -677,14 +693,11 @@ void processmsg_gcprofiles_I() {
   MSG_INDEXINC_I();
   int data2 = msgdata[msgdataindex];
   MSG_INDEXINC_I();
-  int data3 = msgdata[msgdataindex];
-  MSG_INDEXINC_I();
 #ifdef MGC_SPEC
   if(gc_profile_flag) {
 #endif
-    gc_num_obj += data1;
-    gc_num_liveobj += data2;
-    gc_num_forwardobj += data3;
+    gc_num_liveobj += data1;
+    gc_num_forwardobj += data2;
 #ifdef MGC_SPEC
   }
 #endif
@@ -899,7 +912,7 @@ processmsg:
       processmsg_terminate_I();
       break;
     } 
-
+#ifndef PMC_GC
     case MEMREQUEST: {
       processmsg_memrequest_I();
       break;
@@ -909,8 +922,23 @@ processmsg:
       processmsg_memresponse_I();
       break;
     }
-
-#ifdef MULTICORE_GC
+#endif
+#ifdef PERFCOUNT
+    case MSGPERFCOUNT: {
+      profile_stop();
+      if(BAMBOO_CHECK_SEND_MODE()) {
+       cache_msg_1_I(STARTUPCORE, MSGPERFRESPONSE);
+      } else {
+       send_msg_1_I(STARTUPCORE, MSGPERFRESPONSE);
+      }
+      break;
+    }
+    case MSGPERFRESPONSE: {
+      coreperfcount--;
+      break;
+    }
+#endif
+#if defined(MULTICORE_GC)||defined(PMC_GC)
     // GC msgs
     case GCINVOKE: {
       processmsg_gcinvoke_I();
@@ -921,7 +949,8 @@ processmsg:
       processmsg_gcstartpre_I();
       break;
     }
-       
+#endif
+#ifdef MULTICORE_GC
     case GCSTARTINIT: {
       processmsg_gcstartinit_I();
       break;