Merge pull request #4865 from ameerj/async-threadcount

async_shaders: Increase Async worker thread count for >8 thread cpus
This commit is contained in:
bunnei 2020-11-01 01:54:01 -07:00 committed by GitHub
commit 1089d76736
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,14 +20,15 @@ AsyncShaders::~AsyncShaders() {
} }
void AsyncShaders::AllocateWorkers() { void AsyncShaders::AllocateWorkers() {
// Max worker threads we should allow // Use at least one thread
constexpr u32 MAX_THREADS = 4; u32 num_workers = 1;
// Deduce how many threads we can use
const u32 threads_used = std::thread::hardware_concurrency() / 4; // Deduce how many more threads we can use
// Always allow at least 1 thread regardless of our settings const u32 thread_count = std::thread::hardware_concurrency();
const auto max_worker_count = std::max(1U, threads_used); if (thread_count >= 8) {
// Don't use more than MAX_THREADS // Increase async workers by 1 for every 2 threads >= 8
const auto num_workers = std::min(max_worker_count, MAX_THREADS); num_workers += 1 + (thread_count - 8) / 2;
}
// If we already have workers queued, ignore // If we already have workers queued, ignore
if (num_workers == worker_threads.size()) { if (num_workers == worker_threads.size()) {