in reply to Efficiency: Recursive functions while de-subbing my program

Nope. Most probably not worth it. 100,000 function calls is peanuts.

  • Comment on Re: Efficiency: Recursive functions while de-subbing my program

Replies are listed 'Best First'.
Re^2: Efficiency: Recursive functions while de-subbing my program
by BrowserUk (Patriarch) on Jul 12, 2013 at 22:53 UTC
    100,000 function calls is peanuts.

    Peanuts are expensive:

    sub x{ my( $n ) = @_; $n };; cmpthese -1, { a => q[ my $n; $n += $_ for 1 .. 1e5 ], b => q[ my $n; $n += x($_) for 1 .. 1e5 ] };; Rate b a b 2.14/s -- -80% a 10.7/s 399% --

    That's 400% faster; a 4 times improvement; 1/5th of the runtime; simply by avoiding 100,000 function calls.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    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.

      That's about 1/3rd of one second. 100k function calls are indeed peanuts. And peanuts are indeed cheap. Showing a peanut next to a dust mite doesn't actually make the peanut larger or more expensive.

      Doing nothing useful a whopping 400% faster is not actually a useful accomplishment. I can do nothing useful over 400,000,000% faster by actually doing nothing. That is one enormously impressive number. And it means nothing at all.

      - tye        

        Doing nothing useful a whopping 400% faster is not actually a useful accomplishment.

        The point of the benchmark was, that before you get around to doing anything useful with a subroutine, you have to pay the price of doing that "nothing useful". (That's specifically for Tye, because I know the other readers will have already got that.)

        We've been here before, and the final outcome of that thread hasn't changed.

        And the reality of OO's propensity to use small subs hasn't changed either, except that with the advent of Moouse et al. each method call can involve half a dozen subroutines calls once you've used before, after, around, inbetween, isa, wanna, coulda etc.

        And the reality of the affect of Perl's subroutine overhead relative to that of other languages hasn't changed either.

        So, whilst in the OPs target case, subroutine overhead is a red-herring, dismissing it completely as peanuts is a bad message in the wider scheme of things.

        As with all things, optimisation is about understanding what to do when; and when not; with the key being understanding, not blanket dismissal.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        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.
        c