summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorTamar Christina <tamar@zhox.com>2016-10-01 00:26:52 -0400
committerBen Gamari <ben@smart-cactus.org>2016-10-01 00:27:50 -0400
commit3c1790546953b6db90fe7676e53b626722df8c61 (patch)
tree6354fddc5d3e03d67b927622ac3a1229a2702b38 /includes
parent59d7ee53906b9cee7f279c1f9567af7b930f8636 (diff)
downloadhaskell-3c1790546953b6db90fe7676e53b626722df8c61.tar.gz
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
Diffstat (limited to 'includes')
-rw-r--r--includes/rts/OSThreads.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/includes/rts/OSThreads.h b/includes/rts/OSThreads.h
index bc84b714db..2eb58971ca 100644
--- a/includes/rts/OSThreads.h
+++ b/includes/rts/OSThreads.h
@@ -221,6 +221,11 @@ void releaseThreadNode (void);
int forkOS_createThread ( HsStablePtr entry );
//
+// Free any global resources created in OSThreads.
+//
+void freeThreadingResources(void);
+
+//
// Returns the number of processor cores in the machine
//
uint32_t getNumberOfProcessors (void);