Why Rcpp::warning() is slower than R warning?

前端 未结 1 424
忘了有多久
忘了有多久 2021-01-26 05:07

Consider the following functions foo and bar (differs only in printing warning) and their R equivalents fooR and barR:

<
相关标签:
1条回答
  • 2021-01-26 05:56

    I'm not sure if you realize from your benchmark that Rcpp is:

    1. 11.102/5.156 = 2.15322 times faster in throwing a warning
    2. 0.052/0.001 = 52 times faster in the pure loop case.

    Now, when you are throwing a warning, in both Rcpp and base R, the following is occurring:

    1. Stream to STDERR is opened. (Hence, red text instead of STDOUT's black)
    2. Write message
    3. Close STDERR
    4. Continue instructions.

    In Rcpp, the low-level reference helps lower the total amount of time it takes to repeat the above procedure and return control to the loop vs. R's handler that sits higher up on the stack.

    Again, the time it takes to complete this with Rcpp is normal as it has to cede control of the process back to R, print the message, then return to the loop. The best way to think about the loss of speed from the pure loop case is you decided to call an R based function in a C++ loop instead of an R loop expecting a speedup.

    To be honest, I'm a bit amazed that Rcpp was able to be 2x faster than the R equivalent.

    0 讨论(0)
提交回复
热议问题