The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Bencher::Scenario::Perl::Hash

VERSION

This document describes version 0.050 of Bencher::Scenario::Perl::Hash (from Perl distribution Bencher-Scenarios-Perl), released on 2019-10-20.

SYNOPSIS

To run benchmark with default option:

 % bencher -m Perl::Hash

For more options (dump scenario, list/include/exclude/add participants, list/include/exclude/add datasets, etc), see bencher or run bencher --help.

DESCRIPTION

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.

BENCHMARK PARTICIPANTS

  • access (perl_code)

    Code template:

     no warnings "void"; state $hash = <hash>; for (<firstkey>..<lastkey>) { $hash->{$_} }
  • delete (perl_code)

    Code template:

     my $hash = <hash>; for (<firstkey>..<lastkey>) { delete $hash->{$_} }
  • insert (perl_code)

    Code template:

     my $hash = {}; for (<firstkey>..<lastkey>) { $hash->{$_} = 0 }
  • access (perl_code)

    Code template:

     no warnings "void"; state $hash = <hash>; for (<firstkey>..<lastkey>) { $hash->{$_} }
  • delete (perl_code)

    Code template:

     my $hash = <hash>; for (<firstkey>..<lastkey>) { delete $hash->{$_} }
  • insert (perl_code)

    Code template:

     my $hash = {}; for (<firstkey>..<lastkey>) { $hash->{$_} = 0 }

BENCHMARK DATASETS

  • h100

    A 100-key ("001".."100") hash

  • h1k

    A 1k-key ("0001".."1000") hash

  • h100

    A 100-key ("001".."100") hash

  • h1k

    A 1k-key ("0001".."1000") hash

SAMPLE BENCHMARK RESULTS

Run on: perl: v5.24.0, CPU: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz (4 cores), OS: GNU/Linux LinuxMint version 18.2, OS kernel: Linux version 4.8.0-53-generic.

Benchmark with default options (bencher -m Perl::Hash):

 #table1#
 +-------------+---------+-----------+-----------+------------+---------+---------+
 | participant | dataset | rate (/s) | time (μs) | vs_slowest |  errors | samples |
 +-------------+---------+-----------+-----------+------------+---------+---------+
 | insert      | h1k     |    5530   |  181      |    1       | 1.5e-07 |     171 |
 | delete      | h1k     |    6010   |  166      |    1.09    | 1.7e-07 |      33 |
 | access      | h1k     |   13839.3 |   72.2581 |    2.50172 | 2.1e-11 |      29 |
 | delete      | h100    |   72800   |   13.7    |   13.2     | 5.6e-09 |      28 |
 | insert      | h100    |   73500   |   13.6    |   13.3     | 6.5e-09 |      21 |
 | access      | h100    |  144000   |    6.94   |   26.1     | 3.3e-09 |      20 |
 +-------------+---------+-----------+-----------+------------+---------+---------+

To display as an interactive HTML table on a browser, you can add option --format html+datatables.

Run on: perl: v5.24.0, CPU: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz (4 cores), OS: GNU/Linux LinuxMint version 18.2, OS kernel: Linux version 4.8.0-53-generic.

Benchmark with bencher -m Perl::Hash --multiperl:

 #table1#
 +-------------+---------+-------------------+-----------+-----------+------------+---------+---------+---------+--------+
 | participant | dataset | perl              | rate (/s) | time (μs) | vs_slowest |  errors | samples | ds_tags | p_tags |
 +-------------+---------+-------------------+-----------+-----------+------------+---------+---------+---------+--------+
 | insert      | h1k     | perl-5.22.2       |      5530 | 181       |     1      | 1.8e-07 |      28 |         |        |
 | insert      | h1k     | perl-5.24.0       |      5610 | 178       |     1.01   | 1.6e-07 |      20 |         |        |
 | insert      | h1k     | perl-5.10.1       |      5710 | 175       |     1.03   | 1.5e-07 |      39 |         |        |
 | delete      | h1k     | perl-5.22.2       |      6090 | 164       |     1.1    | 1.6e-07 |      34 |         |        |
 | delete      | h1k     | perl-5.24.0       |      6280 | 159       |     1.14   |   5e-08 |      23 |         |        |
 | delete      | h1k     | perl-5.10.1       |      6500 | 154       |     1.18   | 1.5e-07 |      39 |         |        |
 | insert      | h1k     | stableperl-5.22.0 |      6540 | 153       |     1.18   | 8.2e-08 |     136 |         |        |
 | insert      | h1k     | cperl-5.22.1      |      6580 | 152       |     1.19   |   7e-08 |     105 |         |        |
 | delete      | h1k     | stableperl-5.22.0 |      7380 | 136       |     1.33   | 1.3e-07 |      50 |         |        |
 | delete      | h1k     | cperl-5.22.1      |      7400 | 135       |     1.34   | 4.9e-08 |      24 |         |        |
 | access      | h1k     | perl-5.24.0       |     15100 |  66.2     |     2.73   | 2.2e-08 |      30 |         |        |
 | access      | h1k     | perl-5.10.1       |     15200 |  65.9     |     2.74   | 5.3e-08 |      46 |         |        |
 | access      | h1k     | perl-5.22.2       |     15300 |  65.6     |     2.76   | 2.3e-08 |      26 |         |        |
 | access      | h1k     | stableperl-5.22.0 |     17900 |  55.8     |     3.24   | 2.7e-08 |      20 |         |        |
 | access      | h1k     | cperl-5.22.1      |     19100 |  52.2     |     3.46   | 2.5e-08 |      22 |         |        |
 | insert      | h100    | perl-5.22.2       |     61000 |  16.4     |    11      | 1.6e-08 |      54 |         |        |
 | insert      | h100    | perl-5.10.1       |     61100 |  16.4     |    11.1    | 6.1e-09 |      24 |         |        |
 | insert      | h100    | perl-5.24.0       |     67800 |  14.7     |    12.3    | 6.7e-09 |      20 |         |        |
 | delete      | h100    | perl-5.24.0       |     71500 |  14       |    12.9    | 1.4e-08 |      75 |         |        |
 | delete      | h100    | perl-5.22.2       |     73500 |  13.6     |    13.3    | 1.3e-08 |      44 |         |        |
 | delete      | h100    | perl-5.10.1       |     75000 |  13       |    14      | 1.3e-08 |      79 |         |        |
 | insert      | h100    | cperl-5.22.1      |     75600 |  13.2     |    13.7    | 6.1e-09 |      24 |         |        |
 | insert      | h100    | stableperl-5.22.0 |     79500 |  12.6     |    14.4    | 1.2e-08 |      36 |         |        |
 | delete      | h100    | cperl-5.22.1      |     86400 |  11.6     |    15.6    | 3.3e-09 |      20 |         |        |
 | delete      | h100    | stableperl-5.22.0 |     87000 |  11.5     |    15.7    | 1.1e-08 |      27 |         |        |
 | access      | h100    | perl-5.10.1       |    154060 |   6.491   |    27.862  | 3.4e-11 |      20 |         |        |
 | access      | h100    | perl-5.22.2       |    164569 |   6.07646 |    29.7627 |   0     |      20 |         |        |
 | access      | h100    | perl-5.24.0       |    168570 |   5.93227 |    30.4861 | 5.7e-12 |      21 |         |        |
 | access      | h100    | cperl-5.22.1      |    197000 |   5.08    |    35.6    | 1.4e-09 |      29 |         |        |
 | access      | h100    | stableperl-5.22.0 |    210600 |   4.7483  |    38.088  | 1.2e-11 |      20 |         |        |
 +-------------+---------+-------------------+-----------+-----------+------------+---------+---------+---------+--------+

To display as an interactive HTML table on a browser, you can add option --format html+datatables.

BENCHMARK NOTES

cperl (tested version: 5.22.1) and stableperl (tested version: 5.22.0) is around 15-20% faster than perl 5.22.1.

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/Bencher-Scenarios-Perl.

SOURCE

Source repository is at https://github.com/perlancar/perl-Bencher-Scenarios-Perl.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Bencher-Scenarios-Perl

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.

AUTHOR

perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2019, 2016 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.