netlrts: more bug fixes in handling output
authorNikhil Jain <nikhil.jain@acm.org>
Wed, 30 Oct 2013 16:59:31 +0000 (11:59 -0500)
committerNikhil Jain <nikhil@illinois.edu>
Thu, 31 Oct 2013 17:39:19 +0000 (12:39 -0500)
netlrts: tie SIGIO to write port; linux does not seem to be liking
attaching things to read port in netlrts

netlrts: changes for performance

netlrts: performance enhancement - lock sharing is not a problem anymore

examples/charm++/jacobi2d/jacobi2d.C
src/arch/netlrts/Makefile.machine
src/arch/netlrts/machine.c
src/arch/util/machine-common-core.c
src/conv-core/convcore.c

index 5ae795ecafd9c99db761e2480fe8e7bde8f89421..27ff7da5640c3f7e2416ee9d7edc38df0846c0d1 100644 (file)
@@ -75,10 +75,7 @@ public:
     void report_error(int row, int col, float error) {
       //CkPrintf("[main] (%d, %d) error=%g\n", row, col, error);
 
-       if ((receive_count == num_chares)
-           ||
-           (fabs(error) > max_error)
-           ) {
+       if ((receive_count == num_chares) || (fabs(error) > max_error)) {
            max_error = fabs(error);
        }
 
index 99e8846950d2cf180201535e0aa98a5e11069d97..07e5984c5010a6730f9d07853e6044b96b5c74a9 100644 (file)
@@ -9,7 +9,7 @@ charm++: hybridAPI
 .PHONY: hybridAPI
 endif
 
-$(L)/libconv-cplus-n.a: machine.c machine-dgram.c machine-tcp.c machine-eth.c machine.h machine-smp.c conv-onesided.c immediate.c machine-recover.c machine-commthd-util.c $(CVHEADERS)
+$(L)/libconv-cplus-n.a: machine.c machine-common-core.c machine-dgram.c machine-tcp.c machine-eth.c machine.h machine-smp.c conv-onesided.c immediate.c machine-recover.c machine-commthd-util.c $(CVHEADERS)
 
 charmrun: sockRoutines.c sockRoutines.h ccs-server.c ccs-server.h sockRoutines-seq.o $(L)/libck.a $(CVLIBS)
         cd charmrun-src ; $(MAKE) OPTS='$(OPTS) -Wno-error' -j1 
index afe05813f3ee8a5f0c0f628e75484e3c4d61d352..eebc0893fbf0e2733fa9dba4723e60d3f7915502 100644 (file)
@@ -411,7 +411,6 @@ static void machine_atexit_check(void)
 {
   if (!machine_initiated_shutdown)
     CmiAbort("unexpected call to exit by user program. Must use CkExit, not exit!");
-  printf("Program finished.\n");
 #if 0 /*Wait for the user to press any key (for Win32 debugging)*/
   fgetc(stdin);
 #endif
@@ -586,7 +585,7 @@ void CmiEnableAsyncIO(int fd)
     CmiError("setting socket owner: %s\n", strerror(errno)) ;
     exit(1);
   }
-  if ( fcntl(fd, F_SETFL, FASYNC) < 0 ) {
+  if ( fcntl(fd, F_SETFL, O_ASYNC) < 0 ) {
     CmiError("setting socket async: %s\n", strerror(errno)) ;
     exit(1);
   }
@@ -1164,7 +1163,7 @@ void CmiPrintf(const char *fmt, ...)
   CpdSystemEnter();
   {
   va_list p; va_start(p, fmt);
-  if (Cmi_charmrun_fd!=-1)
+  if (Cmi_charmrun_fd!=-1 && _writeToStdout)
     InternalPrintf(fmt, p);
   else
     vfprintf(stdout,fmt,p);
@@ -1243,8 +1242,8 @@ static void CmiStdoutInit(void) {
                        {perror("building stdio redirection socketpair"); exit(1);}
 #endif
                readStdout[i]=pair[0]; /*We get the read end of pipe*/
-               //if (-1==dup2(pair[1],srcFd)) {perror("dup2 redirection pipe"); exit(1);}
-               if (-1==dup2(srcFd,pair[1])) {perror("dup2 redirection pipe"); exit(1);}
+               if (-1==dup2(pair[1],srcFd)) {perror("dup2 redirection pipe"); exit(1);}
+               //if (-1==dup2(srcFd,pair[1])) {perror("dup2 redirection pipe"); exit(1);}
                
 #if 0 /*Keep writes from blocking.  This just drops excess output, which is bad.*/
                CmiEnableNonblockingIO(srcFd);
@@ -1253,7 +1252,7 @@ static void CmiStdoutInit(void) {
                 if (Cmi_asyncio)
                {
   /*No communication thread-- get a SIGIO on each write(), which keeps the buffer clean*/
-                       CmiEnableAsyncIO(readStdout[i]);
+                       CmiEnableAsyncIO(pair[1]);
                }
 #endif
        }
@@ -1630,16 +1629,16 @@ void LrtsPostNonLocal() {}
     
 #if CMK_MACHINE_PROGRESS_DEFINED
 void CmiMachineProgressImpl(){
-  CommunicationServerNet(5, COMM_SERVER_FROM_SMP);
+  CommunicationServerNet(0, COMM_SERVER_FROM_SMP);
 }
 #endif
 
 void LrtsAdvanceCommunication(int whileidle)
 {
 #if CMK_SMP
-  CommunicationServerNet(5, COMM_SERVER_FROM_SMP);
+  CommunicationServerNet(0, COMM_SERVER_FROM_SMP);
 #else
-  CommunicationServerNet(5, COMM_SERVER_FROM_SMP);
+  CommunicationServerNet(0, COMM_SERVER_FROM_WORKER);
 #endif
 
 }
@@ -1659,9 +1658,9 @@ void LrtsBarrier()
   int numnodes = CmiNumNodesGlobal();
   static int barrier_phase = 0;
 
-  if (Cmi_charmrun_fd == -1) return 0;                // standalone
+  if (Cmi_charmrun_fd == -1) return;                // standalone
   if (numnodes == 1) {
-    return 0;
+    return;
   }
 
   ctrl_sendone_locking("barrier",NULL,0,NULL,0);
@@ -1714,6 +1713,18 @@ int CmiBarrierZero()
 
 void LrtsPreCommonInit(int everReturn)
 {
+#if !CMK_SMP
+#if !CMK_ASYNC_NOT_NEEDED
+  if (Cmi_asyncio)
+  {
+    CmiSignal(SIGIO, 0, 0, CommunicationInterrupt);
+    if (!Cmi_netpoll) {
+      if (dataskt!=-1) CmiEnableAsyncIO(dataskt);
+      if (Cmi_charmrun_fd!=-1) CmiEnableAsyncIO(Cmi_charmrun_fd);
+    }
+  }
+#endif
+#endif
 }
 
 void LrtsPostCommonInit(int everReturn)
index 3acb43973a7abae136276e4a312fe91162e9d4de..7a1bcf9bc12bd649affeb2c97e581a657c0078f2 100644 (file)
@@ -145,6 +145,7 @@ int _Cmi_mype_global;
 int _Cmi_numpes_global;
 int _Cmi_mynode_global;
 int _Cmi_numnodes_global;
+static int _writeToStdout = 1;
 
 // Node state structure, local information for the partition
 int               _Cmi_mynodesize;/* Number of processors in my address space */
@@ -1092,6 +1093,7 @@ if (  MSG_STATISTIC)
             strerror(errno));
         CmiAbort("Error redirecting stdout to file.");
       }
+      _writeToStdout = 0;
       free(stdoutpath);
     }
 
index 8f0b560c8226a221cfe081a88fd7d3aa140e9ec6..c6fd72c7ba1268c4704a19cff1cc522f52002ddc 100644 (file)
@@ -3768,7 +3768,7 @@ void CmiPrintf(const char *format, ...)
     CmiFlush(stdout);
   }
   va_end(args);
-#if CMK_CCS_AVAILABLE
+#if CMK_CCS_AVAILABLE && CMK_CMIPRINTF_IS_A_BUILTIN
   if (CpvAccess(cmiArgDebugFlag)) {
     va_start(args,format);
     print_node0(format, args);
@@ -3788,7 +3788,7 @@ void CmiError(const char *format, ...)
   vfprintf(stderr,format, args);
   CmiFlush(stderr);  /* stderr is always flushed */
   va_end(args);
-#if CMK_CCS_AVAILABLE
+#if CMK_CCS_AVAILABLE && CMK_CMIPRINTF_IS_A_BUILTIN
   if (CpvAccess(cmiArgDebugFlag)) {
     va_start(args,format);
     print_node0(format, args);