From michael.m.spiegel at gmail.com  Mon Oct  3 14:46:23 2011
From: michael.m.spiegel at gmail.com (Michael Spiegel)
Date: Mon, 3 Oct 2011 08:46:23 -0400
Subject: [Rd] serialize/unserialize vector improvement
In-Reply-To: <CANwu5-oZXZjThFof++sf9bE2xYt-1g60+HjhA3vogD7Qnm_m6Q@mail.gmail.com>
References: <CANwu5-oZXZjThFof++sf9bE2xYt-1g60+HjhA3vogD7Qnm_m6Q@mail.gmail.com>
Message-ID: <CANwu5-qjBe_3-KOH2QvufgBVnt8URRvnYz4Z9Be7m+g0KdeFVA@mail.gmail.com>

Any thoughts? I haven't heard any feedback on this patch.

Thanks!
--Michael

On Wed, Sep 28, 2011 at 3:10 PM, Michael Spiegel
<michael.m.spiegel at gmail.com> wrote:
> 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))) }
>



[Rd] serialize/unserialize vector improvement
Michael Spiegel