[Rd] Speed of runif() on different Operating Systems
Martin Becker
martin.becker at mx.uni-saarland.de
Wed Aug 30 12:07:07 CEST 2006
Prof Brian Ripley wrote:
> No one else seems to have responded to this.
>
> Please see `Writing R Extensions' for how to time things in R.
>
>
Thank you very much for the pointer to system.time(), although I read
most of 'Writing R Extensions', I must have overlooked this (very
useful) part. Nevertheless I was aware, that Sys.time() does not measure
cpu time (that's why I included the information, that measuring time
with Rprof() yields similar results, I had better included the output of
Rprof indeed), but I was the only user on both (idle) dual core systems
and thus expected a high correlation between the differences of
Sys.time() and the cpu time actually used.
> For things like this, the fine details of how well the compiler keeps the
> pipelines and cache filled are important, as is the cache size and
> memory speed. Using
>
> system.time(for (i in 1:500) ttt <- runif(1000000))
>
> your Linux time looks slow, indeed slower than the only 32-bit Linux box I
> have left (a 2GHz 512Kb cache Xeon) and 2.5x slower than a 64-bit R on an
> 2.2GHz Opteron (which is doing a lot of other work and so only giving
> about 30% of one of its processors to R: the elapsed time was much
> longer).
>
> The binary distribution of R for Windows is compiled with -O3: for some
> tasks it makes a lot of difference and this might just be one.
>
>
Thank you very much for this valuable piece of information, it explains
a big part of the speed difference: recompiling R on my linux box with
-O3 significantly increases speed of runif(), now the linux box needs
less than 40% more time than the WinXP system.
> However, what can you usefully do in R with 5e8 random uniforms in
> anything like a minute, let alone the aggregate time this list will spend
> reading your question?
The standard method for simulating final, minimal and maximal values of
Brownian Motion relies on a (discrete) n-step random walk approximation,
where n has to be chosen very large (typically n=100 000) to keep the
bias induced by the approximation "small enough" for certain
applications. So if you want to do MC option pricing of e.g. double
barrier options, 5e8 random uniforms are needed for 5 000 draws of
final, minimal and maximal value, which is still a quite small number of
draws in MC applications. I am working on a faster simulation method and
of course I want to compare the speed of the new and (old) standard
method, that's why I needed large numbers of random uniforms. I thought
that the particular application is not of interest for this list, so I
left it out in my initial submission. I apologise, if my submission was
off-topic in this mailing list.
> If it matters to you, investigate the code your
> compiler creates. (The ATLAS developers report very poor performance on
> certain Pentiums for certain versions of gcc4.)
>
>
Thank you again for the useful hints!
Regards,
Martin Becker
More information about the R-devel
mailing list