Language Plugin Parsers / KDevelop-PG-Qt Performance

Milian Wolff mail at milianw.de
Sun Oct 25 01:08:50 UTC 2009


Hey guys,

after waiting quite a bit for my benchmark to finish in callgrind I just 
aborted it and looked at the data it produced in the meantime. And boy was I 
surprised!

75.67% of the time was spent in KDevPG::LocationTable::positionAt() !

I think the problem is that my test file is very large, it has 79929 lines, and 
the function above goes everytime from 0 to X where X is the line that has a 
proper index...

I have several ideas how to improve the situation:

1) store last looked up line + index and make the search relative to that:
assuming that, during declaration building, the search is always incremental, 
or at least we lookup stuff near to each other, this should greatly increase 
performance.

2) dunno, if the following algorithm has a name (I bet it does), but it would 
work like this:
- look at index of line in the middle of the list
- if index is good, finish
- if index is too high, use lower half of remaining list, continue from 
beginning
- if index is too low, use upper half of remaining list, continue from 
beginning
This should at least reduce the number of iterations required. If I'm not 
mistaken it would take log_2(total number of lines) to find the correct index, 
in my case a maximum of 17. Of course the code would become much more 
complicated, as we don't want to copy lists, but always operate on the base 
list...

I think I'll implement both tomorrow and see what I get. Both somehow interest 
me :) Do you have any other ideas? I bet you "real" computer science guys have 
learned such stuff in school and can solve it easily? Is there maybe something 
already available in algorithm.h or the Qt equivalent?

You can download the data (highly compressed) from 
http://milianw.de/files/kdevelop/callgrind_data.7z
-- 
Milian Wolff
mail at milianw.de
http://milianw.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20091025/35f3b6e5/attachment.sig>


More information about the KDevelop-devel mailing list