Use sched_getaffinity instead of std:🧵:hardware_concurrency.

The issue with std:🧵:hardware_concurrency is that it forwards
to libc and some implementations (like glibc) don't take thread
affinity into consideration.

With this change a llvm program that can execute in only 2 cores will
use 2 threads, even if the machine has 32 cores.

This makes benchmarking a lot easier, but should also help if someone
doesn't want to use all cores for compilation for example.

llvm-svn: 314810
This commit is contained in:
Rafael Espindola 2017-10-03 16:25:48 +00:00
parent 6e182fbab4
commit c804bf9397
1 changed files with 2 additions and 2 deletions

View File

@ -2240,8 +2240,8 @@ void MergeNoTailSection::finalizeContents() {
// operations in the following tight loop.
size_t Concurrency = 1;
if (Config->Threads)
if (int N = std::thread::hardware_concurrency())
Concurrency = std::min<size_t>(PowerOf2Floor(N), NumShards);
Concurrency =
std::min<size_t>(PowerOf2Floor(hardware_concurrency()), NumShards);
// Add section pieces to the builders.
parallelForEachN(0, Concurrency, [&](size_t ThreadId) {