[Rd] Improvement of SignRank functions

Martin Maechler maechler at stat.math.ethz.ch
Sat Dec 15 19:44:59 CET 2007


Hi Ivo,

>>>>> "IU" == Ivo Ugrina <ivo at iugrina.com>
>>>>>     on Sat, 15 Dec 2007 14:13:10 +0100 writes:

    IU> Martin Maechler wrote:
    >> do you have evidence for your belief?
    >> i.e. a set of  system.time(.) calls where you see the
    >> difference?

    IU> system.time(dsignrank(17511, 400))
    IU> user  system elapsed
    IU> 1.010   0.120   1.145
    IU> system.time(dsignrank((0:17511), 400))
    IU> user  system elapsed
    IU> 1.25    0.13    1.40
    IU> system.time(dsignrank((0:17511), 500))
    IU> user  system elapsed
    IU> 2.040   0.220   2.296
    IU> system.time(psignrank((0:17511), 600))
    IU> user  system elapsed
    IU> 20.670   0.580  21.403
    IU> system.time(qsignrank(0.56, 300))
    IU> user  system elapsed
    IU> 0.700   0.050   0.753
    IU> ======================================
    IU> system.time(dsignrank(17511, 400))
    IU> user  system elapsed
    IU> 0.070   0.000   0.078
    IU> system.time(dsignrank((0:17511), 400))
    IU> user  system elapsed
    IU> 0.100   0.000   0.104
    IU> system.time(dsignrank((0:17511), 500))
    IU> user  system elapsed
    IU> 0.160   0.000   0.164
    IU> system.time(psignrank((0:17511), 600))
    IU> user  system elapsed
    IU> 16.330   0.370  16.729
    IU> system.time(qsignrank(0.56, 300))
    IU> user  system elapsed
    IU> 0.020   0.010   0.029



    IU> system.time(dsignrank((0:20000), 600))
    IU> user  system elapsed
    IU> 3.470   0.280   3.745
    IU> RAM: ~130MB
    IU> ======================================
    IU> system.time(dsignrank((0:20000), 600))
    IU> user  system elapsed
    IU> 0.250   0.010   0.26
    IU> RAM: ~1MB

that's quite convincing; thank you!
and I can verify part of it on my computer.

I think I'd just commit your signrank.c
(with a few cosmetic changes) to the sources, right?

*Not* using a static with all the previously computed counts
is probably not possible without a (CPU time) efficiency loss;
and to make this thread-safe one could use a "thread-global"
array, but how to do that would really depend on the threading
system used, and that's not at all given.

Thank you for your contribution!
Martin



    >> BTW: If you had a smart idea to *not* use a static 'w' and still
    >> be memory efficient,
    >> that could lead to make that code "thread-safe", but I am
    >> not at all sure this is possible without using
    >> "thread-library C code".

    IU> I'll look into it.


    IU> With respect,
    IU> -- 
    IU> Ivo Ugrina
    IU> ICQ: 47508335 | www.iugrina.com
    IU> -------------------------------
    IU> baza matematickih pojmova
    IU> http://baza.iugrina.com
    IU> ---------------------------
    IU> anime, manga, Japan fanzin
    IU> http://yoshi.iugrina.com



More information about the R-devel mailing list