mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-24 05:09:34 +00: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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284180 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6ec5391920
commit
0a9d04f218
@ -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…
x
Reference in New Issue
Block a user