#include <ctype.h>
#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_WINDOWS_H
+#include <windows.h>
+#endif
+
#include <stdlib.h>
#include <string.h>
RtsFlags.ParFlags.wakeupMigrate = rtsFalse;
RtsFlags.ParFlags.parGcEnabled = 1;
RtsFlags.ParFlags.parGcGen = 1;
+ RtsFlags.ParFlags.parGcLoadBalancing = 1;
#endif
#ifdef PAR
"",
#endif /* DEBUG */
#if defined(THREADED_RTS) && !defined(NOSMP)
-" -N<n> Use <n> OS threads (default: 1)",
+" -N<n> Use <n> processors (default: 1)",
+" -N Determine the number of processors to use automatically",
" -q1 Use one OS thread for GC (turns off parallel GC)",
" -qg<n> Use parallel GC only for generations >= <n> (default: 1)",
" -qm Don't automatically migrate threads between CPUs",
#if defined(THREADED_RTS) && !defined(NOSMP)
case 'N':
THREADED_BUILD_ONLY(
- if (rts_argv[arg][2] != '\0') {
+ if (rts_argv[arg][2] == '\0') {
+#if defined(PROFILING)
+ RtsFlags.ParFlags.nNodes = 1;
+#else
+ RtsFlags.ParFlags.nNodes = getNumberOfProcessors();
+#endif
+ } else {
RtsFlags.ParFlags.nNodes
= strtol(rts_argv[arg]+2, (char **) NULL, 10);
if (RtsFlags.ParFlags.nNodes <= 0) {
error = rtsTrue;
}
break;
+ case 'b':
+ RtsFlags.ParFlags.parGcLoadBalancing = rtsFalse;
+ break;
case 'm':
RtsFlags.ParFlags.migrate = rtsFalse;
break;