March 26, 2011 inline functions | ||||
---|---|---|---|---|
| ||||
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. |
March 28, 2011 Re: inline functions | ||||
---|---|---|---|---|
| ||||
Posted in reply to Caligo | On Fri, 25 Mar 2011 22:04:20 -0400, Caligo <iteronvexor@gmail.com> 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. ref parameters used to make functions not be inlined, but apparently that was fixed: http://d.puremagic.com/issues/show_bug.cgi?id=2008 The best thing to do is check the disassembly to see if the call is being inlined. Also, if you want more help besides guessing, a complete working program is good to have. -Steve |
Copyright © 1999-2021 by the D Language Foundation