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

Yixuan Qiu yixuan.qiu at cos.name
Mon Nov 24 05:03:37 CET 2014


Great!
Glad to see that it works and has perceivable speed-up.

Best,
Yixuan
On Nov 23, 2014 10:57 PM, "Justace Clutter" <justacec at gmail.com> wrote:

> I would say that was it...  Thanks for catching that.  Sometimes the
> smallest thing can get you.  I have updated the SO question with the answer.
>
> Now that I got this working I am seeing great speed improvements:
>
> b1 = R native code
> b2 = Rcpp non parallel
> b3 = Rcpp parallel
>
>   test replications elapsed relative user.self sys.self user.child
> sys.child
> 1 b1()           10 1760.65   78.776   1753.76     0.56         NA
>  NA
> 2 b2()           10  128.78    5.762    128.38     0.05         NA
>  NA
> 3 b3()           10   22.35    1.000    170.68     0.06         NA
>  NA
>
>
> On Sun, Nov 23, 2014 at 9:15 PM, Yixuan Qiu <yixuan.qiu at cos.name> wrote:
>
>> Hello Justace,
>> It seems that you should write down j < end rather than j <= end.
>>
>>
>> Best,
>> Yixuan
>>
>> 2014-11-23 21:10 GMT-05:00 Justace Clutter <justacec at gmail.com>:
>>
>>> 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
>>>
>>>
>>> _______________________________________________
>>> Rcpp-devel mailing list
>>> Rcpp-devel at lists.r-forge.r-project.org
>>> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>>>
>>
>>
>>
>> --
>> Yixuan Qiu <yixuan.qiu at cos.name>
>> Department of Statistics,
>> Purdue University
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20141123/6494486b/attachment.html>


More information about the Rcpp-devel mailing list