Somebody needs to implement getNumberOfProcessors() for MacOS X,
currently it will return 1.
void setThreadLocalVar (ThreadLocalKey *key, void *value);
void freeThreadLocalKey (ThreadLocalKey *key);
+// Processors and affinity
+nat getNumberOfProcessors (void);
+
#endif // !CMINUSMINUS
#else
#if defined(PROFILING)
RtsFlags.ParFlags.nNodes = 1;
#else
-#if defined(mingw32_HOST_OS)
- {
- SYSTEM_INFO si;
- GetSystemInfo(&si);
- RtsFlags.ParFlags.nNodes = si.dwNumberOfProcessors;
- }
-#elif defined(HAVE_SYSCONF)
- RtsFlags.ParFlags.nNodes = sysconf(_SC_NPROCESSORS_CONF);
-#else
- RtsFlags.ParFlags.nNodes = 1;
-#endif
+ RtsFlags.ParFlags.nNodes = getNumberOfProcessors();
#endif
} else {
RtsFlags.ParFlags.nNodes
return result;
}
+nat
+getNumberOfProcessors (void)
+{
+ static nat nproc = 0;
+
+ if (nproc == 0) {
+#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
+ nproc = sysconf(_SC_NPROCESSORS_ONLN);
+#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF)
+ nproc = sysconf(_SC_NPROCESSORS_CONF);
+#else
+ nproc = 1;
+#endif
+ }
+
+ return nproc;
+}
+
#else /* !defined(THREADED_RTS) */
int
(unsigned*)&pId) == 0);
}
+nat
+getNumberOfProcessors (void)
+{
+ static nat nproc = 0;
+
+ if (nproc == 0) {
+ SYSTEM_INFO si;
+ GetSystemInfo(&si);
+ nproc = si.dwNumberOfProcessors;
+ }
+
+ return nproc;
+}
+
#else /* !defined(THREADED_RTS) */
int