Skip to content

Instantly share code, notes, and snippets.

@cjdb
Created August 10, 2021 23:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cjdb/dd379a16bec9edd8e3154ba0f8ad1688 to your computer and use it in GitHub Desktop.
Save cjdb/dd379a16bec9edd8e3154ba0f8ad1688 to your computer and use it in GitHub Desktop.
Pass-by-value vs pass-by-reference-to-const benchmarks

Benchmark: https://godbolt.org/z/rfW1Wqajh

ARM Cortex-A17 (armv7l), ChromeOS 32-bit

Run on (4 X 1800 MHz CPU s)
Load Average: 0.32, 0.28, 0.25
--------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
--------------------------------------------------------------
pass_by_value<1>          1.68 ns         1.67 ns    414112970
pass_by_ref<1>            1.67 ns         1.67 ns    419408110
pass_by_value<2>          1.67 ns         1.67 ns    419412510
pass_by_ref<2>            1.67 ns         1.67 ns    418970277
pass_by_value<4>          1.67 ns         1.67 ns    419323844
pass_by_ref<4>            1.67 ns         1.67 ns    419381729
pass_by_value<8>          1.67 ns         1.67 ns    419331900
pass_by_ref<8>            1.67 ns         1.67 ns    419371468
pass_by_value<16>         1.67 ns         1.67 ns    419222763
pass_by_ref<16>           1.11 ns         1.11 ns    629000047
pass_by_value<32>         3.90 ns         3.89 ns    179723855
pass_by_ref<32>           1.11 ns         1.11 ns    629070943
pass_by_value<64>         7.79 ns         7.79 ns     89862398
pass_by_ref<64>           1.11 ns         1.11 ns    629158343
pass_by_value<128>        21.2 ns         21.2 ns     33105503
pass_by_ref<128>          1.11 ns         1.11 ns    628866547
pass_by_value<256>        40.0 ns         39.9 ns     17457707
pass_by_ref<256>          1.11 ns         1.11 ns    628881383
pass_by_value<512>        57.9 ns         57.9 ns     12083922
pass_by_ref<512>          1.11 ns         1.11 ns    629033023
pass_by_value<1024>        102 ns          102 ns      6846794
pass_by_ref<1024>         1.11 ns         1.11 ns    629094032
pass_by_value<2048>        198 ns          197 ns      3568508
pass_by_ref<2048>         1.11 ns         1.11 ns    629041264
pass_by_value<4096>        388 ns          388 ns      1800457
pass_by_ref<4096>         1.11 ns         1.11 ns    629092375

ARM Cortex-A53 (aarch64), ChromeOS 32-bit

Run on (8 X 1989 MHz CPU s)
Load Average: 3.51, 3.27, 3.13
--------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
--------------------------------------------------------------
pass_by_value<1>          1.53 ns         1.51 ns    463829640
pass_by_ref<1>            1.51 ns         1.51 ns    463856645
pass_by_value<2>          1.51 ns         1.51 ns    463826665
pass_by_ref<2>            1.51 ns         1.51 ns    463858587
pass_by_value<4>          1.51 ns         1.51 ns    463853184
pass_by_ref<4>            1.51 ns         1.51 ns    463837112
pass_by_value<8>          1.51 ns         1.51 ns    463807759
pass_by_ref<8>            1.52 ns         1.51 ns    463855280
pass_by_value<16>         1.51 ns         1.51 ns    463826610
pass_by_ref<16>           1.01 ns         1.01 ns    695711654
pass_by_value<32>         2.65 ns         2.64 ns    264724781
pass_by_ref<32>           1.01 ns         1.01 ns    695773883
pass_by_value<64>         6.13 ns         6.10 ns    114812851
pass_by_ref<64>           1.01 ns         1.01 ns    695772728
pass_by_value<128>        18.2 ns         18.1 ns     38648337
pass_by_ref<128>          1.01 ns         1.01 ns    695774865
pass_by_value<256>        28.3 ns         28.2 ns     24842264
pass_by_ref<256>          1.01 ns         1.01 ns    695717082
pass_by_value<512>        48.5 ns         48.3 ns     14487966
pass_by_ref<512>          1.01 ns         1.01 ns    695719170
pass_by_value<1024>       79.4 ns         79.1 ns      8842548
pass_by_ref<1024>         1.01 ns         1.01 ns    695774395
pass_by_value<2048>        150 ns          149 ns      4688401
pass_by_ref<2048>         1.01 ns         1.01 ns    695768538
pass_by_value<4096>        291 ns          290 ns      2415661
pass_by_ref<4096>         1.01 ns         1.01 ns    695775204

Intel Core i5-8250U CPU, ChromeOS 64-bit

Run on (4 X 3400 MHz CPU s)
CPU Caches:
  L1 Data 32 KiB (x4)
  L1 Instruction 32 KiB (x4)
  L2 Unified 256 KiB (x4)
  L3 Unified 6144 KiB (x1)
Load Average: 0.14, 0.03, 0.01
--------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
--------------------------------------------------------------
pass_by_value<1>         0.297 ns        0.297 ns   1000000000
pass_by_ref<1>           0.296 ns        0.295 ns   1000000000
pass_by_value<2>         0.296 ns        0.295 ns   1000000000
pass_by_ref<2>           0.296 ns        0.296 ns   1000000000
pass_by_value<4>         0.296 ns        0.295 ns   1000000000
pass_by_ref<4>           0.296 ns        0.295 ns   1000000000
pass_by_value<8>         0.296 ns        0.295 ns   1000000000
pass_by_ref<8>           0.296 ns        0.295 ns   1000000000
pass_by_value<16>        0.297 ns        0.296 ns   1000000000
pass_by_ref<16>          0.296 ns        0.295 ns   1000000000
pass_by_value<32>        0.593 ns        0.591 ns   1000000000
pass_by_ref<32>          0.296 ns        0.295 ns   1000000000
pass_by_value<64>         1.18 ns         1.18 ns    592189853
pass_by_ref<64>          0.296 ns        0.296 ns   1000000000
pass_by_value<128>        2.37 ns         2.36 ns    295845564
pass_by_ref<128>         0.295 ns        0.295 ns   1000000000
pass_by_value<256>        4.13 ns         4.13 ns    169355920
pass_by_ref<256>         0.295 ns        0.295 ns   1000000000
pass_by_value<512>        6.52 ns         6.52 ns    107232892
pass_by_ref<512>         0.295 ns        0.295 ns   1000000000
pass_by_value<1024>       10.6 ns         10.6 ns     65855114
pass_by_ref<1024>        0.295 ns        0.295 ns   1000000000
pass_by_value<2048>       20.1 ns         20.1 ns     34864467
pass_by_ref<2048>        0.295 ns        0.295 ns   1000000000
pass_by_value<4096>       75.1 ns         75.1 ns      9315670
pass_by_ref<4096>        0.295 ns        0.295 ns   1000000000

Intel Xeon CPU, Debian

Run on (96 X 2000.17 MHz CPU s)
CPU Caches:
  L1 Data 32 KiB (x48)
  L1 Instruction 32 KiB (x48)
  L2 Unified 1024 KiB (x48)
  L3 Unified 39424 KiB (x2)
Load Average: 0.21, 0.32, 0.59
--------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
--------------------------------------------------------------
pass_by_value<1>         0.331 ns        0.330 ns   1000000000
pass_by_ref<1>           0.333 ns        0.333 ns   1000000000
pass_by_value<2>         0.501 ns        0.501 ns   1000000000
pass_by_ref<2>           0.330 ns        0.330 ns   1000000000
pass_by_value<4>         0.333 ns        0.333 ns   1000000000
pass_by_ref<4>           0.332 ns        0.332 ns   1000000000
pass_by_value<8>         0.335 ns        0.335 ns   1000000000
pass_by_ref<8>           0.335 ns        0.335 ns   1000000000
pass_by_value<16>        0.335 ns        0.334 ns   1000000000
pass_by_ref<16>          0.333 ns        0.333 ns   1000000000
pass_by_value<32>        0.674 ns        0.674 ns   1000000000
pass_by_ref<32>          0.337 ns        0.337 ns   1000000000
pass_by_value<64>         1.40 ns         1.40 ns    504301359
pass_by_ref<64>          0.352 ns        0.352 ns   1000000000
pass_by_value<128>        2.79 ns         2.79 ns    247285624
pass_by_ref<128>         0.351 ns        0.351 ns   1000000000
pass_by_value<256>        4.97 ns         4.96 ns    141354462
pass_by_ref<256>         0.353 ns        0.353 ns   1000000000
pass_by_value<512>        7.86 ns         7.86 ns     89783631
pass_by_ref<512>         0.348 ns        0.348 ns   1000000000
pass_by_value<1024>       12.7 ns         12.7 ns     54306431
pass_by_ref<1024>        0.352 ns        0.352 ns   1000000000
pass_by_value<2048>       24.3 ns         24.3 ns     28849555
pass_by_ref<2048>        0.353 ns        0.353 ns   1000000000
pass_by_value<4096>       47.6 ns         47.6 ns     14807572
pass_by_ref<4096>        0.355 ns        0.355 ns   1000000000

Apple M1

Run on (8 X 24.1207 MHz CPU s)
CPU Caches:
  L1 Data 64 KiB (x8)
  L1 Instruction 128 KiB (x8)
  L2 Unified 4096 KiB (x8)
Load Average: 2.94, 5.97, 4.86
--------------------------------------------------------------
Benchmark                    Time             CPU   Iterations
--------------------------------------------------------------
pass_by_value<1>         0.320 ns        0.320 ns   1000000000
pass_by_ref<1>           0.319 ns        0.319 ns   1000000000
pass_by_value<2>         0.315 ns        0.315 ns   1000000000
pass_by_ref<2>           0.317 ns        0.317 ns   1000000000
pass_by_value<4>         0.320 ns        0.320 ns   1000000000
pass_by_ref<4>           0.315 ns        0.315 ns   1000000000
pass_by_value<8>         0.314 ns        0.314 ns   1000000000
pass_by_ref<8>           0.314 ns        0.314 ns   1000000000
pass_by_value<16>        0.314 ns        0.314 ns   1000000000
pass_by_ref<16>          0.314 ns        0.314 ns   1000000000
pass_by_value<32>        0.356 ns        0.356 ns   1000000000
pass_by_ref<32>          0.315 ns        0.315 ns   1000000000
pass_by_value<64>        0.709 ns        0.709 ns    984459602
pass_by_ref<64>          0.321 ns        0.321 ns   1000000000
pass_by_value<128>        1.87 ns         1.87 ns    375998410
pass_by_ref<128>         0.314 ns        0.314 ns   1000000000
pass_by_value<256>        3.43 ns         3.43 ns    203587207
pass_by_ref<256>         0.314 ns        0.314 ns   1000000000
pass_by_value<512>        7.06 ns         7.06 ns    101180926
pass_by_ref<512>         0.319 ns        0.319 ns   1000000000
pass_by_value<1024>       15.4 ns         15.4 ns     45312723
pass_by_ref<1024>        0.314 ns        0.314 ns   1000000000
pass_by_value<2048>       29.3 ns         29.3 ns     24002688
pass_by_ref<2048>        0.314 ns        0.314 ns   1000000000
pass_by_value<4096>       54.2 ns         54.2 ns     12992075
pass_by_ref<4096>        0.316 ns        0.316 ns   1000000000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment