【发布时间】:2014-12-22 21:54:30
【问题描述】:
我正在尝试在 R 中设置并行计算以进行大型模拟,但我注意到时间没有任何改进。
我尝试了一个简单的例子:
library(foreach)
library(doParallel)
stime<-system.time(for (i in 1:10000) rnorm(10000))[3]
print(stime)
10.823
cl<-makeCluster(2)
registerDoParallel(cores=2)
stime<-system.time(ls<-foreach(s = 1:10000) %dopar% rnorm(10000))[3]
stopCluster(cl)
print(stime)
29.526
系统时间是原来没有并行计算的情况下的两倍多。
显然我做错了什么,但我无法弄清楚它是什么。
【问题讨论】:
-
并行计算涉及开销。这个结果是意料之中的。
-
您的意思是启动集群需要时间?或者你是什么意思?
-
是的,但我只是在测量任务本身,而不是初始化集群所需的时间。我应该在什么时候获得更大的收益?
-
即使只是集群初始化后的协调,例如将所有内容组合回一个数组,需要时间和开销。此外,根据您进行并行计算的方式,您还会通过上下文切换等产生开销。
-
您需要运行
profile(我认为这是函数名称)来查看设置数据传递到每个节点所花费的时间与节点处理所花费的时间数据。一般来说(开始一个句子的危险方式:-)),并行性仅在您发送相对较少的数据但对所述数据进行大量处理时才有帮助。
标签: r foreach parallel-processing cluster-computing