https://github.com/dacap/visitlab
Compare performance of std::visit vs switch/case
https://github.com/dacap/visitlab
Last synced: 17 days ago
JSON representation
Compare performance of std::visit vs switch/case
- Host: GitHub
- URL: https://github.com/dacap/visitlab
- Owner: dacap
- License: unlicense
- Created: 2022-12-30T19:58:53.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-05-09T19:46:53.000Z (about 3 years ago)
- Last Synced: 2025-02-28T16:19:12.376Z (over 1 year ago)
- Language: C++
- Size: 4.88 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# visitlab
This benchmark compares [std::visit()](https://en.cppreference.com/w/cpp/utility/variant/visit)
vs. using a switch-case of [std::variant::index()](https://en.cppreference.com/w/cpp/utility/variant/index)
to do a specific task depending on the [std::variant](https://en.cppreference.com/w/cpp/utility/variant) type.
## Benchmark
It looks like `std::visit()` is faster on Windows (msvc) & macOS
(clang), and the switch-case is faster on Linux (gcc).
### Local Run
Compiler: `g++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0`
Flags: `-O2 -g -DNDEBUG`
```
2023-05-09T16:19:06-03:00
Running ./visitlab
Run on (24 X 5100 MHz CPU s)
CPU Caches:
L1 Data 48 KiB (x12)
L1 Instruction 32 KiB (x12)
L2 Unified 1280 KiB (x12)
L3 Unified 30720 KiB (x1)
Load Average: 1.29, 0.96, 0.78
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
--------------------------------------------------------
Benchmark Time CPU Iterations
--------------------------------------------------------
BM_Visit 325 ns 325 ns 2188033
BM_SwitchCase 317 ns 317 ns 2214635
```
### GitHub Actions
**Windows** (MSVC 19.34.31944.0)
```
2023-05-09T19:38:58+00:00
Running D:\a\visitlab\visitlab\build\visitlab.exe
Run on (2 X 2594 MHz CPU s)
CPU Caches:
L1 Data 32 KiB (x2)
L1 Instruction 32 KiB (x2)
L2 Unified 1024 KiB (x2)
L3 Unified 36608 KiB (x1)
--------------------------------------------------------
Benchmark Time CPU Iterations
--------------------------------------------------------
BM_Visit 3418 ns 3376 ns 203636
BM_SwitchCase 3493 ns 3516 ns 213333
```
**macOS** (AppleClang 14.0.0.14000029)
```
2023-05-09T19:35:03+00:00
Running build/visitlab
Run on (3 X 3337 MHz CPU s)
CPU Caches:
L1 Data 32 KiB
L1 Instruction 32 KiB
L2 Unified 256 KiB (x3)
L3 Unified 12288 KiB
Load Average: 19.07, 10.54, 4.42
--------------------------------------------------------
Benchmark Time CPU Iterations
--------------------------------------------------------
BM_Visit 1601 ns 1599 ns 438069
BM_SwitchCase 2474 ns 1666 ns 441081
```
**Linux** (g++ GNU 11.3.0)
```
2023-05-09T19:34:37+00:00
Running build/visitlab
Run on (2 X 2593.91 MHz CPU s)
CPU Caches:
L1 Data 32 KiB (x2)
L1 Instruction 32 KiB (x2)
L2 Unified 1024 KiB (x2)
L3 Unified 36608 KiB (x1)
Load Average: 1.21, 0.58, 0.23
--------------------------------------------------------
Benchmark Time CPU Iterations
--------------------------------------------------------
BM_Visit 836 ns 836 ns 830642
BM_SwitchCase 769 ns 769 ns 901695
```
## License
This is free and unencumbered software released into the public
domain. Read [LICENSE.txt](LICENSE.txt) for more information.