[Rd] invoking R function in C++ in parallel
Dirk Eddelbuettel
edd at debian.org
Sun Feb 1 01:05:43 CET 2015
On 31 January 2015 at 18:30, Zheng Da wrote:
| I'm writing an R extension in C++. In the extension, I want to invoke
| an R function directly and it works when I use Rcpp in the serial
| code. But what I really want is to invoke the R function in parallel
| with openmp. When I do so, I got segmentation fault.
|
| I remember someone said that R isn't thread-safe. I think it's also
| understandable because an R function also has environment variables.
|
| My question is:
| Can we make a copy of an R function (including its environment
| variables) for each thread?
Nope. And you pretty much just explained why.
You can
- either work in something like OpenMP and run in multiple threads that
remain /completely/ shielded from R, ie no R calls, and not even R data
types as you cannot trigger gc() calls from different threads
- or work via, say, the parallel or Rmpi packages in multiple _processes_
each of which could call its corresponding R interpreter (but that is
still slower).
There are some examples for OpenMP at the Rcpp Gallery: http://gallery.rcpp.org.
You may also enjoy the RcppParallel package.
But none of this overcomes your main hurdle: no, you cannot call R from
different threads.
| Are there any ways to invoke an R function in C/C++ in multiple threads safely?
No. It is a design constraint.
Dirk
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the R-devel
mailing list