call PumpDatagramConnection only at idle time to avoid performance degradation.
authorGengbin Zheng <gzheng@illinois.edu>
Sat, 31 Dec 2011 17:23:28 +0000 (09:23 -0800)
committerGengbin Zheng <gzheng@illinois.edu>
Sat, 31 Dec 2011 17:23:28 +0000 (09:23 -0800)
src/arch/gemini_gni-crayxe/conv-mach.h
src/arch/gemini_gni/machine.c
src/arch/util/machine-common-core.c

index 0b400dce48683e5262a2f665ea31ef9b9d61be26..ecb81725a4bbdb0e1058f50bc9a9f859a52b2899 100644 (file)
 #define CMK_SIGNAL_USE_SIGACTION                           0
 #define CMK_SIGNAL_USE_SIGACTION_WITH_RESTART              0
 
-/* specifies whether the CthCpv variables should be defined as Cpv (0) or
-   directly as normal c variables (1) */
-#define CMK_THREADS_REQUIRE_NO_CPV                         0
-
 /* decide which is the default implementation of the threads (see threads.c)
    Only one of the following can be 1. If none of them is selected, qthreads
    will be used as default. This default can be overwritten at compile time
index 2d8235cb7b20cc7b419edda5f2ceda673c3d6a09..7c2390d6b5ba7db4e47817234d2986217698a2f6 100644 (file)
@@ -1073,8 +1073,9 @@ CmiCommHandle LrtsSendFunc(int destNode, int size, char *msg, int mode)
 }
 
 /* Idle-state related functions: called in non-smp mode */
+/* not used */
 void CmiNotifyIdleForGemini(void) {
-    AdvanceCommunication();
+    AdvanceCommunication(1);
     //LrtsAdvanceCommunication();
 }
 
@@ -1085,7 +1086,7 @@ void LrtsPostCommonInit(int everReturn)
     CcdCallOnConditionKeep(CcdPROCESSOR_BEGIN_IDLE,(CcdVoidFn)CmiNotifyBeginIdle,(void *)s);
     CcdCallOnConditionKeep(CcdPROCESSOR_STILL_IDLE,(CcdVoidFn)CmiNotifyStillIdle,(void *)s);
 #else
-    CcdCallOnConditionKeep(CcdPROCESSOR_STILL_IDLE,(CcdVoidFn)CmiNotifyIdleForGemini,NULL);
+    CcdCallOnConditionKeep(CcdPROCESSOR_STILL_IDLE,(CcdVoidFn)CmiNotifyStillIdle,NULL);
 #endif
 
 }
@@ -1773,7 +1774,7 @@ static int SendBufferMsg()
     return done;
 }
 
-void LrtsAdvanceCommunication()
+void LrtsAdvanceCommunication(int whileidle)
 {
     /*  Receive Msg first */
 #if 0
@@ -1781,7 +1782,7 @@ void LrtsAdvanceCommunication()
     printf("Calling Lrts Pump Msg PE:%d\n", myrank);
 #endif
     if(mysize == 1) return;
-    if (useDynamicSMSG)
+    if (whileidle && useDynamicSMSG)
         PumpDatagramConnection();
     PumpNetworkSmsg();
    // printf("Calling Lrts Pump RdmaMsg PE:%d\n", CmiMyPe());
index 2c84b09e4153cbe85ab7fdf44e4a018506a56425..019ff54f255f67d5b2f02b5f26c994244cf8edad 100644 (file)
@@ -244,7 +244,7 @@ void ConverseInit(int argc, char **argv, CmiStartFn fn, int usched, int initret)
 static void ConverseRunPE(int everReturn);
 
 /* Functions regarding machine running on every proc */
-static void AdvanceCommunication();
+static void AdvanceCommunication(int whenidle);
 static void CommunicationServer(int sleepTime);
 static void CommunicationServerThread(int sleepTime);
 void ConverseExit(void);
@@ -727,14 +727,14 @@ static void ConverseRunPE(int everReturn) {
 /* ##### End of Functions Related with Machine Startup ##### */
 
 /* ##### Beginning of Functions Related with Machine Running ##### */
-static INLINE_KEYWORD void AdvanceCommunication() {
+static INLINE_KEYWORD void AdvanceCommunication(int whenidle) {
     int doProcessBcast = 1;
 
 #if CMK_USE_PXSHM
     CommunicationServerPxshm();
 #endif
 
-    LrtsAdvanceCommunication();
+    LrtsAdvanceCommunication(whenidle);
 
 #if CMK_OFFLOAD_BCAST_PROCESS
 #if CMK_SMP_NO_COMMTHD
@@ -757,7 +757,7 @@ static INLINE_KEYWORD void AdvanceCommunication() {
 
 static void CommunicationServer(int sleepTime) {
 #if CMK_SMP
-    AdvanceCommunication();
+    AdvanceCommunication(0);
 
     if (commThdExit == CmiMyNodeSize()) {
         MACHSTATE(2, "CommunicationServer exiting {");
@@ -844,7 +844,7 @@ void *CmiGetNonLocal(void) {
     msg = PCQueuePop(cs->recv);
 #if !CMK_SMP
     if (!msg) {
-       AdvanceCommunication();
+       AdvanceCommunication(0);
        msg = PCQueuePop(cs->recv);
     }
 #else
@@ -892,7 +892,7 @@ static void CmiNotifyBeginIdle(CmiIdleState *s) {
 static void CmiNotifyStillIdle(CmiIdleState *s) {
     MACHSTATE1(2,"still idle (%d) begin {",CmiMyPe())
 #if !CMK_SMP
-    AdvanceCommunication();
+    AdvanceCommunication(1);
 #else
     LrtsPostNonLocal();
 
@@ -916,7 +916,7 @@ static void CmiNotifyStillIdle(CmiIdleState *s) {
 
 /* usually called in non-smp mode */
 void CmiNotifyIdle(void) {
-    AdvanceCommunication();
+    AdvanceCommunication(1);
     CmiYield();
 }