[Rcpp-devel] RCppParallel Example Crashing R (Cross-Post from SO)

Justace Clutter justacec at gmail.com
Mon Nov 24 03:10:40 CET 2014


I posted the following to SO earlier this morning and it was suggested that
I repost this question to the rcpp-devel list for exposure.  For reference,
the original posting is at
http://stackoverflow.com/questions/27089888/rcppparallel-example-crashing-r.

I have been trying to parallelize one of my Rcpp routines.  In doing so I
have been trying to follow the [Parallel Distance Calculation](
http://gallery.rcpp.org/articles/parallel-distance-matrix/) example from
jjalaire.  Unfortunately, once I got everything coded up and started to
play around, my R session would crash.  Sometimes after the first
execution, sometimes after the third.  To be honest, it was a crap shoot as
to when R would crash when I ran the routine.  So, I have paired down my
code to a small reproducible example to play with.

***Rcpp File (mytest.cpp)***
------------------------------------------------------------------------------------------------------------
    #include <Rcpp.h>
    // [[Rcpp::depends(RcppParallel)]]
    #include <RcppParallel.h>

    using namespace std;
    using namespace Rcpp;
    using namespace RcppParallel;

    struct MyThing : public Worker {
      RVector<double> _pc;
      RVector<double> _pcsd;

      MyThing(Rcpp::NumericVector _pc, Rcpp::NumericVector _pcsd) :
_pc(_pc), _pcsd(_pcsd){}

      void operator()(std::size_t begin, std::size_t end) {

        for(int j = begin; j <= end; j++) {
          _pc[j] = 1;
    //      _pcsd[j] = 1;
        }
      }
    };

    // [[Rcpp::export]]
    void calculateMyThingParallel() {

      NumericVector _pc(100);
      NumericVector _pcsd(100);

      MyThing mt(_pc, _pcsd);

      parallelFor(0, 100, mt);
    }
------------------------------------------------------------------------------------------------------------


***R Compilation and Execution Script (mytest.R)***
------------------------------------------------------------------------------------------------------------
    library(Rcpp)
    library(inline)

    sourceCpp('mytest.cpp')

    testmything = function() {
      calculateMyThingParallel()
    }

    if(TRUE) {
      for(i in 1:20) {
        testmything()
      }
    }
------------------------------------------------------------------------------------------------------------

The error seems to be directly related to my setting of the _pc and _pcsd
variables in the `operator()` method.  If I take those out things
dramatically improve.  Based on the Parallel Distance Calculation example,
I am not sure what it is that I have done wrong here.  I was under the
impression that RVector<type> was thread safe.  Although that is my
impression, I know this is an issue with threads somehow.  Can anybody help
me to understand why the above code randomly crashes my R sessions?

For information I am running the following:

  - Windows 7
  - R: 3.1.2
  - Rtools: 3.1
  - Rcpp: 0.11.3
  - inline: 0.3.13
  - RStudio: 0.99.62
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141123/e64258d0/attachment.html>


More information about the Rcpp-devel mailing list