[GHC] #12181: Multi-threaded code on ARM64 GHC runtime doesn't use all available cores
GHC
ghc-devs at haskell.org
Tue Jul 5 17:59:10 UTC 2016
#12181: Multi-threaded code on ARM64 GHC runtime doesn't use all available cores
--------------------------------------------+------------------------------
Reporter: varosi | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Runtime System | Version: 7.10.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: arm
Type of failure: Runtime performance bug | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
--------------------------------------------+------------------------------
Comment (by thomie):
varosi: you are reporting an issue with `+RTS -N`, correct?
When compiling the following program with `-threaded`, and running it with
`./Main +RTS -N`, it prints `2` instead of `4` on your machine:
{{{
import Control.Concurrent
main = getNumCapabilities >>= print
}}}
Here's the code that gets the number of processors when using `+RTS -N`,
from `rts/posix/OSThreads.c`:
{{{#!C
uint32_t
getNumberOfProcessors (void)
{
static uint32_t 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);
#elif defined(darwin_HOST_OS)
size_t size = sizeof(uint32_t);
if(sysctlbyname("hw.logicalcpu",&nproc,&size,NULL,0) != 0) {
if(sysctlbyname("hw.ncpu",&nproc,&size,NULL,0) != 0)
nproc = 1;
}
#elif defined(freebsd_HOST_OS)
size_t size = sizeof(uint32_t);
if(sysctlbyname("hw.ncpu",&nproc,&size,NULL,0) != 0)
nproc = 1;
#else
nproc = 1;
#endif
}
return nproc;
}
}}}
From `man sysconf`:
{{{
- _SC_NPROCESSORS_CONF
The number of processors configured.
- _SC_NPROCESSORS_ONLN
The number of processors currently online (available).
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12181#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list