R:Foreach并行化

用户1234440

我想运行一个函数100次。该函数本身包含一个for循环,需要运行4000次。我将我的代码在线放置在EC2上以在多个内核上运行,但是不确定我是否做得正确,因为它无法显示其是否真正利用了所有内核。下面的代码有意义吗?

#arbitrary function:
x = function() {
    y=c()
    for(i in 1:4000){
        y=c(y,i)
    }
    return(y)
}

#helper Function
loop.helper<-function(n.times){
    results = list()
    for(i in 1:n.times){
        results[[i]] = x()
    }
    return(results)
}

#Parallel
require(foreach)
require(parallel)
require(doParallel)

cores = detectCores() #32
cl<-makeCluster(cores) #register cores
registerDoParallel(cl, cores = cores)

这是我的问题,我不确定是否应该这样:

out <- foreach(i=1:cores) %dopar% {
     helper(n.times = 100)
} 

还是应该这样:

out <- foreach(i=1:100) %dopar% {
     x()
} 

它们都可以工作,但是我不确定第一个将任务分配给我拥有的32个内核,还是在第二个foreach循环实现中自动执行。

谢谢

里亚姆
out <- foreach(i=1:100) %dopar% {
     x()
} 

是正确的方法。foreach软件包将自动在已注册的内核之间分配100个任务(在您的情况下为32个内核)。

如果您阅读了包装文档,则可以阅读其中的一些示例,这对您来说应该格外清晰。

编辑:

要回复@ user1234440的评论:

一些注意事项:

需要花费一些时间来设置和管理并行任务(例如,设置多个作业以同时运行,然后在最后合并结果)。对于某些琐碎的任务或小的工作,有时运行并行进程比简单的顺序循环要花更长的时间,这仅仅是因为设置并行进程所花费的时间超过了所节省的时间。但是,对于大多数需要一些非平凡计算的任务,您可能会体验到速度的提高。

另外,根据我的阅读,随着使用更多内核,您将看到收益递减(例如,使用8个内核可能不一定比使用4个内核快2倍,但可能仅快1.5倍)。另外,根据我的个人经验,使用系统上所有可用的内核都会导致性能下降。我认为这是因为我将所有系统资源专用于并行作业,并且这减慢了我的其他系统进程。

话虽如此,当我使用该foreach功能提供的并行处理功能时,我几乎总是体验到速度的提高以运行32个核心的100个作业为例,4个核心将接收4个作业,而其他28个核心将接收3个作业。现在,好像32台计算机正在运行小型for循环,遍历分配给每个内核的4或3个作业。每个循环完成后,结果将合并并返回给您。

如果使用简单for循环比并行foreach循环更快地完成100个任务,那么在常规for循环中运行这100个任务4000次将比在并行化foreach循环中运行100个任务快4000次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中使用foreach进行并行提升

来自分类Dev

R doParallel foreach中的并行处理

来自分类Dev

R foreach并行找不到全局函数

来自分类Dev

在R中使用foreach进行并行升压

来自分类Dev

R doParallel foreach中的并行处理

来自分类Dev

并行化集合上的`foreach`永远不会开始

来自分类Dev

并行化不适用于foreach包

来自分类Dev

并行化集合上的`foreach`永远不会开始

来自分类Dev

并行化R中的double for循环

来自分类Dev

如何加速或并行化此 R 代码?

来自分类Dev

获取R中迭代器的索引(与foreach并行)

来自分类Dev

使用foreach时是否在R中导入“并行”包

来自分类Dev

R中的doRedis / foreach GBM并行处理错误

来自分类Dev

R 中的并行计算(foreach %dopar% 中的 if 语句)

来自分类Dev

并行forEach搜索文件

来自分类Dev

并行ForEach丢失数据

来自分类Dev

EventHub ForEach 并行异步

来自分类Dev

如何在R中并行化包含稀疏矩阵的算法

来自分类Dev

使用C和并行化实现R中的快速相关

来自分类Dev

R中的并行化:如何在每个节点上“来源”?

来自分类Dev

如何在Windows上的R中并行化-示例?

来自分类Dev

R-EasyABC中的并行化。错误:...找不到功能

来自分类Dev

无法在R中并行化具有多个参数的函数

来自分类Dev

R-如何并行化我的合并排序

来自分类Dev

R 中 S4 对象的并行化错误

来自分类Dev

与OpenMP并行化-如何?

来自分类Dev

犰狳的并行化

来自分类Dev

并行化字典理解

来自分类Dev

依赖代码并行化