Boost logo

Boost :

Subject: Re: [boost] [xpressive] Performance Tuning?
From: Eric Niebler (eric_at_[hidden])
Date: 2009-07-01 18:09:37


Dave Jenkins wrote:
> Robert Stuart wrote:
>> Whoa! The performance just shot up to a mere 6X the custom code (from
>> 175X). That might well be fast enough to keep the Xpressive version
>> because of its readability!
>
> Can you create thread-local match_results objects and reuse them? If
> so, I think you'll see parsing dwindle to almost nothing and your
> semantic actions will account for the bulk of the time spent.

Dave, thanks for spotting the obvious perf problem I missed. I can
confirm that reusing the match results object largely eliminates the
remaining performance problem. I tried 3 different scenarios:

1) The original code
2) Static const regexes
3) Static const regexes with reused match results objects

I ran each config for 1000000 iterations and got roughly these numbers:

1) ~950 sec
2) ~45 sec
3) ~9 sec

So reusing the match results object (3) results in a 5x speedup over
just using static const regexes (2). That almost completely erases any
performance advantage of the hand-crafted parsing code.

I'll also point out this section of the docs:
http://www.boost.org/doc/libs/1_39_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.tips_n_tricks

Both of the above optimizations (reuse regexes and match_results
objects) are recommended there.

Thanks,

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk