[Rcpp-devel] Exporting rcpp-based function into parLapply workers in an R package

Naeem Khoshnevis khoshnevis.naeem at gmail.com
Fri May 14 22:37:17 CEST 2021


This is great, James. Thank you so much for sharing.

Best regards,
Naeem

On Fri, May 14, 2021 at 3:09 PM Balamuta, James Joseph <
balamut2 at illinois.edu> wrote:

> Naeem,
>
>
>
> The best path for including compiled code in a package is to place it
> within the `src/` directory instead of using `Rcpp::cppFunction()` to
> compile. The reasons for this are stated succiently here:
> https://stackoverflow.com/a/6074391/1345455
>
>
>
> From there, the C++ can easily be exported across parallel workers just by
> loading the package.
>
>
>
> Consider looking at how this example package using doParallel is
> structured.
>
>
>
> https://github.com/r-pkg-examples/rcpp-and-doparallel
>
>
>
> Best,
>
>
>
> JJB
>
>
>
> *From: *Rcpp-devel <rcpp-devel-bounces at lists.r-forge.r-project.org> on
> behalf of Naeem Khoshnevis <khoshnevis.naeem at gmail.com>
> *Date: *Friday, May 14, 2021 at 11:49 AM
> *To: *"rcpp-devel at lists.r-forge.r-project.org" <
> rcpp-devel at lists.r-forge.r-project.org>
> *Subject: *[Rcpp-devel] Exporting rcpp-based function into parLapply
> workers in an R package
>
>
>
> Dear Rcpp developers:
>
> Thanks for developing and maintaining the Rcpp package.
> I wrote a function in Rcpp. It is available throughout the package and
> works as expected; however, it is not available for praLapply workers. A
> temporary fix is just using Rcpp::cppFunction inside the function that
> parLapply workers call and copy the entire function over there. However,
> this does not seem right for bigger and more complicated functions.
> I would be grateful if you could let me know whether there is a better
> long-term solution. Here is the package and three functions that you might
> want to take a look at.
>
> Original cpp function:
>
> https://github.com/fasrc/CausalGPS/blob/master/src/compute_closest_wgps_helper.cpp
> <https://urldefense.com/v3/__https:/github.com/fasrc/CausalGPS/blob/master/src/compute_closest_wgps_helper.cpp__;!!DZ3fjg!oyv9eCC8FkfL4RzQ_LE613qZNCplLbfU22AlYI8Faem0SaWx-GcDeRWHef6zf-42AH4$>
>
> Wrapper function that calls this function + temporal fix:
> https://github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R
> <https://urldefense.com/v3/__https:/github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R__;!!DZ3fjg!oyv9eCC8FkfL4RzQ_LE613qZNCplLbfU22AlYI8Faem0SaWx-GcDeRWHef6z0KitDq4$>
>
> The function that uses parLapply (please see line 63-89) to run the c++
> code:
> https://github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R
> <https://urldefense.com/v3/__https:/github.com/fasrc/CausalGPS/blob/master/R/compute_closest_wgps.R__;!!DZ3fjg!oyv9eCC8FkfL4RzQ_LE613qZNCplLbfU22AlYI8Faem0SaWx-GcDeRWHef6z0KitDq4$>
>
> Best regards,
> Naeem
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20210514/c5032110/attachment.html>


More information about the Rcpp-devel mailing list