并行for循环R

Posted

技术标签:

【中文标题】并行for循环R【英文标题】:Parallel for loop R 【发布时间】:2013-12-12 22:21:54 【问题描述】:

我在 for 循环中调用一个函数。

sample_fun <- function(x,y) 
    # do something with x,y and return value


My loop looks like
result = list()

for(i in 1:10000)
   result[i] = sample_fun(i,i+1)

我如何并行化这个循环。使用 foreach 和 dopar 会给我下标错误。

【问题讨论】:

【参考方案1】:
library(doSNOW)

sample_fun <- function(x,y) 
  # do something with x,y and return value


threads <- 8
N <- 10000

cl <- makeCluster(threads)
registerDoSNOW(cl)

result <- foreach(i=1:N) %dopar% sample_fun(i,i+1)

stopCluster(cl)

http://www.joyofdata.de/blog/parallel-computing-r-windows-using-dosnow-foreach/

【讨论】:

感谢喜悦。用户时间缩短 10%。您建议的任何更激进的方法。我正在尝试使用 igraph 包处理巨大的图形 查看链接。诀窍是适当地平衡传递给线程的每个处理块的大小。使用 8 个内核,我得到了高达 450% 的改进。还要在任务管理器中观察新创建的 R 会话会发生什么 - 它们的 CPU 和 RAM 使用情况。

以上是关于并行for循环R的主要内容,如果未能解决你的问题,请参考以下文章

openMP 嵌套并行 for 循环与内部并行 for

r for 循环在单个数据框中导入 xlsx 文件

如何在异步函数中并行化 for 循环并跟踪 for 循环执行状态?

并行for循环R

非for循环的OpenMP并行化

什么是并行 for 循环,应该如何/何时使用它?