平行中平行

问题描述 投票:0回答:1

假设我有

n
任务,我想使用
foreach
包并行运行。第 i 个任务由
f(dataset_i)
定义,其中
f
是需要时间完成的函数,具体取决于
dataset_i
的大小。

函数

f
本身可以并行化,所以我想将
cpu_i
分配给第i个任务,并使用
f(dataset_i)
cpu运行
cpu_i

这样的事情可能吗?如果的话,该怎么做?

r foreach parallel-processing
1个回答
0
投票

R 级并行始终是进程并行。任务未发送至 不同的 CPU 核心,而是在不同的 CPU 核心上运行单独的 R 会话 线程。但重要的是,所有 R 会话仍然可以访问所有 核心。因此,如果您有一个函数

f()
可以在多个任务上执行任务 线程(=单独的核心)通过调用本机代码,您应该指定 启动任务时应使用多少个线程
f()

具体来说,与

f = data.table::fwrite

library(foreach)
library(doParallel)
#> Loading required package: iterators
#> Loading required package: parallel

registerDoParallel()

datasets <- list(
  data.frame(foo = rnorm(1e7)),
  data.frame(foo = rnorm(2e7))
)

foreach(data = datasets, ncpu = c(1, 2)) %dopar% {
  file <- withr::local_tempfile()
  data.table::fwrite(data, file, nThread = ncpu) |> system.time()
}
#> [[1]]
#>    user  system elapsed 
#>    0.72    0.06    0.85 
#> 
#> [[2]]
#>    user  system elapsed 
#>    1.31    0.14    0.78

stopImplicitCluster()
© www.soinside.com 2019 - 2024. All rights reserved.