performance counter tweaks...
authorbdemsky <bdemsky>
Mon, 11 Jul 2011 10:32:28 +0000 (10:32 +0000)
committerbdemsky <bdemsky>
Mon, 11 Jul 2011 10:32:28 +0000 (10:32 +0000)
Robust/src/Runtime/bamboo/multicoremsg.c
Robust/src/Runtime/bamboo/multicoremsg.h
Robust/src/Runtime/bamboo/multicoreruntime.c

index 64b5aae155daa2f71a07d85adfc3dc593fa0fadd..e30e96c4109b68818cdaa665ba1aaf8c122a7b31 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,6 +34,10 @@ int msgsizearray[] = {
   1, //TERMINATE,             // 0xDf
   3, //MEMREQUEST,            // 0xE0
   3, //MEMRESPONSE,           // 0xE1
+#ifdef PERFCOUNT
+  1,
+  1,
+#endif
 #if defined(MULTICORE_GC)||defined(PMC_GC)
   1, //GCINVOKE
   1, //GCSTARTPRE,            // 0xE2
@@ -921,6 +928,21 @@ processmsg:
       break;
     }
 #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: {
index c64f8b2ee98490b65fd29700cf9022c33304af20..70e0e6a31c261db6ee70ccdd70c6a2547587bcb2 100644 (file)
@@ -172,6 +172,10 @@ typedef enum {
   TERMINATE,             // 0xDf
   MEMREQUEST,            // 0xE0
   MEMRESPONSE,           // 0xE1
+#ifdef PERFCOUNT
+  MSGPERFCOUNT,
+  MSGPERFRESPONSE,
+#endif
 #if defined(MULTICORE_GC)||defined(PMC_GC)
   GCINVOKE,              // 0xE2
   GCSTARTPRE,            // 0xE3
index c4f8918f562b3959034c21c9ff813bac51730971..1751a7a34a8e82623fa1fc63c6bdfbf4e64a7c71 100644 (file)
@@ -797,7 +797,12 @@ void run(int argc, char** argv) {
   pmc_onceInit();
 #endif
 #ifdef PERFCOUNT
-  profile_init(_LOCAL_DRD_CNT,_LOCAL_WR_CNT, _REMOTE_DRD_CNT, _REMOTE_WR_CNT);
+  if (BAMBOO_NUM_OF_CORE==STARTUPCORE)
+    profile_init(_LOCAL_DRD_CNT,_LOCAL_WR_CNT, _REMOTE_DRD_CNT, _REMOTE_WR_CNT);
+  else {
+    int offcore=4*(BAMBOO_NUM_OF_CORE-1);
+    profile_init(validevents[(offcore)%87], validevents[(offcore+1)%87], validevents[(offcore+2)%87], validevents[(offcore+3)%87]);
+  }
 #endif
   if (BAMBOO_NUM_OF_CORE==STARTUPCORE) {
     numconfirm=NUMCORES-1;