RCpp并行编程错误崩溃R.

时间:2014-11-23 14:15:55

标签: r parallel-processing rcpp

我一直试图并行化我的一个Rcpp例程。在这样做的过程中,我一直在尝试遵循jjalaire的Parallel Distance Calculation示例。不幸的是,一旦我编写完所有内容并开始玩游戏,我的R会话就会崩溃。有时在第一次执行后,有时在第三次执行后。老实说,当我运行例行程序时,R会崩溃,这是一个废话。所以,我已经将我的代码与一个可重复的小例子配对。

Rcpp文件(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编译和执行脚本(mytest.R)

library(Rcpp)
library(inline)

sourceCpp('mytest.cpp')

testmything = function() {
  calculateMyThingParallel()
}

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

该错误似乎与我在operator()方法中设置_pc和_pcsd变量直接相关。如果我把那些东西大大提高了。基于并行距离计算示例,我不确定我在这里做错了什么。我的印象是RVector是线程安全的。虽然这是我的印象,但我知道这是线程的问题。任何人都可以帮助我理解为什么上面的代码会随机崩溃我的R会话吗?

有关信息,我正在运行以下内容:

  • Windows 7
  • R:3.1.2
  • Rtools:3.1
  • Rcpp:0.11.3
  • 内联:0.3.13
  • RStudio:0.99.62

1 个答案:

答案 0 :(得分:2)

在rcpp-devel列表上交叉发布此问题后,用户回复并告知我,j方法中的operator()循环应介于begin <= j < end之间而不是begin <= j <= end之间{1}}这就是我所拥有的。

我做了那个改变并且肯定是努力的,现在一切似乎都在起作用。

似乎过度扩展到达已分配的内存空间仍会导致意外后果......