我尝试使用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分钟。