From michael.m.spiegel at gmail.com  Wed Sep 28 21:10:49 2011
From: michael.m.spiegel at gmail.com (Michael Spiegel)
Date: Wed, 28 Sep 2011 15:10:49 -0400
Subject: [Rd] serialize/unserialize vector improvement
Message-ID: <CANwu5-oZXZjThFof++sf9bE2xYt-1g60+HjhA3vogD7Qnm_m6Q@mail.gmail.com>

Hi folks,

I've attached a patch to the svn trunk that improves the performance
of the serialize/unserialize interface for vector types. The current
implementation: a) invokes the R_XDREncode operation for each element
of the vector type, and b) uses a switch statement to determine the
stream type for each element of the vector type. I've added
R_XDREncodeVector/R_XDRDecodeVector functions that accept N elements
at a time, and I've reorganized the implementation so that the stream
type is not queried once per element.

In the following microbenchmark (below), I've observed performance
improvements of about x2.4.  In a real benchmark that is using the
serialization interface to make MPI calls, I see about a 10%
improvement in performance.

Cheers,
--Michael

microbenchmark:

input <- matrix(1:100000000, 10000, 10000)
output <- serialize(input, NULL)
for(i in 1:10) { print(system.time(serialize(input, NULL))) }
for(i in 1:10) { print(system.time(unserialize(output))) }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: serialize-vector-performance.patch
Type: text/x-patch
Size: 10234 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-devel/attachments/20110928/47381102/attachment.bin>


[Rd] serialize/unserialize vector improvement
Michael Spiegel