|
30 | 30 | // The exact meaning of each argument depends on the benchmark, allocator, and size components used.
|
31 | 31 | // Refer to the 'argsName()' function in each component to find detailed descriptions of these arguments.
|
32 | 32 |
|
| 33 | +template <size_t max_threads = 12> |
33 | 34 | static void multithreaded(benchmark::internal::Benchmark *benchmark) {
|
34 |
| - benchmark->Threads(12); |
35 |
| - benchmark->Threads(8); |
36 |
| - benchmark->Threads(4); |
37 | 35 | benchmark->Threads(1);
|
| 36 | + benchmark->DenseThreadRange(4, max_threads, 4); |
38 | 37 | }
|
39 | 38 |
|
40 | 39 | static void singlethreaded(benchmark::internal::Benchmark *benchmark) {
|
@@ -91,14 +90,16 @@ UMF_BENCHMARK_TEMPLATE_DEFINE(multiple_malloc_free_benchmark, disjoint_pool_fix,
|
91 | 90 | pool_allocator<disjoint_pool<os_provider>>);
|
92 | 91 | UMF_BENCHMARK_REGISTER_F(multiple_malloc_free_benchmark, disjoint_pool_fix)
|
93 | 92 | ->Apply(&default_multiple_alloc_fix_size)
|
94 |
| - ->Apply(&multithreaded); |
| 93 | + // Limit benchmarks to 4 threads, as the disjoint pool scales poorly with higher thread counts. |
| 94 | + ->Apply(&multithreaded<4>); |
95 | 95 |
|
96 | 96 | UMF_BENCHMARK_TEMPLATE_DEFINE(multiple_malloc_free_benchmark,
|
97 | 97 | disjoint_pool_uniform, uniform_alloc_size,
|
98 | 98 | pool_allocator<disjoint_pool<os_provider>>);
|
99 | 99 | UMF_BENCHMARK_REGISTER_F(multiple_malloc_free_benchmark, disjoint_pool_uniform)
|
100 | 100 | ->Apply(&default_multiple_alloc_uniform_size)
|
101 |
| - ->Apply(&multithreaded); |
| 101 | + // Limit benchmarks to 4 threads, as the disjoint pool scales poorly with higher thread counts. |
| 102 | + ->Apply(&multithreaded<4>); |
102 | 103 |
|
103 | 104 | #ifdef UMF_POOL_JEMALLOC_ENABLED
|
104 | 105 | UMF_BENCHMARK_TEMPLATE_DEFINE(multiple_malloc_free_benchmark, jemalloc_pool_fix,
|
|
0 commit comments