R 为什么我的二级期货会连续执行?

R 为什么我的二级期货会连续执行?,r,parallel-processing,r-future,R,Parallel Processing,R Future,我正在尝试复制中的示例。引述: 期货可以嵌套在R中,以便一个期货创建另一组期货 等等例如,这可能发生在嵌套for循环中[…] 有一部分作者使用plan(list(multicore,multicore))(进一步的参数和tweak省略)同步处理两个期货,每个期货同步处理四个期货。这应等于同步处理的八个期货 然而,当我试图用下面的代码重现这一点时,我看到第二级期货是按顺序处理的。我做错了什么 MCVE 作者:这是因为有一个内置的保护,防止嵌套并行。如果没有它,您的计算机将因太多并行进程而过载,这不

我正在尝试复制中的示例。引述:

期货可以嵌套在R中,以便一个期货创建另一组期货 等等例如,这可能发生在嵌套for循环中[…]

有一部分作者使用
plan(list(multicore,multicore))
(进一步的参数和
tweak
省略)同步处理两个期货,每个期货同步处理四个期货。这应等于同步处理的八个期货

然而,当我试图用下面的代码重现这一点时,我看到第二级期货是按顺序处理的。我做错了什么

MCVE 作者:这是因为有一个内置的保护,防止嵌套并行。如果没有它,您的计算机将因太多并行进程而过载,这不仅会使计算机过热,还会降低总体性能

我已在下一版本中更新了“未来拓扑”渐晕图,包括以下部分:

针对递归并行性的内置保护

在上面,我们并行地处理了未来的外部或内部集合。如果我们想并行处理这两个层呢?很容易使用:

plan(list(multiprocess, multiprocess))
虽然这没有给出错误,但我们会发现,期货的内层将按顺序处理,就像我们将使用
plan(list(multiprocess,sequential))
一样。这种行为是由于内置了针对嵌套并行性的保护。如果两个层并行运行,每个层使用机器上可用的8个内核,那么我们将运行8*8=64个并行进程——这肯定会使我们的计算机过载。内部情况是,对于外层,
availableCores()
等于八(8),而对于内层,它等于一(1)

现在,我们可以想象,我们用两个平行期货来处理外层,然后用四个平行期货来处理内层。在这种情况下,我们最多只能运行8个内核(=2*4)。这可以通过在每层强制固定数量的工人来实现(不推荐):


如果您想实现像您期望的那样的并行处理,这是一个选择。 只需使用:

图书馆(future.callr)

计划(列表(callr,callr))

什么是
returnStartStop
?@F.PrivéAh drat,我忘了包括它。编辑。有趣的是,我不知道callr和future.callr!这实际上是一个错误,包(我是作者)不能防止递归并行处理。这将在下一个版本中修复。有没有理由不建议对每一层设置一定数量的工人?
R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)

Matrix products: default
BLAS: /opt/Bio/R/3.4.3/lib64/R/lib/libRblas.so
LAPACK: /opt/Bio/R/3.4.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] ggplot2_2.2.1 future_1.8.1 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.17     devtools_1.13.4  munsell_0.4.3    colorspace_1.3-2
 [5] R6_2.2.2         rlang_0.1.6      httr_1.3.1       plyr_1.8.4      
 [9] globals_0.11.0   tools_3.4.3      parallel_3.4.3   grid_3.4.3      
[13] gtable_0.2.0     git2r_0.21.0     withr_2.1.1      yaml_2.1.16     
[17] lazyeval_0.2.1   digest_0.6.15    tibble_1.4.2     codetools_0.2-15
[21] curl_3.1         memoise_1.1.0    compiler_3.4.3   pillar_1.1.0    
[25] scales_0.5.0     listenv_0.7.0 
plan(list(multiprocess, multiprocess))
plan(list(tweak(multiprocess, workers = 2), tweak(multiprocess, workers = 4)))