On Wed, Jan 20, 2010 at 14:17, Jacob Rief <jacob.r...@gmail.com> wrote: > Hello Kenton, > now I did some benchmarks, while Seek'ing though a FileInputStream. > The testing code looks like this: > > boost::posix_time::ptime > t0(boost::posix_time::microsec_clock::local_time()); // initialize > boost::posix_time > boost::shared_ptr<google::protobuf::io::FileInputStream> > fileInStream = new > google::protobuf::io::FileInputStream(fileDescriptor); > boost::posix_time::ptime t1(boost::posix_time::microsec_clock::local_time()); > // using Seek(), the function available through my patch > fileInStream->Seek(offset, whence); > boost::posix_time::ptime t2(boost::posix_time::microsec_clock::local_time()); > // this is the default method of achieving the same > ::lseek64(fileDescriptor, offset, whence); > fileInStream.reset(new > google::protobuf::io::FileInputStream(fileDescriptor)); > boost::posix_time::ptime t3(boost::posix_time::microsec_clock::local_time()); > std::cerr << "t1: " << boost::posix_time::time_period(t1, > t2).length() << " t2: " << boost::posix_time::time_period(t2, > t3).length() << std::endl;
Can you run this microbenchmark in a loop, say 10^6 times and use a couple of different offsets you jump back and forth - and then time the whole loop ? Just a single measurement is not terribly reliable even though it would at least suggest a trend here. > > and on my Intel Core2 Duo CPU E8400 (3.00GHz) with 4GB of RAM, > gcc-Version 4.4.1 20090725, compiled with -O2 > I get these numbers: > t1: 00:00:00.000001 t2: 00:00:00.000003 > t1: 00:00:00.000001 t2: 00:00:00.000003 > t1: 00:00:00.000001 t2: 00:00:00.000004 > t1: 00:00:00.000001 t2: 00:00:00.000007 > t1: 00:00:00.000001 t2: 00:00:00.000002 > t1: 00:00:00.000001 t2: 00:00:00.000003 > t1: 00:00:00.000002 t2: 00:00:00.000003 > t1: 00:00:00.000001 t2: 00:00:00.000004 > t1: 00:00:00.000001 t2: 00:00:00.000004 > t1: 00:00:00.000001 t2: 00:00:00.000003 > t1: 00:00:00.000001 t2: 00:00:00.000004 > > In absolute numbers, ~1 microsecond compared to 3-4 microseconds is > not a big difference, > but from a relative point of view, direct Seek'ing is much faster than > object recreation. And since > I have to seek a lot in the FileInputStream, the measured times will > accumulate. > > Regards, Jacob > > 2010/1/19 Kenton Varda <ken...@google.com>: >> Did you do any tests to determine if the performance difference is relevant? >> >> On Mon, Jan 18, 2010 at 3:14 PM, Jacob Rief <jacob.r...@gmail.com> wrote: >>> >>> Hello Kenton, >>> >>> 2010/1/18 Kenton Varda <ken...@google.com>: >>> (...snip...) >>> > As for code cleanliness, I find the Reset() method awkward since the >>> > user >>> > has to remember to call it at the same time as they do some other >>> > operation, >>> > like seeking the file descriptor. Either calling Reset() or seeking the >>> > file descriptor alone will put the object in an inconsistent state. It >>> > might make more sense to offer an actual Seek() method which can safely >>> > perform both operations together with an interface that is not so easy >>> > to >>> > misuse. >>> >>> I agree, a 64bit Seek function would definitely be safer. >>> Here is a patch for version 2.3.0 to add FileInputStream::Seek(). The >>> patch also fixes a compiler warning. >>> I also adopted my library to use this function and it seems to work. >>> Regards, Jacob >> >> > > -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To post to this group, send email to proto...@googlegroups.com. > To unsubscribe from this group, send email to > protobuf+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/protobuf?hl=en. > > > >
-- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to proto...@googlegroups.com. To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/protobuf?hl=en.