R 每个包的运行时间

R 每个包的运行时间,r,parallel-processing,R,Parallel Processing,我在R中使用foreach包时遇到问题。事实上,当我编译此代码时: tmp=proc.time() x<-for(i in 1:1000){sqrt(i)} x proc.time()-tmp 对于正常循环: utilisateur système écoulé 0.001 0.000 0.001 所以正常循环运行得更快。。。这正常吗 谢谢您的帮助。并行处理不会加快像sqrt(x)这样的简单操作。理想情况下,您可以将其用于更复

我在R中使用
foreach
包时遇到问题。事实上,当我编译此代码时:

tmp=proc.time()
x<-for(i in 1:1000){sqrt(i)} 
x
proc.time()-tmp
对于正常循环:

utilisateur     système      écoulé 
      0.001       0.000       0.001 
所以正常循环运行得更快。。。这正常吗


谢谢您的帮助。

并行处理不会加快像
sqrt(x)
这样的简单操作。理想情况下,您可以将其用于更复杂的操作,或者执行以下操作:

x<- foreach(i=0:9,combine = 'c') %dopar% sqrt(seq(i*10000000,(i+1)*10000000-1))
x

根据您的系统,您可能需要在R之外做更多的工作来设置后端。

以下是一些测试代码,您可以用来在Windows上设置并行实验:

library(foreach)
library(doParallel)

cl <- makePSOCKcluster(2)
registerDoParallel(cl)

system.time({
  x <- foreach(i=1:1000) %do% Sys.sleep(0.001)
})

system.time({
  x <- foreach(i=1:1000) %dopar% Sys.sleep(0.001)
})

stopCluster(cl)
库(foreach)
图书馆(双平行)

你的比较有几个问题。1) 在“普通”代码中,不创建对象。2) 除非配置并行后端,否则并行代码不会并行运行。您没有显示此步骤,因此我假设您的并行代码以串行方式运行。谢谢您的回答!如何配置并行后端?谢谢您的回答!我试着像你告诉我的那样设置并行后端,但是运行时间仍然高于“正常”代码。R控制台用于并行计算:利用我们的系统0.471 0.032 0.585它确实比以前更好!如果你检查我答案的第一部分,你会发现当你的操作是
sqrt(x)
时,你不会获得并行运行的效率。计算机从计算循环的不同部分开始切换需要时间。您给出的示例有些琐碎(因为只使用
sqrt(1:1000)
最有意义),但一般来说,您希望为具有合理迭代次数的长任务保留并行计算。@SamyJelassi可能这是正常的。这意味着您的工作“不够慢”,无法从并行化中获利。是的,您是对的!谢谢你的帮助!我发现了如何使并行化更有效!
x<- foreach(i=0:9,combine = 'c') %dopar% sqrt(seq(i*10000000,(i+1)*10000000-1))
x
library(doParallel)
ncores = detectCores()
clust = makeCluster(ncores - 2)
registerDoParallel(clust)
#do stuff here
#...
stopCluster(clust)
library(foreach)
library(doParallel)

cl <- makePSOCKcluster(2)
registerDoParallel(cl)

system.time({
  x <- foreach(i=1:1000) %do% Sys.sleep(0.001)
})

system.time({
  x <- foreach(i=1:1000) %dopar% Sys.sleep(0.001)
})

stopCluster(cl)
> system.time({
+   x <- foreach(i=1:1000) %do% Sys.sleep(0.001)
+ })
   user  system elapsed 
   0.08    0.00   12.55 
> 
> system.time({
+   x <- foreach(i=1:1000) %dopar% Sys.sleep(0.001)
+ })
   user  system elapsed 
   0.23    0.00    6.09