add another SMP assertion
[ghc-hetmet.git] / ghc / rts / RtsFlags.c
index e880c1d..f24912f 100644 (file)
@@ -152,7 +152,7 @@ void initRtsFlagsDefaults(void)
     RtsFlags.GcFlags.maxStkSize                = (8 * 1024 * 1024) / sizeof(W_);
     RtsFlags.GcFlags.initialStkSize    = 1024 / sizeof(W_);
 
-    RtsFlags.GcFlags.minAllocAreaSize   = (256 * 1024)        / BLOCK_SIZE;
+    RtsFlags.GcFlags.minAllocAreaSize   = (512 * 1024)        / BLOCK_SIZE;
     RtsFlags.GcFlags.minOldGenSize      = (1024 * 1024)       / BLOCK_SIZE;
     RtsFlags.GcFlags.maxHeapSize       = 0;    /* off by default */
     RtsFlags.GcFlags.heapSizeSuggestion        = 0;    /* none */
@@ -173,6 +173,7 @@ void initRtsFlagsDefaults(void)
 #ifdef RTS_GTK_FRONTPANEL
     RtsFlags.GcFlags.frontpanel         = rtsFalse;
 #endif
+    RtsFlags.GcFlags.idleGCDelayTicks   = 300 / TICK_MILLISECS; /* ticks */
 
 #ifdef DEBUG
     RtsFlags.DebugFlags.scheduler      = rtsFalse;
@@ -189,6 +190,7 @@ void initRtsFlagsDefaults(void)
     RtsFlags.DebugFlags.gran           = rtsFalse;
     RtsFlags.DebugFlags.par            = rtsFalse;
     RtsFlags.DebugFlags.linker         = rtsFalse;
+    RtsFlags.DebugFlags.squeeze                = rtsFalse;
 #endif
 
 #if defined(PROFILING) || defined(PAR)
@@ -215,7 +217,7 @@ void initRtsFlagsDefaults(void)
 
     RtsFlags.ConcFlags.ctxtSwitchTime  = CS_MIN_MILLISECS;  /* In milliseconds */
 
-#ifdef SMP
+#ifdef THREADED_RTS
     RtsFlags.ParFlags.nNodes           = 1;
 #endif
 
@@ -242,9 +244,9 @@ void initRtsFlagsDefaults(void)
     RtsFlags.ParFlags.fishDelay         = FISH_DELAY;
 #endif
 
-#if defined(PAR) || defined(SMP)
+#if defined(PAR) || defined(THREADED_RTS)
     RtsFlags.ParFlags.maxLocalSparks   = 4096;
-#endif /* PAR || SMP */
+#endif /* PAR || THREADED_RTS */
 
 #if defined(GRAN)
     /* ToDo: check defaults for GranSim and GUM */
@@ -346,6 +348,9 @@ usage_text[] = {
 "  -c<n>    Auto-enable compaction of the oldest generation when live data is",
 "           at least <n>% of the maximum heap size set with -M (default: 30%)",
 "  -c       Enable compaction for all major collections",
+#if defined(THREADED_RTS)
+"  -I<sec>  Perform full GC after <sec> idle time (default: 0.3, 0 == off)",
+#endif
 "",
 "  -t<file> One-line GC statistics  (default file: <program>.stat)",
 "  -s<file> Summary  GC statistics  (with -Sstderr going to stderr)",
@@ -427,12 +432,13 @@ usage_text[] = {
 "  -DP  DEBUG: par",
 "  -Dl  DEBUG: linker",
 "  -Dm  DEBUG: stm",
+"  -Dz  DEBUG: stack squezing",
 "",
-#endif // DEBUG
-#if defined(SMP)
+#endif /* DEBUG */
+#if defined(THREADED_RTS)
 "  -N<n>     Use <n> OS threads (default: 1)",
 #endif
-#if defined(SMP) || defined(PAR)
+#if defined(THREADED_RTS) || defined(PAR)
 "  -e<size>  Size of spark pools (default 100)",
 #endif
 #if defined(PAR)
@@ -442,7 +448,7 @@ usage_text[] = {
 "  -qd       Turn on PVM-ish debugging",
 "  -qO       Disable output for performance measurement",
 #endif
-#if defined(SMP) || defined(PAR)
+#if defined(THREADED_RTS) || defined(PAR)
 "  -e<n>     Maximum number of outstanding local sparks (default: 4096)",
 #endif
 #if defined(PAR)
@@ -605,14 +611,6 @@ errorBelch("not built for: -prof"); \
 error = rtsTrue;
 #endif
 
-#ifdef SMP
-# define SMP_BUILD_ONLY(x)      x
-#else
-# define SMP_BUILD_ONLY(x) \
-errorBelch("not built for: -smp"); \
-error = rtsTrue;
-#endif
-
 #ifdef PAR
 # define PAR_BUILD_ONLY(x)      x
 #else
@@ -621,10 +619,18 @@ errorBelch("not built for: -parallel"); \
 error = rtsTrue;
 #endif
 
-#if defined(SMP) || defined(PAR)
-# define PAR_OR_SMP_BUILD_ONLY(x)      x
+#ifdef THREADED_RTS
+# define THREADED_BUILD_ONLY(x)      x
+#else
+# define THREADED_BUILD_ONLY(x) \
+errorBelch("not built for: -smp"); \
+error = rtsTrue;
+#endif
+
+#if defined(THREADED_RTS) || defined(PAR)
+# define PAR_OR_THREADED_BUILD_ONLY(x)      x
 #else
-# define PAR_OR_SMP_BUILD_ONLY(x) \
+# define PAR_OR_THREADED_BUILD_ONLY(x) \
 errorBelch("not built for: -parallel or -smp"); \
 error = rtsTrue;
 #endif
@@ -722,6 +728,9 @@ error = rtsTrue;
                      case 'm':
                          RtsFlags.DebugFlags.stm = rtsTrue;
                          break;
+                     case 'z':
+                         RtsFlags.DebugFlags.squeeze = rtsTrue;
+                         break;
                      default:
                          bad_option( rts_argv[arg] );
                      }
@@ -793,6 +802,23 @@ error = rtsTrue;
                  break;
 #endif
 
+             case 'I': /* idle GC delay */
+               if (rts_argv[arg][2] == '\0') {
+                 /* use default */
+               } else {
+                   I_ cst; /* tmp */
+
+                   /* Convert to ticks */
+                   cst = (I_) ((atof(rts_argv[arg]+2) * 1000));
+                   if (cst > 0 && cst < TICK_MILLISECS) {
+                       cst = TICK_MILLISECS;
+                   } else {
+                       cst = cst / TICK_MILLISECS;
+                   }
+                   RtsFlags.GcFlags.idleGCDelayTicks = cst;
+               }
+               break;
+
              case 'S':
                  RtsFlags.GcFlags.giveStats = VERBOSE_GC_STATS;
                  goto stats;
@@ -973,7 +999,7 @@ error = rtsTrue;
                    error = rtsTrue;
                }
                ) 
-#endif // PROFILING
+#endif /* PROFILING */
                break;
 
 #if defined(PROFILING) 
@@ -1011,9 +1037,9 @@ error = rtsTrue;
                }
                break;
 
-#ifdef SMP
+#ifdef THREADED_RTS
              case 'N':
-               SMP_BUILD_ONLY(
+               THREADED_BUILD_ONLY(
                if (rts_argv[arg][2] != '\0') {
                    RtsFlags.ParFlags.nNodes
                      = strtol(rts_argv[arg]+2, (char **) NULL, 10);
@@ -1026,7 +1052,7 @@ error = rtsTrue;
 #endif
              /* =========== PARALLEL =========================== */
              case 'e':
-               PAR_OR_SMP_BUILD_ONLY(
+               PAR_OR_THREADED_BUILD_ONLY(
                if (rts_argv[arg][2] != '\0') {
                    RtsFlags.ParFlags.maxLocalSparks
                      = strtol(rts_argv[arg]+2, (char **) NULL, 10);