Lorenz Minder on Wed, 09 Sep 2009 06:03:27 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: TRY/CATCH is unnecessarily slow on OS X |
Hi Bill, BA: > On Thu, Sep 03, 2009 at 08:43:44AM +0200, Lorenz Minder wrote: > > Below are a number of measurements. Summary: > > > > * Cost setjmp vs no error checking: > > Mac OS: 12x (32 bit) 4.5x (64 bit) > > NetBSD: 2.5x (64 bit) > > Linux: +32% (G4) > > > > * Cost _setjmp vs no error checking: > > Mac OS: +21% (32 bit) +21% (64 bit) > > NetBSD: +17% (64 bit) > > Linux: +34% (G4) > > > > * C++ EH seems to cost somewhere between nothing and 8%. (But the > > library size goes up by ~10%.) > > But what is the performance penaly on the overall library (outside > exception) ? Good point. I had assumed it would not make any difference, because it shouldn't. But it would obviously be foolish not to test. I did 'make test-all' with versions compiled with -fexceptions, without that flag, and also with -fno-exceptions, just for good measure. The differences I see are in the range of promilles at most, and not always in favor of -fno-exceptions. The differences are most likely just noise. OS X, i386 (tests using data packages bailed out). (no added cflag) gp-sta = 284206 gp-dyn = 286990 w/ -fexceptions gp-sta = 284941 (+0.26%) gp-dyn = 287204 (+0.07%) NetBSD, amd64 (all tests running, resultant fails). w/ -fno-exceptions gp-sta = 248517 gp-dyn = 252819 (no added cflag) gp-sta = 248480 (-0.01%) gp-dyn = 252704 (-0.05%) w/ -fexceptions gp-sta = 247763 (-0.1%) gp-dyn = 252854 (+0.01%) Obviously the differences static vs dynamic are much larger than the -fexception differences. I should mention that the I patched TIMER() on NetBSD, so as to fix the problem of the erratic negative and high variance time measurements I saw. I have attached that patch for transparency. > now I found something about > > Linux Core2 6600 (64bit) : +20% > Linux Core2T5500 (64bit) : +18% > Linux Opteron(64bit): +14% > > So this confirms that the slowdown is around 20% as you said. Great. This looks very acceptable. I guess the question now is: Given that TRY/CATCH is meant only for internal use, and that a different error handling mechanism is under way, do you think the number of uses of those macros in libpari warrant a patch that uses _setjmp() when possible? Best, --Lorenz -- GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT! Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01
Attachment:
timer.patch
Description: Binary data