[ssax-sxml] Re: Ssax speed
Brought to you by:
oleg
From: <ol...@po...> - 2003-01-20 20:44:47
|
Hello! The subject of SSAX performance (in comparison with Expat) is discussed at some length in a paper 'A better XML parser through functional programming'. The paper is published in LNCS volume 2257 http://link.springer.de/link/service/series/0558/tocs/t2257.htm and Copyright is held by Springer-Verlag. The copyright agreement lets an author to make his paper available of his web page provided that the Copyright is mentioned (as above) -- and after a suitable waiting period, which has expired. Therefore, you can read the paper at http://pobox.com/~oleg/ftp/papers/XML-parsing.ps.gz It should be noted that the paper is written in four languages not counting English (and thus may appear somewhat confusing). Section 4.2 of the paper compares SSAX and Expat and discusses performance issues. > Bigloo version was compiled with the statement: bigloo test.scm and > then ./a.out b.xml If the optimization is not enabled, the performance is expected to be poor. At least -O3 should be specified (and perhaps, -farithmetic: SSAX does not use inexact arithmetic). It is also a good idea to also add -copt "-O3 -fomit-frame-pointer -mcpu=i686" I have compiled Bigloo itself (and its run-time libraries) with these flags. -fomit-frame-pointer is really a useful flag when compiling C code generated by a Scheme-to-C compiler. The flag -fomit-frame-pointer is safe. The flag is not on by default because it makes debugging the compiled code with gdb all but impossible. I believe in debugging by code examination and assertions, therefore, I don't use gdb. > I am not sure if compiling like this is fair to the other languages, as most > error/type checks seems to be turned off? To turn off error/type checks, you have to explicitly specify a flag -unsafe. Code compiled at high optimization levels will generally have fewer typechecks -- because the compiler figured out that some of them are redundant and can be _safely_ removed. The flag -unsafe eliminates checks regardless of their redundancy. Joerg F. Wittenberger wrote: > Askemos rscheme/regexp 3 s > Askemos chicken/ssax 25 s > So the question is......why? Perhaps the answer lies in compilation flags? Have you tried the command line like the following > csc -O3 -d0 -disable-interrupts -bkav -C "-mcpu=pentium -march=pentium -mpreferred-stack-boundary=2" cg.scm -o cg-chicken (mentioned in a recent post by Felix regarding a Gulch benchmark). The -fomit-frame-pointer flag to GCC is also quite useful. |