我第一次在R中进行并行化.作为第一个玩具示例,我试过了
library(doMC)
registerDoMC()
B<-10000
myFunc<-function()
{
for(i in 1:B) sqrt(i)
}
myFunc2<-function()
{
foreach(i = 1:B) %do% sqrt(i)
}
myParFunc<-function()
{
foreach(i = 1:B) %dopar% sqrt(i)
}
Run Code Online (Sandbox Code Playgroud)
我知道sqrt()执行速度太快,无法实现并行化,但我没想到的是,它foreach() %do%会比for()以下更慢:
> system.time(myFunc())
user system elapsed
0.004 0.000 0.005
> system.time(myFunc2())
user system elapsed
6.756 0.000 6.759
> system.time(myParFunc())
user system elapsed
6.140 0.524 6.096
Run Code Online (Sandbox Code Playgroud)
在我看过的大多数例子中,foreach() %dopar%都是比较foreach() %do%而不是for().由于foreach() %do%比for()我的玩具示例慢得多,我现在有点困惑.不知何故,我认为这些是构造for循环的等效方法.有什么不同?它们是否相同?是foreach() %do%始终慢?
更新:关于@Peter罚款回答,我更新myFunc如下:
a<-rep(NA,B) …Run Code Online (Sandbox Code Playgroud)