Changed the interOperate to a global variable so that it is initialized from
authorChao Mei <chaomei2@illinois.edu>
Sat, 3 Mar 2012 21:14:53 +0000 (15:14 -0600)
committerChao Mei <chaomei2@illinois.edu>
Sat, 3 Mar 2012 21:14:53 +0000 (15:14 -0600)
CharmLibInit instead of from the machine layer. The code changes in
machine-common-core.c are also reduced.

src/arch/mpi/machine.c
src/arch/util/machine-common-core.c
src/ck-core/init.C
src/conv-core/convcore.c
src/conv-core/converse.h

index 61bd52f1f769e3481b407d562da4376a3c4a51e4..038a3d8dc9c1ff8e01b1aee066ef4cb7e9af66b3 100644 (file)
@@ -1319,7 +1319,7 @@ static void MachineInitForMPI(int *argc, char ***argv, int *numNodes, int *myNod
     }
 #endif
   
-    if(!CpvAccess(interOperate)) {
+    if(!CharmLibInterOperate) {
 #if CMK_MPI_INIT_THREAD
 #if CMK_SMP
     if (Cmi_smp_mode_setting == COMM_THREAD_SEND_RECV)
@@ -1340,7 +1340,7 @@ static void MachineInitForMPI(int *argc, char ***argv, int *numNodes, int *myNod
 
     largc = *argc;
     largv = *argv;
-    if(!CpvAccess(interOperate)) {
+    if(!CharmLibInterOperate) {
       MPI_Comm_size(MPI_COMM_WORLD, numNodes);
       MPI_Comm_rank(MPI_COMM_WORLD, myNodeID);
     }
@@ -1354,7 +1354,7 @@ static void MachineInitForMPI(int *argc, char ***argv, int *numNodes, int *myNod
 #endif
 
     MPI_Get_version(&ver, &subver);
-    if(!CpvAccess(interOperate)) {
+    if(!CharmLibInterOperate) {
       if (myNID == 0) {
         printf("Charm++> Running on MPI version: %d.%d\n", ver, subver);
         printf("Charm++> level of thread support used: %s (desired: %s)\n", thread_level_tostring(_thread_provided), thread_level_tostring(thread_level));
index 43a38bdcf7fbff687f9e9d74d1d2488dd356e679..3b9b3d0ba477a09d872b7f34180781967175f646 100644 (file)
@@ -603,10 +603,6 @@ void ConverseInit(int argc, char **argv, CmiStartFn fn, int usched, int initret)
         CmiAbort("+ppn cannot be used in non SMP version!\n");
 #endif
 
-    //initialize interOperate
-    CpvInitialize(int,interOperate);
-    CpvAccess(interOperate) = 1;
-
     /* Network progress function is used to poll the network when for
     messages. This flushes receive buffers on some  implementations*/
     networkProgressPeriod = NETWORK_PROGRESS_PERIOD_DEFAULT;
@@ -735,12 +731,13 @@ static void ConverseRunPE(int everReturn) {
        node barrier previously should take care of the node synchronization */
     _immediateReady = 1;
 
-    /* communication thread */
-    if(CpvAccess(interOperate)) {
-       /* Not considering SMP mode now */
+    if(CharmLibInterOperate) {
+       /* !!! Not considering SMP mode now */
+       /* TODO: make interoperability working in SMP!!! */
        Cmi_startfn(CmiGetArgc(CmiMyArgv), CmiMyArgv);
        CsdScheduler(-1);
     } else {
+      /* communication thread */
       if (CmiMyRank() == CmiMyNodeSize()) {
         Cmi_startfn(CmiGetArgc(CmiMyArgv), CmiMyArgv);
         while (1) CommunicationServerThread(5);
index f441468768840ef7d1422c2c7a1180b8bea5d842..ae88aad061af07477a4375946c224a8066b5a20f 100644 (file)
@@ -476,7 +476,7 @@ static void _exitHandler(envelope *env)
         return;
       }
       _exitStarted = 1;
-      if(!CpvAccess(interOperate)) {
+      if(!CharmLibInterOperate) {
         CkNumberHandler(_charmHandlerIdx,(CmiHandler)_discardHandler);
         CkNumberHandler(_bocHandlerIdx, (CmiHandler)_discardHandler);
       }
@@ -497,7 +497,7 @@ static void _exitHandler(envelope *env)
       }        
       break;
     case ReqStatMsg:
-    if(!CpvAccess(interOperate)) {
+    if(!CharmLibInterOperate) {
 #if (defined(_FAULT_MLOG_) || defined(_FAULT_CAUSAL_))
         _messageLoggingExit();
 #endif
@@ -529,7 +529,7 @@ static void _exitHandler(envelope *env)
       else
         CmiFree(env);
 //everyone exits here - there may be issues with leftover messages in the queue
-    if(CpvAccess(interOperate)) {
+    if(CharmLibInterOperate) {
            DEBUGF(("[%d] Calling converse exit \n",CkMyPe()));
       _exitStarted = 0;
       CpvAccess(charmLibExitFlag) = 1;
@@ -836,7 +836,7 @@ void CkExit(void)
   CmiSetHandler(env, _exitHandlerIdx);
   CmiSyncSendAndFree(0, env->getTotalsize(), (char *)env);
 
-  if(!CpvAccess(interOperate)) {
+  if(!CharmLibInterOperate) {
 #if ! CMK_BIGSIM_THREAD
     _TRACE_END_EXECUTE();
     //Wait for stats, which will call ConverseExit when finished:
@@ -1400,6 +1400,7 @@ void CharmLibInit(int peid, int numpes, int argc, char **argv){
     _Cmi_numnodes = numpes; 
     _Cmi_mynode = peid;
 
+    CharmLibInterOperate = 1;
     ConverseInit(argc, argv, (CmiStartFn)_initCharm, 1, 0);
     printf("node[%d]: called CharmLibInit with %d nodes\n", CmiMyPe(), CmiNumNodes()); 
 }
index 0c79cbf0f63fc055a2cc6fb65569cff1ed58965d..75f6ba329715a879fcda27f8246bed4132aad15d 100644 (file)
@@ -135,7 +135,7 @@ extern void CldModuleInit(char **);
 CpvDeclare(int,_curRestartPhase);
 static int CsdLocalMax = CSD_LOCAL_MAX_DEFAULT;
 
-CpvDeclare(int,interOperate);
+int CharmLibInterOperate = 0;
 CpvDeclare(int,charmLibExitFlag);
 
 CpvStaticDeclare(int, CmiMainHandlerIDP); /* Main handler for _CmiMultipleSend that is run on every node */
@@ -1794,7 +1794,8 @@ void CsdScheduleForever(void)
   int isIdle=0;
   SCHEDULE_TOP
   while (1) {
-    if(CpvAccess(interOperate)) {
+    /* The interoperation will cost this little overhead in scheduling */
+    if(CharmLibInterOperate) {
       if(CpvAccess(charmLibExitFlag)) {
         CpvAccess(charmLibExitFlag) = 0;
         break;
index 379d3e3fa3c703aaf5ca5dec742330c853c3d58b..f6f90f8a9e0254bbaa65ecf78f4e7f648e6edff4 100644 (file)
@@ -1901,7 +1901,10 @@ extern unsigned int CmiILog2(unsigned int);
 extern double CmiLog2(double);
 #endif
 
-CpvExtern(int,interOperate);
+/* CharmLibInterOperate should be a global variable as it will be
+ * set only once by MPI ranks respectively.
+ */
+extern int CharmLibInterOperate;
 CpvExtern(int,charmLibExitFlag);
 
 #endif /* CONVERSE_H */