[commit: ghc] master: Support more than 64 logical processors on Windows (3c17905)

git at git.haskell.org git at git.haskell.org
Sat Oct 1 21:50:43 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/3c1790546953b6db90fe7676e53b626722df8c61/ghc

>---------------------------------------------------------------

commit 3c1790546953b6db90fe7676e53b626722df8c61
Author: Tamar Christina <tamar at zhox.com>
Date:   Sat Oct 1 00:26:52 2016 -0400

    Support more than 64 logical processors on Windows
    
    Windows support for more than 64 logical processors are implemented
    using processor groups.
    
    Essentially what it's doing is keeping the existing maximum of 64
    processors and keeping the affinity mask a 64 bit value, but adds an
    hierarchy above that.
    
    This support was added to Windows 7 and so we need to at runtime detect
    if the APIs are still there due to our minimum supported version being
    Windows Vista.
    
    The Maximum number of groups supported at this time is 4, so 256 logical
    cores.  The group indices are 0 based. One thread can have affinity with
    multiple groups.
    
    See
    https://msdn.microsoft.com/en-us/library/windows/desktop/ms684251.aspx
    and particularly helpful is the whitepaper: 'Supporting Systems that
    have more than 64 processors' at
    https://msdn.microsoft.com/en-us/library/windows/hardware/dn653313.aspx
    
    Processor groups are not guaranteed to be uniformly distributed nor
    guaranteed to be filled before a next group is needed. The OS will
    assign processors to groups based on physical proximity and will never
    partially assign cores from one physical cpu to more than one group. If
    one has two 48 core CPUs then you'd end up with two groups of 48 logical
    cpus. Now add a 3rd CPU with 10 cores and the group it is assigned to
    depends where the socket is on the board.
    
    Test Plan:
    ./validate or make test -c . in the rts test folder.
    
    This tests for regressions, to test this particular functionality
    itself:
    
       <program> +RTS -N -qa -RTS
    
    Test is detailed in description.
    
    Reviewers: bgamari, simonmar, austin, erikd
    
    Reviewed By: simonmar
    
    Subscribers: thomie, #ghc_windows_task_force
    
    Differential Revision: https://phabricator.haskell.org/D2533
    
    GHC Trac Issues: #11054


>---------------------------------------------------------------

3c1790546953b6db90fe7676e53b626722df8c61
 docs/users_guide/8.2.1-notes.rst |   4 +
 includes/rts/OSThreads.h         |   5 +
 rts/RtsStartup.c                 |   5 +
 rts/posix/OSThreads.c            |   5 +
 rts/win32/OSThreads.c            | 298 +++++++++++++++++++++++++++++++++++++--
 5 files changed, 305 insertions(+), 12 deletions(-)

Diff suppressed because of size. To see it, use:

    git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc 3c1790546953b6db90fe7676e53b626722df8c61


More information about the ghc-commits mailing list