Estoy usando las bibliotecas doParallel y foreach para llevar a cabo un algoritmo para hacer un test a un conjunto de numeros aleatorios. El problema esta en que el tiempo de ejecucion del algoritmo secuencial es mucho menor que el de el mismo algoritmo escrito en paralelo. Alguna sugerencia de lo que puede estar pasando. aqui va mi codigo del algoritmo secuencial:
carreras_seq<-function(){
numerosa<-runif(10e6)
writeLines("Test Carreras por encima y por debajo de la media para la validacion de independencia en un conjunto de numeros aleatorios")
media<-0.99/2
b<-0
n<-length(numerosa)
n1<-0
n2<-0
for(i in 1:(n-1))
{
#actualizando actual
if (numerosa[i]>=media){
n1<-n1+1
actual<-TRUE
}
else
{
n2<-n2+1
actual<-FALSE
}
#actualizando siguiente
if (numerosa[i+1]>=media){
siguiente<-TRUE
}
else
{
siguiente<-FALSE
}
if (actual!=siguiente) {b<-b+1 }
}
#validandola ultima
if ((numerosa[n]>=media && numerosa[n-1]<media) || (numerosa[n]<media && numerosa[n-1]>=media))
b<-b+1
if (numerosa[n]>=media){n1<-n1+1}else{n2<-n2+1}
writeLines(paste("n1 = ",toString(n1),"n2 = ",toString(n2),"b = ",toString(b),sep=" "))
m<-(2*n1*n2)/n +0.5
o<-2*n1*n2*(2*n1*n2 - n)/(n^2*(n-1))
writeLines(paste("Mb = ",toString(m),"O^2b = ",toString(o),sep=" "))
z<-(b-m)/o^(.5)
writeLines(paste("Valor del estadigrafo de prueba Z = ",toString(z),sep=" "))
z
}
y por aca el mismo en paralelo
carreras<-function(numerosa){
c<-iniciaCluster()
writeLines("Test Carreras por encima y por debajo de la media para la validacion de independencia en un conjunto de numeros aleatorios")
numerosa<-runif(10e6)
media<-0.99/2
b1<-0
n<-length(numerosa)
n1<-0
n2<-0
b<-foreach(i = 1:(n-1), .combine = "+") %dopar%
{
#actualizando actual
if (numerosa[i]>=media){
n1<-n1+1
actual<-TRUE
}
else
{
n2<-n2+1
actual<-FALSE
}
#actualizando siguiente
if (numerosa[i+1]>=media){
siguiente<-TRUE
}
else
{
siguiente<-FALSE
}
if (actual!=siguiente) {b1 <- 1} else b1<- 0
b1
}
#validandola ultima
if ((numerosa[n]>=media && numerosa[n-1]<media) || (numerosa[n]<media && numerosa[n-1]>=media))
b<-b1+1
if (numerosa[n]>=media){n1<-n1+1}else{n2<-n2+1}
writeLines(paste("n1 = ",toString(n1),"n2 = ",toString(n2),"b = ",toString(b),sep=" "))
m<-(2*n1*n2)/n +0.5
o<-2*n1*n2*(2*n1*n2 - n)/(n^2*(n-1))
writeLines(paste("Mb = ",toString(m),"O^2b = ",toString(o),sep=" "))
z<-(b-m)/o^(.5)
writeLines(paste("Valor del estadigrafo de prueba Z = ",toString(z),sep=" "))
z
stopCluster(c)
}