BLI: update blender::Set vs std::unordered_set benchmark results

Also give more details about the used CPU and compiler.
This commit is contained in:
Jacques Lucke
2023-07-25 10:49:14 +02:00
parent c6725b935c
commit f397ba7571

View File

@@ -639,6 +639,7 @@ BLI_NOINLINE void benchmark_random_ints(StringRef name, int amount, int factor)
BLI_rng_free(rng);
SetT set;
// set.reserve(amount);
{
SCOPED_TIMER(name + " Add");
for (int value : values) {
@@ -685,7 +686,7 @@ template<typename Key> class StdUnorderedSetWrapper {
void reserve(int64_t n)
{
set_.reserve(n);
set_.reserve(size_t(n));
}
void add_new(const Key &key)
@@ -747,69 +748,70 @@ template<typename Key> class StdUnorderedSetWrapper {
TEST(set, Benchmark)
{
for (int i = 0; i < 3; i++) {
benchmark_random_ints<blender::Set<int>>("blender::Set ", 100000, 1);
benchmark_random_ints<blender::StdUnorderedSetWrapper<int>>("std::unordered_set", 100000, 1);
benchmark_random_ints<Set<int>>("blender::Set ", 100000, 1);
benchmark_random_ints<StdUnorderedSetWrapper<int>>("std::unordered_set", 100000, 1);
}
std::cout << "\n";
for (int i = 0; i < 3; i++) {
uint32_t factor = (3 << 10);
benchmark_random_ints<blender::Set<int>>("blender::Set ", 100000, factor);
benchmark_random_ints<blender::StdUnorderedSetWrapper<int>>(
"std::unordered_set", 100000, factor);
benchmark_random_ints<Set<int>>("blender::Set ", 100000, int(factor));
benchmark_random_ints<StdUnorderedSetWrapper<int>>("std::unordered_set", 100000, int(factor));
}
}
/**
* Output of the rudimentary benchmark above on my hardware.
* Output of the rudimentary benchmark above on an AMD Ryzen 9 3900X using gcc 12.3.1.
* The difference is more pronounced when `reserve` is used.
* When using clang 15.0.7 the numbers fairly similar.
*
* Timer 'blender::Set Add' took 5.5573 ms
* Timer 'blender::Set Contains' took 0.807384 ms
* Timer 'blender::Set Remove' took 0.953436 ms
* Timer 'blender::Set Add' took 2.9 ms
* Timer 'blender::Set Contains' took 0.4 ms
* Timer 'blender::Set Remove' took 0.5 ms
* Count: 199998
* Timer 'std::unordered_set Add' took 12.551 ms
* Timer 'std::unordered_set Contains' took 2.3323 ms
* Timer 'std::unordered_set Remove' took 5.07082 ms
* Timer 'std::unordered_set Add' took 6.4 ms
* Timer 'std::unordered_set Contains' took 1.2 ms
* Timer 'std::unordered_set Remove' took 4.0 ms
* Count: 199998
* Timer 'blender::Set Add' took 2.62526 ms
* Timer 'blender::Set Contains' took 0.407499 ms
* Timer 'blender::Set Remove' took 0.472981 ms
* Timer 'blender::Set Add' took 2.1 ms
* Timer 'blender::Set Contains' took 0.4 ms
* Timer 'blender::Set Remove' took 0.4 ms
* Count: 199998
* Timer 'std::unordered_set Add' took 6.26945 ms
* Timer 'std::unordered_set Contains' took 1.17236 ms
* Timer 'std::unordered_set Remove' took 3.77402 ms
* Timer 'std::unordered_set Add' took 5.5 ms
* Timer 'std::unordered_set Contains' took 1.2 ms
* Timer 'std::unordered_set Remove' took 4.0 ms
* Count: 199998
* Timer 'blender::Set Add' took 2.59152 ms
* Timer 'blender::Set Contains' took 0.415254 ms
* Timer 'blender::Set Remove' took 0.477559 ms
* Timer 'blender::Set Add' took 2.0 ms
* Timer 'blender::Set Contains' took 0.4 ms
* Timer 'blender::Set Remove' took 0.5 ms
* Count: 199998
* Timer 'std::unordered_set Add' took 6.28129 ms
* Timer 'std::unordered_set Contains' took 1.17562 ms
* Timer 'std::unordered_set Remove' took 3.77811 ms
* Timer 'std::unordered_set Add' took 5.6 ms
* Timer 'std::unordered_set Contains' took 1.2 ms
* Timer 'std::unordered_set Remove' took 4.0 ms
* Count: 199998
*
* Timer 'blender::Set Add' took 3.16514 ms
* Timer 'blender::Set Contains' took 0.732895 ms
* Timer 'blender::Set Remove' took 1.08171 ms
* Timer 'blender::Set Add' took 2.7 ms
* Timer 'blender::Set Contains' took 0.8 ms
* Timer 'blender::Set Remove' took 1.1 ms
* Count: 198790
* Timer 'std::unordered_set Add' took 6.57377 ms
* Timer 'std::unordered_set Contains' took 1.17008 ms
* Timer 'std::unordered_set Remove' took 3.7946 ms
* Timer 'std::unordered_set Add' took 6.3 ms
* Timer 'std::unordered_set Contains' took 1.5 ms
* Timer 'std::unordered_set Remove' took 4.4 ms
* Count: 198790
* Timer 'blender::Set Add' took 3.11439 ms
* Timer 'blender::Set Contains' took 0.740159 ms
* Timer 'blender::Set Remove' took 1.06749 ms
* Timer 'blender::Set Add' took 2.6 ms
* Timer 'blender::Set Contains' took 0.8 ms
* Timer 'blender::Set Remove' took 1.1 ms
* Count: 198790
* Timer 'std::unordered_set Add' took 6.35597 ms
* Timer 'std::unordered_set Contains' took 1.17713 ms
* Timer 'std::unordered_set Remove' took 3.77826 ms
* Timer 'std::unordered_set Add' took 6.4 ms
* Timer 'std::unordered_set Contains' took 1.5 ms
* Timer 'std::unordered_set Remove' took 4.4 ms
* Count: 198790
* Timer 'blender::Set Add' took 3.09876 ms
* Timer 'blender::Set Contains' took 0.742072 ms
* Timer 'blender::Set Remove' took 1.06622 ms
* Timer 'blender::Set Add' took 2.7 ms
* Timer 'blender::Set Contains' took 0.8 ms
* Timer 'blender::Set Remove' took 1.1 ms
* Count: 198790
* Timer 'std::unordered_set Add' took 6.4469 ms
* Timer 'std::unordered_set Contains' took 1.16515 ms
* Timer 'std::unordered_set Remove' took 3.80639 ms
* Timer 'std::unordered_set Add' took 6.3 ms
* Timer 'std::unordered_set Contains' took 1.5 ms
* Timer 'std::unordered_set Remove' took 4.3 ms
* Count: 198790
*/