D pointers
Lubos Lunak
l.lunak at suse.cz
Tue Oct 4 15:03:23 BST 2005
On Tuesday 04 of October 2005 13:32, Dirk Mueller wrote:
> On Saturday 01 October 2005 19:58, Lubos Lunak wrote:
> > To repeat it once more, unless somebody can find a problem with my KURL
> > benchmark then register pressure on our most significant platform seems
> > to cause about 2% performance loss and that's how valid the point is.
>
> Your benchmark is useless because my point about KURL was that inlining the
> accessors gives a speedup, not the flattening of d-pointer.
=====
Longer version: Attached is a slightly modified KURL + kurltest. Without any
d-pointer this test takes 6,71s. In kurl2.h there are three #defines,
PRIVATE_SIZE just causing allocation and deallocation of KURL2Private of the
given size. After setting it to 4 time goes up to 6,73s, the only difference
is one allocation in ctor and one deallocation in dtor. Note however that the
malloc implementation is optimized for very small sizes, changing
PRIVATE_SIZE to 70 changes the time to 6,81s. #defining also MOVE_PRIVATE
makes all the data members to be moved to the d-pointer, which also means one
more indirection and no inlining. That changes time to 6,84s. Additionally,
^^^^^^^^^^^^^^^^^^^^^^^
because the KURL2Private this way is only 32bytes here, i.e. small, setting
EXTRA_SIZE to 70 makes it exceed the size for the fastest allocation
mechanism, then the time is 6,87s.
=====
All inlines are written as following in the test code:
=====
kurl2.h:
#ifdef MOVE_PRIVATE
bool hasUser() const;
#else
bool hasUser() const { return !m_strUser.isEmpty(); }
#endif
kurl2.cpp:
#ifdef MOVE_PRIVATE
...
#define m_strUser d->m_strUser
...
#endif
#ifdef MOVE_PRIVATE
...
bool KURL2::hasUser() const { return !m_strUser.isEmpty(); }
...
#endif
=====
So #defining MOVE_PRIVATE removes performance effects of both flattening and
inlining, as far as I can say, so those 2% account for no inlining and
something more. Or am I missing something?
KURLTest doesn't seem to use loops over KURL or similar code that'd probably
get higher benefit from inlining, but then I doubt most real code would do
that either.
--
Lubos Lunak
KDE developer
---------------------------------------------------------------------
SuSE CR, s.r.o. e-mail: l.lunak at suse.cz , l.lunak at kde.org
Drahobejlova 27 tel: +420 2 9654 2373
190 00 Praha 9 fax: +420 2 9654 2374
Czech Republic http://www.suse.cz/
More information about the kde-core-devel
mailing list