[GHC] #11054: GHC on Windows could not use more than 64 logical processors

GHC ghc-devs at haskell.org
Sat Oct 1 21:50:31 UTC 2016


#11054: GHC on Windows could not use more than 64 logical processors
-------------------------------------+-------------------------------------
        Reporter:  varosi            |                Owner:  Phyx-
            Type:  feature request   |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Runtime System    |              Version:  7.10.2
      Resolution:                    |             Keywords:
Operating System:  Windows           |         Architecture:  x86_64
 Type of failure:  Runtime           |  (amd64)
  performance bug                    |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #12602            |  Differential Rev(s):  Phab:D2533
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"3c1790546953b6db90fe7676e53b626722df8c61/ghc"
 3c179054/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="3c1790546953b6db90fe7676e53b626722df8c61"
 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
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11054#comment:31>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list