parSapply线程未并行运行

时间:2019-05-03 07:25:10

标签: r windows parallel-processing

我尝试使用parSapply运行并行代码的时间与代码的顺序版本完全相同。我在任务管理器上看到两个处理器都可以正常工作,但是花费的时间是相同的。我有Windows 7和R 3.4.5。有什么建议吗?

 EMA <- function(vec, vel)
 {
 ma<-array(dim=length(vec))
 sf=2/(vel+1)
 ma[1]=vec[1]
 for(i in 2:length(vec))
  ma[i]=sf*vec[i] + (1-sf)*ma[i-1]
 return(ma)
}

serie=BTCUSDT[,5]  
res<-matrix(nrow=iter, ncol=8)
iter=500

library(parallel)
library(MASS)

main<-function(j){

 dimVec=1000
limSample=length(serie)-dimVec
lm1=200
lm2=200
bet=1
tax=0.0005
re<-matrix(nrow=iter, ncol=4) 
re1=sample(1:lm1, 1)
re2=sample(1:lm2, 1)

SALDO=0

vec=sample(serie, 1000)

m1=EMA(vec, re1)
m2=EMA(vec, re2)
comprado=0
flag=TRUE
saldo=0

for(i in 1:dimVec) 
{
  if(m2[i]>m1[i] && flag)
  {
    flag=FALSE
    saldo=saldo-bet*(1+tax)
    comprado=vec[i]
  }
  if((m1[i]>m2[i] || i==length(vec)) && flag==F)
  {
    flag=TRUE
    saldo=saldo+bet*((vec[i]/comprado)-tax)
  }
 }
 SALDO=SALDO+saldo
 }
 re=c(re1, re2, re3, SALDO/iter2)  
 return(re)
 }

cores=detectCores(logical=F)
clust <- makeCluster(cores)
clusterExport(clust, "EMA")
clusterExport(clust, "serie")
clusterExport(clust, "iter")
clusterExport(clust, "main")

 res=parSapply(clust, 1:iter, function(j) {
w1=main(j)
w2=main(j)
return(c(w1,w2))
})

stopCluster(clust)
res=t(res)
write.csv(res, "fileParalelo.csv")

我的笔记本电脑有两个核心,我发现使用parSapply会消耗掉两倍的资源,但是顺序和并行过程都只花了3分钟。

0 个答案:

没有答案