Add optimal thread strategy

Add an optimal thread strategy to execute specified amount of tasks.
This strategy should prevent us from creating too many threads if we
occasionaly have an unexpectedly small amount of tasks.

Differential Revision: https://reviews.llvm.org/D87765
This commit is contained in:
Dmitry Antipov 2020-09-23 19:37:50 +03:00
parent 437358be71
commit 6835808158
2 changed files with 12 additions and 2 deletions

View File

@ -73,7 +73,7 @@ void ManualDWARFIndex::Index() {
// Share one thread pool across operations to avoid the overhead of
// recreating the threads.
llvm::ThreadPool pool;
llvm::ThreadPool pool(llvm::optimal_concurrency(units_to_index.size()));
// Create a task runner that extracts dies for each DWARF unit in a
// separate thread.

View File

@ -210,7 +210,7 @@ void llvm_execute_on_thread_async(
return heavyweight_hardware_concurrency();
}
/// Returns a default thread strategy where all available hardware ressources
/// Returns a default thread strategy where all available hardware resources
/// are to be used, except for those initially excluded by an affinity mask.
/// This function takes affinity into consideration. Returns 1 when LLVM is
/// configured with LLVM_ENABLE_THREADS=OFF.
@ -220,6 +220,16 @@ void llvm_execute_on_thread_async(
return S;
}
/// Returns an optimal thread strategy to execute specified amount of tasks.
/// This strategy should prevent us from creating too many threads if we
/// occasionaly have an unexpectedly small amount of tasks.
inline ThreadPoolStrategy optimal_concurrency(unsigned TaskCount = 0) {
ThreadPoolStrategy S;
S.Limit = true;
S.ThreadsRequested = TaskCount;
return S;
}
/// Return the current thread id, as used in various OS system calls.
/// Note that not all platforms guarantee that the value returned will be
/// unique across the entire system, so portable code should not assume