[Rcpp-devel] OpenMp and IntegerVector
Dirk Eddelbuettel
edd at debian.org
Tue Mar 11 20:56:25 CET 2014
Andreas,
On 11 March 2014 at 20:30, Andreas Prescher wrote:
| Hello,
|
| I got strange behaviour when using
| OpenMp and IntegerVector (without
| OpenMp all works fine!!)
|
| From my package (Rcpp 0.10.4 used, let some unimportant
| arguments out)
|
| Rcpp::List PsiMinRContainer::parInit(const Rcpp::List& seedList)
| {
| Rcpp::List resultList(m_psiMinRVec.size() - 1);
| Rcpp::IntegerVector seedVec(seedList[0]);
|
| #pragma omp parallel for
| for(int i=1; i < m_psiMinRVec.size(); i++) {
| resultList[i - 1] = m_psiMinRVec[i]->init(seedVec);
| }
I would recommend being more careful / paranoid here and make sure that
within the '#pragma omp parallel loop' you do NOT use a single R variable,
and you shoult NOT use the R random number generator.
OpenMP is by design multithreaded. R is very famously not set up for that.
By calling back into R, you set yourself up for trouble,
Just accessing / setting data structures should work (but test first...),
RNGs is clearly asking for trouble.
In short, for OpenMP use plain C++ constructs. But not R. Use R and and Rcpp
to get your data to your OpemMP code portions, run those (carefully) in
vanilla C++ (or even vanilla C++11) and then return to R.
A few CRAN packages use OpenMP along with Rcpp.
Dirk
| return resultList;
| }
| in a module definition file:
|
| function( "parInit", &parInit,List::create( _["seedList"]) ),
| calling my internal pointer with psiMinRContainer->parInit(seedList)
|
| The problem seems to be the seedVec.
| (I also tried using seedvec as pointer allocated with new)
| list created in in R:
| seeds <- list(c(1,12),c(1,2))
| parInit(seedList = seeds)
|
| Some errors I can give:
|
| SET_VECTOR_ELT() can only be applied to a 'list', not a 'character'
|
| Warning: stack imbalance in '.External', 9 then 11
| Warning: stack imbalance in '{', 6 then 8
|
| error: getCharCE have to be called for CHARSXP
| (Fehler: 'getCharCE' muss für CHARSXP aufgerufen werden)
|
| What I found so far are hints about
| protect/unprotect in writing R-extensions (eg
| http://www.hep.by/gnu/r-patched/r-exts/R-exts_103.html).
|
| Any ideas?
|
| Andreas
|
|
| _______________________________________________
| 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
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list