我一直在試圖並行化我的一個Rcpp例程。在這樣做的過程中,我一直試圖遵循jjalaire的Parallel Distance Calculation示例。不幸的是,一旦我把所有的東西都編碼並開始玩,我的R會話就會崩潰。有時在第一次執行後,有時在第三次執行後。說實話,這是一個關於什麼時候R會在我運行例程時崩潰的垃圾短片。所以,我已經將我的代碼與一個可重複使用的小例子配對。RCpp並行編程錯誤崩潰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
如果你問在RCPP-devel的JJ,可以看見。如果我們把它留在這裏,他可能不會。 – 2014-11-24 01:34:18
Roger ...我會爲了曝光而交出這個帖子。如果我在那裏得到一個很好的答案,我會把它帶回這裏來結束這個問題,並使QA成爲SO社區... – 2014-11-24 02:05:37
根據結果我調整了標題 – 2014-11-24 04:59:33