|
Boost : |
From: brass goowy (brass_at_[hidden])
Date: 2007-02-15 13:37:44
Robert Ramey writes:
>brass goowy wrote:
>> B"H
>> Robert Ramey writes:
>>> Our experiments with 1.3 revealed that the single biggest time
>>> consumer with the binary archive was with the stream i/o. version
>>> 1.34 - is re-implemented in terms of std::streambuf rather than
>>> stream i/o. It is significantly faster because of this.
>>
>> I hope to test with 1.34 and report what I find.
>I'll be curious how much difference still exists.
I ran this
cvs -z3 -d:pserver:anonymous_at_[hidden]:/cvsroot/boost checkout boost
and I think I got the development version of 1.35. I've done a little bit of testing with it.
I've returned to Linux and compared saving a list<int> using release versions of the
libraries (I forgot to mention that with the Windows tests.) The lists had 20000 ints.
I'm using 4.0.3 of the gnu compiler and -O3 on all of these tests.
1.33.1 // I pass an ofstream to binary_oarchive
takes ~5200 microseconds
1.35 // I pass a filebuf to the binary_oarchive here
takes ~3900 microseconds
Ebenezer Enterprises
takes ~1200 microseconds
The stripped 1.35 executable is ~22,600 bytes and the stripped EE version
is ~8,200 bytes.
[...]
>>Does the 1.34 binary_oarchive take a streambuf
>> instead of an ofstream? Is this documented somewhere?
>It can take a stream buf or or an ofstream. If passed a stream, the stream
>buf is used directly. This preserves the common archive interface while
>gaining benefits of avoiding stream i/o operators.
>I double checked the CVS using the browser interface. 1.34 indeed includes
>updated documention and code which supports the streambuffer interface. It
>doesn't say much, because whether binary archives were implemented in terms
>of stream operators or streambuf calls was considered an implementation
>detail. The only difference from a user stand point is that one can create
>and use a streambuf without having to create a stream itself.
>In our tests we found avoid the stream io and using streambuf calls directly
>decreased the time required for vectos and arrays of primitives by a factor
>of 4 (if I remember correctly) - when used with a large buffer.
I haven't tested with vectors yet. But with list<int> I didn't see a factor of
4. It wasn't quite a factor of 2 between 1.33.1 and 1.35. I know 1.35 could
be in the middle of changes so I didn't want to do a bunch of tests on it.
I'm not sure how to get a version of 1.34. I just ran that command above and
built it and the libraries have 1_35 in the names... How do I get 1.34?
[ ...]
>> These may not be the most common application, but the
>> C++ middleware/serialization frameworks that I'm familiar with support
>> container classes. From my perspective the tests I chose are basic
>> things you have to have in order to support more complicated things.
>I took a cursory look at the www.ebenezer.net and the documentation. If you
>want I can include a pointer to it in the introduction to the serialization
>library - as I have with other libraries which have been brought to my
>attention.
That is up to you. But the address above is incorrect. The correct address
is below.
Shalom
Brian Wood
www.webEbenezer.net
_______________________________________
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk