NAME Bencher::Scenario::List::MoreUtils - Benchmark List::MoreUtils::PP vs List::MoreUtils::XS VERSION This document describes version 0.041 of Bencher::Scenario::List::MoreUtils (from Perl distribution Bencher-Scenario-List-MoreUtils), released on 2022-05-06. SYNOPSIS To run benchmark with default option: % bencher -m List::MoreUtils To run module startup overhead benchmark: % bencher --module-startup -m List::MoreUtils For more options (dump scenario, list/include/exclude/add participants, list/include/exclude/add datasets, etc), see bencher or run "bencher --help". DESCRIPTION EARLY VERSION, ONLY A FEW FUNCTIONS HAVE BEEN BENCHMARKED. Packaging a benchmark script as a Bencher scenario makes it convenient to include/exclude/add participants/datasets (either via CLI or Perl code), send the result to a central repository, among others . See Bencher and bencher (CLI) for more details. BENCHMARKED MODULES Version numbers shown below are the versions used when running the sample benchmark. List::MoreUtils::PP 0.430 List::MoreUtils::XS 0.430 BENCHMARK PARTICIPANTS * List::MoreUtils::PP::uniq (perl_code) [arg1] Function call template: List::MoreUtils::PP::uniq(@{}) * List::MoreUtils::XS::uniq (perl_code) [arg1] Code template: List::MoreUtils::uniq(@{}) * List::MoreUtils::PP::minmax (perl_code) [arg1] Function call template: List::MoreUtils::PP::minmax(@{}) * List::MoreUtils::XS::minmax (perl_code) [arg1] Code template: List::MoreUtils::minmax(@{}) * List::MoreUtils::PP::firstidx (perl_code) [arg1] Code template: List::MoreUtils::PP::firstidx(sub{$_==-1}, @{}) * List::MoreUtils::XS::firstidx (perl_code) [arg1] Code template: List::MoreUtils::firstidx(sub{$_==-1}, @{}) BENCHMARK DATASETS * num10 * num100 * num1000 BENCHMARK SAMPLE RESULTS Sample benchmark #1 Run on: perl: *v5.34.0*, CPU: *Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz (4 cores)*, OS: *GNU/Linux LinuxMint version 19*, OS kernel: *Linux version 5.3.0-68-generic*. Benchmark command (default options): % bencher -m List::MoreUtils Result formatted as table: #table1# +-------------------------------+---------+-----------+------------+-----------------------+-----------------------+---------+---------+ | participant | dataset | rate (/s) | time (μs) | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples | +-------------------------------+---------+-----------+------------+-----------------------+-----------------------+---------+---------+ | List::MoreUtils::PP::firstidx | num1000 | 4310 | 232 | 0.00% | 68620.78% | 5.3e-08 | 20 | | List::MoreUtils::PP::uniq | num1000 | 4300 | 230 | 0.55% | 68243.38% | 4.8e-07 | 20 | | List::MoreUtils::XS::uniq | num1000 | 5600 | 180 | 30.51% | 52554.65% | 2.1e-07 | 20 | | List::MoreUtils::PP::minmax | num1000 | 8720 | 115 | 102.42% | 33850.21% | 5.3e-08 | 20 | | List::MoreUtils::XS::firstidx | num1000 | 31000 | 33 | 611.35% | 9560.55% | 4e-08 | 20 | | List::MoreUtils::PP::firstidx | num100 | 42400.6 | 23.5846 | 884.80% | 6878.16% | 0 | 20 | | List::MoreUtils::XS::minmax | num1000 | 48400 | 20.7 | 1023.99% | 6014.01% | 6e-09 | 25 | | List::MoreUtils::PP::uniq | num100 | 55495.7 | 18.0194 | 1188.95% | 5231.55% | 0 | 31 | | List::MoreUtils::PP::minmax | num100 | 85764 | 11.6599 | 1891.96% | 3349.91% | 0 | 20 | | List::MoreUtils::XS::uniq | num100 | 96800 | 10.3 | 2147.28% | 2957.96% | 3.3e-09 | 20 | | List::MoreUtils::XS::firstidx | num100 | 289948 | 3.44889 | 6634.36% | 920.45% | 0 | 22 | | List::MoreUtils::PP::uniq | num10 | 352000 | 2.84 | 8075.78% | 740.54% | 8.3e-10 | 20 | | List::MoreUtils::PP::firstidx | num10 | 375000 | 2.67 | 8602.35% | 689.68% | 6.6e-10 | 32 | | List::MoreUtils::XS::minmax | num100 | 462586 | 2.16176 | 10644.04% | 539.62% | 0 | 21 | | List::MoreUtils::PP::minmax | num10 | 675000 | 1.48 | 15579.94% | 338.27% | 1.2e-09 | 22 | | List::MoreUtils::XS::uniq | num10 | 857878 | 1.16567 | 19825.12% | 244.90% | 0 | 20 | | List::MoreUtils::XS::firstidx | num10 | 1891970 | 0.528549 | 43843.04% | 56.39% | 0 | 20 | | List::MoreUtils::XS::minmax | num10 | 3000000 | 0.34 | 68620.78% | 0.00% | 4.2e-10 | 20 | +-------------------------------+---------+-----------+------------+-----------------------+-----------------------+---------+---------+ The above result formatted in Benchmark.pm style: Rate LMP:f num1000 LMP:u num1000 LMX:u num1000 LMP:m num1000 LMX:f num1000 LMP:f num100 LMX:m num1000 LMP:u num100 LMP:m num100 LMX:u num100 LMX:f num100 LMP:u num10 LMP:f num10 LMX:m num100 LMP:m num10 LMX:u num10 LMX:f num10 LMX:m num10 LMP:f num1000 4310/s -- 0% -22% -50% -85% -89% -91% -92% -94% -95% -98% -98% -98% -99% -99% -99% -99% -99% LMP:u num1000 4300/s 0% -- -21% -50% -85% -89% -91% -92% -94% -95% -98% -98% -98% -99% -99% -99% -99% -99% LMX:u num1000 5600/s 28% 27% -- -36% -81% -86% -88% -89% -93% -94% -98% -98% -98% -98% -99% -99% -99% -99% LMP:m num1000 8720/s 101% 100% 56% -- -71% -79% -82% -84% -89% -91% -97% -97% -97% -98% -98% -98% -99% -99% LMX:f num1000 31000/s 603% 596% 445% 248% -- -28% -37% -45% -64% -68% -89% -91% -91% -93% -95% -96% -98% -98% LMP:f num100 42400.6/s 883% 875% 663% 387% 39% -- -12% -23% -50% -56% -85% -87% -88% -90% -93% -95% -97% -98% LMX:m num1000 48400/s 1020% 1011% 769% 455% 59% 13% -- -12% -43% -50% -83% -86% -87% -89% -92% -94% -97% -98% LMP:u num100 55495.7/s 1187% 1176% 898% 538% 83% 30% 14% -- -35% -42% -80% -84% -85% -88% -91% -93% -97% -98% LMP:m num100 85764/s 1889% 1872% 1443% 886% 183% 102% 77% 54% -- -11% -70% -75% -77% -81% -87% -90% -95% -97% LMX:u num100 96800/s 2152% 2133% 1647% 1016% 220% 128% 100% 74% 13% -- -66% -72% -74% -79% -85% -88% -94% -96% LMX:f num100 289948/s 6626% 6568% 5119% 3234% 856% 583% 500% 422% 238% 198% -- -17% -22% -37% -57% -66% -84% -90% LMP:u num10 352000/s 8069% 7998% 6238% 3949% 1061% 730% 628% 534% 310% 262% 21% -- -5% -23% -47% -58% -81% -88% LMP:f num10 375000/s 8589% 8514% 6641% 4207% 1135% 783% 675% 574% 336% 285% 29% 6% -- -19% -44% -56% -80% -87% LMX:m num100 462586/s 10631% 10539% 8226% 5219% 1426% 990% 857% 733% 439% 376% 59% 31% 23% -- -31% -46% -75% -84% LMP:m num10 675000/s 15575% 15440% 12062% 7670% 2129% 1493% 1298% 1117% 687% 595% 133% 91% 80% 46% -- -21% -64% -77% LMX:u num10 857878/s 19802% 19631% 15341% 9765% 2730% 1923% 1675% 1445% 900% 783% 195% 143% 129% 85% 26% -- -54% -70% LMX:f num10 1891970/s 43793% 43415% 33955% 21657% 6143% 4362% 3816% 3309% 2106% 1848% 552% 437% 405% 308% 180% 120% -- -35% LMX:m num10 3000000/s 68135% 67547% 52841% 33723% 9605% 6836% 5988% 5199% 3329% 2929% 914% 735% 685% 535% 335% 242% 55% -- Legends: LMP:f num10: dataset=num10 participant=List::MoreUtils::PP::firstidx LMP:f num100: dataset=num100 participant=List::MoreUtils::PP::firstidx LMP:f num1000: dataset=num1000 participant=List::MoreUtils::PP::firstidx LMP:m num10: dataset=num10 participant=List::MoreUtils::PP::minmax LMP:m num100: dataset=num100 participant=List::MoreUtils::PP::minmax LMP:m num1000: dataset=num1000 participant=List::MoreUtils::PP::minmax LMP:u num10: dataset=num10 participant=List::MoreUtils::PP::uniq LMP:u num100: dataset=num100 participant=List::MoreUtils::PP::uniq LMP:u num1000: dataset=num1000 participant=List::MoreUtils::PP::uniq LMX:f num10: dataset=num10 participant=List::MoreUtils::XS::firstidx LMX:f num100: dataset=num100 participant=List::MoreUtils::XS::firstidx LMX:f num1000: dataset=num1000 participant=List::MoreUtils::XS::firstidx LMX:m num10: dataset=num10 participant=List::MoreUtils::XS::minmax LMX:m num100: dataset=num100 participant=List::MoreUtils::XS::minmax LMX:m num1000: dataset=num1000 participant=List::MoreUtils::XS::minmax LMX:u num10: dataset=num10 participant=List::MoreUtils::XS::uniq LMX:u num100: dataset=num100 participant=List::MoreUtils::XS::uniq LMX:u num1000: dataset=num1000 participant=List::MoreUtils::XS::uniq Sample benchmark #2 Benchmark command (benchmarking module startup overhead): % bencher -m List::MoreUtils --module-startup Result formatted as table: #table2# +---------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+ | participant | time (ms) | mod_overhead_time | pct_faster_vs_slowest | pct_slower_vs_fastest | errors | samples | +---------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+ | List::MoreUtils::XS | 9 | 6 | 0.00% | 187.07% | 0.00021 | 20 | | List::MoreUtils::PP | 9 | 6 | 10.12% | 160.69% | 0.00012 | 20 | | perl -e1 (baseline) | 3 | 0 | 187.07% | 0.00% | 7.2e-05 | 20 | +---------------------+-----------+-------------------+-----------------------+-----------------------+-----------+---------+ The above result formatted in Benchmark.pm style: Rate LM:X LM:P perl -e1 (baseline) LM:X 111.1/s -- 0% -66% LM:P 111.1/s 0% -- -66% perl -e1 (baseline) 333.3/s 200% 200% -- Legends: LM:P: mod_overhead_time=6 participant=List::MoreUtils::PP LM:X: mod_overhead_time=6 participant=List::MoreUtils::XS perl -e1 (baseline): mod_overhead_time=0 participant=perl -e1 (baseline) To display as an interactive HTML table on a browser, you can add option "--format html+datatables". HOMEPAGE Please visit the project's homepage at . SOURCE Source repository is at . AUTHOR perlancar CONTRIBUTING To contribute, you can send patches by email/via RT, or send pull requests on GitHub. Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via: % prove -l If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional steps required beyond that are considered a bug and can be reported to me. COPYRIGHT AND LICENSE This software is copyright (c) 2022, 2017, 2016, 2015 by perlancar . This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. BUGS Please report any bugs or feature requests on the bugtracker website When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.