Subject: [boost] What's wrong with this benchmark
From: Benedek Thaler (thalerbenedek_at_[hidden])
Date: 2016-02-16 12:56:09
In a previous mail, I introduced a container library, `double_ended`.
This library has benchmarks . However, the benchmarks show
This is what I do :
- compile program using G++ 5.3, -O2
- remove CPU0 from kernel scheduler pool (isolcpu=0 boot flag)
- disable CPU scaling
- pin benchmark thread to CPU0
- in the test, create a vector
- reserve memory for 1M unsigned
- write a byte to each page reserved, to warm up the page table
- get TSC value (machine has constant_tsc flag)
- insert 1M unsigned value
- get TSC value again, subtract previous value
- repeat test 25 times, average results
I do this with 3 containers: std::vector, boost::container::vector and
double_ended::devector. While the latter two produces almost
equivalent results, std::vector seriously falls behind.
- No reallocation happens between the TSC sampling
- Test order doesn't matter: every order produces the same results
- Container size or sample count doesn't matter, same results.
- The deviations of individual measures of each container is small,
the performance is consistent.
- I compared the produced ASM of std::vector and
double_ended::devector, they are very similar, almost the same
instructions in different order .
What do I miss here?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk