cost of calling class function

Johan Engelen via Digitalmars-d digitalmars-d at puremagic.com
Thu Feb 23 09:02:55 PST 2017


On Thursday, 23 February 2017 at 16:25:34 UTC, Johan Engelen 
wrote:
> On Wednesday, 22 February 2017 at 23:49:43 UTC, DuĊĦan Pavkov 
> wrote:
>> 
>> If the function is outside of class code runs much faster. I'm 
>> obviously doing something wrong and would appreciate any help 
>> with this.
>
> Interesting test case, thanks :-)
> Adding "final" to the class method nullifies the speed 
> difference.
> Somehow, LDC does not devirtualize the call in your testcase. 
> Without the for-loops the call is nicely devirtualized, so no 
> performance difference.

We're in good company: both clang and gcc also do not 
devirtualize the call when the loopcount is too large (when the 
loop count is 4, the indirect calls are gone, when it is 160, 
they are back).

Btw, with PGO, the performance is 4 ms(direct call) vs 6 ms 
(virtual call). Pathological, but still.

I am submitting a DConf talk on optimization and the cost of D 
idioms. This gave me some new ideas to present, thanks :)

-Johan


More information about the Digitalmars-d mailing list