Skip to content
Prev 49807 / 63421 Next

invoking R function in C++ in parallel

On 31 January 2015 at 19:29, G?bor Cs?rdi wrote:
| On Sat, Jan 31, 2015 at 7:05 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
| [...]
| 
|     - 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
| 
| 
| I think you can use R objects, as long as you don't call R functions on them
| (not even from R's C api, although some of them are currently fine) and
| consider them as read-only. E.g. if you have a numeric vector, you can do?
| double *cvec = REAL(vec);
| and then use cvec in your thread(s).

You and I are saying the same thing here: you call it read-only access; I
called ot "do not use R types". We recommend the same approach in other
places: instantiate std::vector<double> from RcppVector, don't use R calls.

My recommendation is to make it pretty plain: do not call R functions. Use
other types. There are equivalent read-only constructors for some relevant
data types.

Recall that OP, in the parts you chose not to quote, asked to call back to R
in a multithreaded way. And we both say 'nope' here.

All this has come up before on rcpp-devel and SO.

Dirk