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). This is pretty restrictive, but could be enough in some cases. Gabor [...] [[alternative HTML version deleted]]
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 -- http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
Thank you both. I think I have got the answer I need. I'll need to turn to another direction to search for my solution. Best, Da On Sat, Jan 31, 2015 at 8:32 PM, Dirk Eddelbuettel <edd at debian.org> wrote:> > 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 > > -- > http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org