поток parSapply не работает параллельно - PullRequest
0 голосов
/ 03 мая 2019

Моя попытка запустить параллельный код с использованием 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 минуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...