I've run into an issue for which I can't seem to find an answer. I have been developing a package and I recently incorporated some functions that rely on RcppArmadillo
. These functions work great for sequential problems, but there seems to be an issue when running in parallel. Within RStudio and at the terminal, calls to lapply
work fine, but mclapply
just hangs. Replacing the RcppArmadillo
functions with R implementations allows mclapply
to evaluate. I have been hesitant to use doFuture
for this task due to the time associated with spawning short lived child sessions on shared resources and the large size of exported objects. Below is an example that exhibits the same behavior as my package.
n <- 1e5
d <- 10
modelMat <- matrix(rnorm(n*d), ncol = d)
y <- rnorm(n, 1, 1)
fun <- function(x, y, col) {
as.numeric(RcppArmadillo::fastLmPure(x[,c(1,col)], y)$coefficients)
}
# Works
lapply(
2:d,
fun,
x = modelMat,
y = y
)
# Does not work
library(parallel)
mclapply(
2:d,
fun,
x = modelMat,
y = y,
mc.cores = 2
)
sessionInfo()
R version 3.5.3 (2019-03-11)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux
Matrix products: default
BLAS: /opt/revr/ropen/3.5.3/lib64/R/lib/libRblas.so
LAPACK: /opt/revr/ropen/3.5.3/lib64/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RevoUtilsMath_11.0.0
loaded via a namespace (and not attached):
[1] compiler_3.5.3 RevoUtils_11.0.3
[3] RcppArmadillo_0.9.900.1.0 Rcpp_1.0.5