[gambit-list] Speed on XML-parsing
Bradley Lucier
lucier at math.purdue.edu
Sat Aug 16 22:53:36 EDT 2008
Sorry, there was a bug in ssax#read-char, a corrected version is
included here. There doesn't seem to be a short and easily identifiable
"fast-path" in ##write-char, so I just defined ssax#write-char, which is
a copy of ##write-char, and defined write-char in terms of it in
ssax-sxml.scm.
Pretty strange that the tests in test-sxml.scm passed ...
I ran Marc's example of "build-your-own" string ports on my machine and
got:
frying-pan:~/programs/gambc-v4_2_3/ssax-sxml> gsi test-io-3
(time (convoluted-string-length1 s))
420 ms real time
420 ms cpu time (400 user, 20 system)
1 collection accounting for 17 ms real time (12 user, 4 system)
40016080 bytes allocated
8913 minor faults
no major faults
4000000
(time (convoluted-string-length2 s))
13 ms real time
12 ms cpu time (12 user, 0 system)
no collections
32 bytes allocated
no minor faults
no major faults
4000000
Pretty convincing. I then ran
(define (convoluted-string-length2 str)
(let ((port (open-input-string str)))
(let loop ((i 0))
(let ((c (read-char port)))
(if (char? c)
(loop (+ i 1))
i)))))
(define (convoluted-string-length3 port)
(let loop ((i 0))
(let ((c (read-char port)))
(if (char? c)
(loop (+ i 1))
i))))
(define (test)
(let ((s (make-string 4000000 #\!)))
(pretty-print (time (convoluted-string-length2 s)))
(let ((port (open-input-string s)))
(pretty-print (time (convoluted-string-length3 port))) )))
(test)
with the prefix I made for ssax-sxml.scm and got
frying-pan:~/programs/gambc-v4_2_3/ssax-sxml> gsi test-io
(time (convoluted-string-length2 s))
121 ms real time
124 ms cpu time (112 user, 12 system)
1 collection accounting for 17 ms real time (12 user, 4 system)
40016080 bytes allocated
8912 minor faults
no major faults
4000000
(time (convoluted-string-length3 port))
74 ms real time
76 ms cpu time (76 user, 0 system)
no collections
-16 bytes allocated
no minor faults
no major faults
4000000
So open-input-string on a length 4000000 string takes 50ms and allocates
40016080 bytes.
I wanted to test the effects of these changes on the "Gambit
Benchmarks", so I added the ssax-sxml.scm prefix to prefix-gambit.scm
and ran
./bench -s r6rs-fixflo-unsafe gambit 'cat compiler slatex tail wc dynamic sum1'
all the benchmarks that contain read-char, peek-char, write-char, or
eof-object?. Here are the results, first the cputime without the local
i/o procedures, then with:
cat: 880 ms 160 ms
compiler: 824 ms 820 ms
slatex: 356 ms 232 ms
tail: 692 ms 380 ms
wc: 400 ms 100 ms
dynamic: 732 ms 696 ms
sum1: 880 ms 896 ms
Judging from
http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Gambit_benchmarks
and
http://www.ccs.neu.edu/home/will/Twobit/benchmarksFakeR6Linux.html
this compilation strategy of adding local versions of read-char,
write-char, and peek-char, which I outline back in February 2007,
https://webmail.iro.umontreal.ca/pipermail/gambit-list/2007-February/001140.html
would allow gambit to improve in the heavy-duty character-oriented
benchmarks cat, wc, tail, and slatex.
Brad
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ssax-sxml.scm
Type: text/x-scheme
Size: 7026 bytes
Desc: not available
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20080816/fc7ec6b0/attachment.bin>
More information about the Gambit-list
mailing list