`furrr` much slower than `purrr` (on Windows)
Closed this issue · 2 comments
Hello,
I tried a (very slightly modified) example code I found in this blogpost, claiming that furrr
was much faster than purrr
. Unfortunately, I couldn't reproduce the results and for me purrr
is faster:
library(tictoc)
tic()
x <- purrr::map_dbl(1:4, function(x){
Sys.sleep(1)
x^2
})
toc()
> 4.01 sec elapsed
future::plan(multisession, workers = 4)
tic()
x <- furrr::future_map_dbl(1:4, \(x){
Sys.sleep(1)
x^2
})
toc()
> 4.41 sec elapsed
The difference between purrr
and furrr
can be up to 10 sec but always favoring purrr
.
Thank you so much for looking into this!
Attaching a sessionInfo for reference:
sessionInfo()
R version 4.2.2 (2022-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.utf8 LC_CTYPE=English_United States.utf8 LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C LC_TIME=English_United States.utf8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] tictoc_1.1 formatters_0.3.4.14 furrr_0.3.1 future_1.31.0 purrr_1.0.1
[6] dplyr_1.1.0 here_1.0.1
loaded via a namespace (and not attached):
[1] parallelly_1.34.0 rstudioapi_0.14 knitr_1.42 magrittr_2.0.3 tidyselect_1.2.0 R6_2.5.1
[7] rlang_1.0.6 fastmap_1.1.0 fansi_1.0.4 globals_0.16.2 tools_4.2.2 grid_4.2.2
[13] parallel_4.2.2 xfun_0.36 utf8_1.2.2 cli_3.4.1 withr_2.5.0 htmltools_0.5.4
[19] rprojroot_2.0.3 digest_0.6.31 tibble_3.1.8 lifecycle_1.0.3 vctrs_0.5.2 codetools_0.2-18
[25] glue_1.6.2 compiler_4.2.2 pillar_1.8.1 generics_0.1.3 listenv_0.9.0 pkgconfig_2.0.3
Hi @alex-lauer, is it possible you just have a typo? If I take your code and run it in the console line by line I see
> future::plan(multisession, workers = 4)
Error in eval(first, envir = parent.frame(), enclos = baseenv()) :
object 'multisession' not found
This is because we didn't load furrr or future completely, so future::multisession()
isn't available to us.
Is it possible you just missed that error?
Here is a full reprex that works for me, with typos fixed
library(tictoc)
library(purrr)
library(furrr)
#> Loading required package: future
tic()
x <- map_dbl(1:4, function(x){
Sys.sleep(1)
x^2
})
toc()
#> 4.023 sec elapsed
plan(multisession, workers = 4)
tic()
x <- future_map_dbl(1:4, \(x){
Sys.sleep(1)
x^2
})
toc()
#> 1.946 sec elapsed
Created on 2023-02-27 with reprex v2.0.2.9000
Also I encourage you to use the reprex package to create reproducible examples when opening issues! It helps me help you, and often can help you figure out the problem yourself https://reprex.tidyverse.org/articles/learn-reprex.html