in reply to Re^9: Avoid Locking Entire Hashes
in thread Avoid Locking Entire Hashes

it's equally slow compared to locking the whole hash, though.

Hm. How many cores do you have?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^11: Avoid Locking Entire Hashes
by ikegami (Patriarch) on Jun 15, 2011 at 08:32 UTC

    Oh, you're surprised my slow results are much faster than yours. Core i7 720QM @ 1.66MHz (a quad core), 64-bit Windows 7 Pro, 32-bit ActivePerl 5.14. Here are my full hash locking figures:

    >perl a.pl Lock hash took 0.724 seconds >perl a.pl Lock hash took 0.750 seconds >perl a.pl Lock hash took 0.619 seconds
      my slow results are much faster than yours

      Yes. This is 32-bit 5.8.9 on 64-bit Vista on Core 2 Quad @2.4GHz:

      ## full hash C:\test>\perl32\bin\perl.exe 909437-1.pl Lock hash took 1.153 seconds ## refs my way C:\test>\perl32\bin\perl.exe 909437-2.pl Lock scalar ref took 3.057 seconds ## refs your way C:\test>\perl32\bin\perl.exe 909437-3.pl Lock scalars ref took 3.473 seconds

      And 64-bit 5.10.1:

      C:\test>909437-1 Lock hash took 1.189 seconds C:\test>909437-2 Lock scalar ref took 3.285 seconds C:\test>909437-3 Lock scalars ref took 3.434 seconds

      Maybe the internal semaphoring has improved substantially in 5.14? Time to consider an upgrade.

      Does 5.14 have much else to make the pain worth while?


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
Re^11: Avoid Locking Entire Hashes
by ikegami (Patriarch) on Jun 15, 2011 at 08:18 UTC

    4. (Upd: 8 visible cores due to hyperthreading )

    I don't understand the... surprise? To be clear, that's

    # ikegami lock ${ $mutexes{$k} }; ++$hash{$k};
    vs
    # browseruk lock ${ $hash{$k} }; ++${ $hash{$k} };

    (with proper initialisation)