parent
1a5c21dc56
commit
204a4cc6de
24
src/misc.cpp
24
src/misc.cpp
|
@ -502,7 +502,7 @@ void bindThisThread(size_t) {}
|
||||||
int best_group(size_t idx) {
|
int best_group(size_t idx) {
|
||||||
|
|
||||||
int threads = 0;
|
int threads = 0;
|
||||||
int nodes = 0;
|
int groups = 0;
|
||||||
int cores = 0;
|
int cores = 0;
|
||||||
DWORD returnLength = 0;
|
DWORD returnLength = 0;
|
||||||
DWORD byteOffset = 0;
|
DWORD byteOffset = 0;
|
||||||
|
@ -530,8 +530,8 @@ int best_group(size_t idx) {
|
||||||
|
|
||||||
while (byteOffset < returnLength)
|
while (byteOffset < returnLength)
|
||||||
{
|
{
|
||||||
if (ptr->Relationship == RelationNumaNode)
|
if (ptr->Relationship == RelationGroup)
|
||||||
nodes++;
|
groups += ptr->Group.MaximumGroupCount;
|
||||||
|
|
||||||
else if (ptr->Relationship == RelationProcessorCore)
|
else if (ptr->Relationship == RelationProcessorCore)
|
||||||
{
|
{
|
||||||
|
@ -546,23 +546,23 @@ int best_group(size_t idx) {
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
|
||||||
std::vector<int> groups;
|
std::vector<int> core_groups;
|
||||||
|
|
||||||
// Run as many threads as possible on the same node until core limit is
|
// Run as many threads as possible on the same group until core limit is
|
||||||
// reached, then move on filling the next node.
|
// reached, then move on filling the next group.
|
||||||
for (int n = 0; n < nodes; n++)
|
for (int n = 0; n < groups; n++)
|
||||||
for (int i = 0; i < cores / nodes; i++)
|
for (int i = 0; i < cores / groups; i++)
|
||||||
groups.push_back(n);
|
core_groups.push_back(n);
|
||||||
|
|
||||||
// In case a core has more than one logical processor (we assume 2) and we
|
// In case a core has more than one logical processor (we assume 2) and we
|
||||||
// have still threads to allocate, then spread them evenly across available
|
// have still threads to allocate, then spread them evenly across available
|
||||||
// nodes.
|
// groups.
|
||||||
for (int t = 0; t < threads - cores; t++)
|
for (int t = 0; t < threads - cores; t++)
|
||||||
groups.push_back(t % nodes);
|
core_groups.push_back(t % groups);
|
||||||
|
|
||||||
// If we still have more threads than the total number of logical processors
|
// If we still have more threads than the total number of logical processors
|
||||||
// then return -1 and let the OS to decide what to do.
|
// then return -1 and let the OS to decide what to do.
|
||||||
return idx < groups.size() ? groups[idx] : -1;
|
return idx < core_groups.size() ? core_groups[idx] : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue