Reconstruction of trees

We test the time needed to generate reconstructed trees from sim_srt

sim_srt <- function(tree, pars, parallel=F, n_trees){    # simulate set of reconstructed trees
  if(parallel){
    no_cores <- detectCores()- 1 
    cl <- makeCluster(no_cores)
    registerDoParallel(cl)
    trees <- foreach(i = 1:n_trees, combine = list) %dopar% dmea::rec_tree(w=tree$t, pars=pars)
    stopCluster(cl)
  }
  else{
    trees = vector('list',length=n_trees)
    for (i in 1:n_trees){
      rec = dmea::rec_tree(w=tree$t, pars=pars)
      trees[[i]] = rec
    }
  }
  return(trees)
}  

Thus, we test the two versions of this function:

  1. First for short simulations
st = sim_phyl()
st2 = dmea::drop.fossil(st$newick)
st3 = phylo2p(st2)

p=proc.time()
tt = sim_srt(st3,pars=c(0.8,0.0175,0.1),n_trees=100)
print(proc.time()-p)
##    user  system elapsed 
##   0.464   0.004   0.465
p=proc.time()
tt = sim_srt(st3,pars=c(0.8,0.0175,0.1),n_trees=100,parallel=T)
print(proc.time()-p)
##    user  system elapsed 
##   0.076   0.020   0.785
  1. Then for longer ones
p=proc.time()
tt = sim_srt(st3,pars=c(0.8,0.0175,0.1),n_trees=1000)
print(proc.time()-p)
##    user  system elapsed 
##   4.364   0.000   4.364
p=proc.time()
tt = sim_srt(st3,pars=c(0.8,0.0175,0.1),n_trees=1000,parallel=T)
print(proc.time()-p)
##    user  system elapsed 
##   0.440   0.032   3.133
  1. And even longer ones.
p=proc.time()
tt = sim_srt(st3,pars=c(0.8,0.0175,0.1),n_trees=10000)
print(proc.time()-p)
##    user  system elapsed 
##  42.680   0.012  42.687
p=proc.time()
tt = sim_srt(st3,pars=c(0.8,0.0175,0.1),n_trees=10000,parallel=T)
print(proc.time()-p)
##    user  system elapsed 
##   4.244   0.412  26.822

Conclusion: The parallel option is useful for big amount of simulations only. If we are goung to simulate only 100 trees better use the normal procedure.