inline functions
Jonathan M Davis
jmdavisProg at gmx.com
Fri Mar 25 21:56:49 PDT 2011
On 2011-03-25 21:21, Caligo wrote:
> On Fri, Mar 25, 2011 at 10:49 PM, Jonathan M Davis <jmdavisProg at gmx.com>
wrote:
> > On 2011-03-25 19:04, Caligo wrote:
> >> T[3] data;
> >>
> >> T dot(const ref Vector o){
> >> return data[0] * o.data[0] + data[1] * o.data[1] + data[2] *
> >> o.data[2]; }
> >>
> >> T LengthSquared_Fast(){ return data[0] * data[0] + data[1] * data[1] +
> >> data[2] * data[2]; }
> >> T LengthSquared_Slow(){ return dot(this); }
> >>
> >>
> >> The faster LengthSquared() is twice as fast, and I've test with GDC
> >> and DMD. Is it because the compilers don't inline-expand the dot()
> >> function call? I need the performance, but the faster version is too
> >> verbose.
> >
> > It sure sounds like it didn't inline it. Did you compile with -inline? If
> > you didn't then it definitely won't inline it.
> >
> > - Jonathan M Davis
>
> I didn't know I had to supply GDC with -inline, so I did, and it did
> not help. In fact, with the -inline option the performance gets worse
> (for DMD and GDC), even for code that doesn't contain any function
> calls. In any case, code compiled with DMD is always behind GDC when
> it comes to performance.
I don't know what gdc does, but you have to use -inline with dmd if you want
it to inline anything. It also really doesn't make any sense at all that
inlining would harm performance. If that's the case, something weird is going
on. I don't see how inlining could _ever_ harm performance unless it just
makes the program's binary so big that _that_ harms performance. That isn't
very likely though. So, if using -inline is harming performance, then
something weird is definitely going on.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list