On Fri, Mar 25, 2011 at 11:56 PM, Jonathan M Davis <jmdavisp...@gmx.com> wrote: > On 2011-03-25 21:21, Caligo wrote: >> On Fri, Mar 25, 2011 at 10:49 PM, Jonathan M Davis <jmdavisp...@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 >
The only time that -inline has no effect is when I turn on -O3. This is also when the code performs the best. I've never used -O3 in my C++ code, but I guess things are different in D even with the same back-end.