Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Benchmark: Constant List in Hash Slice

by dave_the_m (Monsignor)
on Mar 13, 2019 at 14:10 UTC ( #1231226=note: print w/replies, xml ) Need Help??


in reply to Benchmark: Constant List in Hash Slice

Literal keys in hash subscripts and hash slices have the the hash (as in checksum) values of their strings pre-computed, and the string part of the string constant is stored in such a way that its easy and quick to pass directly to the hash lookup API functions.

Technically: at compile time, the PV part of the const SV is converted to a HEK, with SvPV(sv) pointing to the string part within the HEK. So it looks like a string but is also a HEK.

Dave.

  • Comment on Re: Benchmark: Constant List in Hash Slice

Replies are listed 'Best First'.
Re^2: Benchmark: Constant List in Hash Slice
by LanX (Archbishop) on Mar 13, 2019 at 17:38 UTC
    OK I thought the inlining of the constant list might happen early enough to trigger this pre-computation.

    But the optimizer doesn't see the inlined keys as literal strings, so it has to calculate this lookup-index dynamically at run-time.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Re^2: Benchmark: Constant List in Hash Slice
by LanX (Archbishop) on Mar 14, 2019 at 12:03 UTC
    does this also explain why using a normal @array variable is faster than a constant list?

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      does this also explain why using a normal @array variable is faster than a constant list?
      No. That's because constant arrays are implemented as constant array refs. So
      use constant foo qw(a b c); @a = $h{foo()}
      is implemented roughly as
      use constant foo [qw(a b c)]; @a = $h{@{foo()}}
      And neither (as far as I'm aware) get the compile-time HEK treatment

      Dave.

        Oh that's good to know, thanks! :)

        Hence constant arrays won't help much for tuning performance.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1231226]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (6)
As of 2019-05-27 07:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you enjoy 3D movies?



    Results (155 votes). Check out past polls.

    Notices?
    • (Sep 10, 2018 at 22:53 UTC) Welcome new users!