From 0ee0be109fd00ec629f7a2ad6a597885a0c9d5b4 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Tue, 17 Mar 2009 09:33:09 +0000 Subject: [PATCH] Add getNumberOfProcessors(), FIX MacOS X build problem (hopefully) Somebody needs to implement getNumberOfProcessors() for MacOS X, currently it will return 1. --- includes/OSThreads.h | 3 +++ rts/RtsFlags.c | 12 +----------- rts/posix/OSThreads.c | 18 ++++++++++++++++++ rts/win32/OSThreads.c | 14 ++++++++++++++ 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/includes/OSThreads.h b/includes/OSThreads.h index d4dbc36..73ef4d2 100644 --- a/includes/OSThreads.h +++ b/includes/OSThreads.h @@ -185,6 +185,9 @@ void *getThreadLocalVar (ThreadLocalKey *key); void setThreadLocalVar (ThreadLocalKey *key, void *value); void freeThreadLocalKey (ThreadLocalKey *key); +// Processors and affinity +nat getNumberOfProcessors (void); + #endif // !CMINUSMINUS #else diff --git a/rts/RtsFlags.c b/rts/RtsFlags.c index 2af67e7..b3b95b3 100644 --- a/rts/RtsFlags.c +++ b/rts/RtsFlags.c @@ -1152,17 +1152,7 @@ error = rtsTrue; #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 diff --git a/rts/posix/OSThreads.c b/rts/posix/OSThreads.c index 6e01f82..6eb2d2b 100644 --- a/rts/posix/OSThreads.c +++ b/rts/posix/OSThreads.c @@ -179,6 +179,24 @@ forkOS_createThread ( HsStablePtr entry ) 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 diff --git a/rts/win32/OSThreads.c b/rts/win32/OSThreads.c index ed5c968..929b817 100644 --- a/rts/win32/OSThreads.c +++ b/rts/win32/OSThreads.c @@ -232,6 +232,20 @@ forkOS_createThread ( HsStablePtr entry ) (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 -- 1.7.10.4