mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
Add interface for querying physical hardware concurrency
Summary: This will be used by ThinLTO to set the amount of backend parallelism, which performs better when restricted to the number of physical cores (on X86 at least, where getHostNumPhysicalCores is currently defined). If not available this falls back to thread::hardware_concurrency. Note I didn't add to the thread class since that is a typedef to std::thread where available. Reviewers: mehdi_amini Subscribers: beanz, llvm-commits, mgorny Differential Revision: https://reviews.llvm.org/D25585 llvm-svn: 284180
This commit is contained in:
parent
520d92773b
commit
6b1749d39a
@ -115,6 +115,10 @@ namespace llvm {
|
||||
TsanHappensAfter(&flag);
|
||||
#endif
|
||||
}
|
||||
|
||||
/// Get the amount of currency based on physical cores, if available for the
|
||||
/// host system, otherwise falls back to thread::hardware_concurrency().
|
||||
unsigned hardware_physical_concurrency();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "llvm/Support/Threading.h"
|
||||
#include "llvm/Config/config.h"
|
||||
#include "llvm/Support/Atomic.h"
|
||||
#include "llvm/Support/Host.h"
|
||||
#include "llvm/Support/Mutex.h"
|
||||
#include "llvm/Support/thread.h"
|
||||
#include <cassert>
|
||||
@ -116,3 +117,10 @@ void llvm::llvm_execute_on_thread(void (*Fn)(void*), void *UserData,
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
unsigned llvm::hardware_physical_concurrency() {
|
||||
int NumPhysical = sys::getHostNumPhysicalCores();
|
||||
if (NumPhysical == -1)
|
||||
return thread::hardware_concurrency();
|
||||
return NumPhysical;
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ add_llvm_unittest(SupportTests
|
||||
StringPool.cpp
|
||||
SwapByteOrderTest.cpp
|
||||
TargetParserTest.cpp
|
||||
Threading.cpp
|
||||
ThreadLocalTest.cpp
|
||||
ThreadPool.cpp
|
||||
TimerTest.cpp
|
||||
|
25
unittests/Support/Threading.cpp
Normal file
25
unittests/Support/Threading.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
//===- unittests/Threading.cpp - Thread tests -----------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Support/Threading.h"
|
||||
#include "llvm/Support/thread.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
|
||||
TEST(Threading, PhysicalConcurrency) {
|
||||
auto Num = hardware_physical_concurrency();
|
||||
// Since Num is unsigned this will also catch us trying to
|
||||
// return -1.
|
||||
ASSERT_LE(Num, thread::hardware_concurrency());
|
||||
}
|
||||
|
||||
} // end anon namespace
|
Loading…
Reference in New Issue
Block a user