From ec544c552ed63cc0e21ccddf342023084c9b904f Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Wed, 19 Oct 2016 17:35:01 +0000 Subject: [PATCH] [ThinLTO] Default backend threads to heavyweight_hardware_concurrency Summary: Changes default backend parallelism from thread::hardware_concurrency to the new llvm::heavyweight_hardware_concurrency, which for X86 Linux defaults to the number of physical cores (and will fall back to thread::hardware_concurrency otherwise). This avoid oversubscribing the physical cores using hyperthreading. Reviewers: mehdi_amini, pcc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D25775 llvm-svn: 284618 --- llvm/lib/LTO/LTO.cpp | 4 +++- llvm/lib/LTO/ThinLTOCodeGenerator.cpp | 5 +++-- llvm/tools/gold/gold-plugin.cpp | 4 ++-- llvm/tools/llvm-lto2/llvm-lto2.cpp | 3 ++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp index 65bcef6..b4efb4a 100644 --- a/llvm/lib/LTO/LTO.cpp +++ b/llvm/lib/LTO/LTO.cpp @@ -29,6 +29,7 @@ #include "llvm/Support/SourceMgr.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/ThreadPool.h" +#include "llvm/Support/Threading.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" @@ -227,7 +228,8 @@ LTO::RegularLTOState::RegularLTOState(unsigned ParallelCodeGenParallelismLevel, LTO::ThinLTOState::ThinLTOState(ThinBackend Backend) : Backend(Backend) { if (!Backend) - this->Backend = createInProcessThinBackend(thread::hardware_concurrency()); + this->Backend = + createInProcessThinBackend(llvm::heavyweight_hardware_concurrency()); } LTO::LTO(Config Conf, ThinBackend Backend, diff --git a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp index 10af987..578b3e8 100644 --- a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp +++ b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp @@ -43,6 +43,7 @@ #include "llvm/Support/SHA1.h" #include "llvm/Support/TargetRegistry.h" #include "llvm/Support/ThreadPool.h" +#include "llvm/Support/Threading.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Transforms/IPO.h" #include "llvm/Transforms/IPO/FunctionImport.h" @@ -64,8 +65,8 @@ extern cl::opt LTODiscardValueNames; namespace { -static cl::opt ThreadCount("threads", - cl::init(std::thread::hardware_concurrency())); +static cl::opt + ThreadCount("threads", cl::init(llvm::heavyweight_hardware_concurrency())); static void diagnosticHandler(const DiagnosticInfo &DI) { DiagnosticPrinterRawOStream DP(errs()); diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp index 055c462..1366c0f 100644 --- a/llvm/tools/gold/gold-plugin.cpp +++ b/llvm/tools/gold/gold-plugin.cpp @@ -118,8 +118,8 @@ namespace options { static unsigned OptLevel = 2; // Default parallelism of 0 used to indicate that user did not specify. // Actual parallelism default value depends on implementation. - // Currently only affects ThinLTO, where the default is the - // hardware_concurrency. + // Currently only affects ThinLTO, where the default is + // llvm::heavyweight_hardware_concurrency. static unsigned Parallelism = 0; // Default regular LTO codegen parallelism (number of partitions). static unsigned ParallelCodeGenParallelismLevel = 1; diff --git a/llvm/tools/llvm-lto2/llvm-lto2.cpp b/llvm/tools/llvm-lto2/llvm-lto2.cpp index a3cc6ef..042f874 100644 --- a/llvm/tools/llvm-lto2/llvm-lto2.cpp +++ b/llvm/tools/llvm-lto2/llvm-lto2.cpp @@ -20,6 +20,7 @@ #include "llvm/LTO/LTO.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/TargetSelect.h" +#include "llvm/Support/Threading.h" using namespace llvm; using namespace lto; @@ -52,7 +53,7 @@ static cl::opt "distributed backend case")); static cl::opt Threads("-thinlto-threads", - cl::init(thread::hardware_concurrency())); + cl::init(llvm::heavyweight_hardware_concurrency())); static cl::list SymbolResolutions( "r", -- 2.7.4