use o argumento mc.cores no mclapply e veja o q acontece.<div class="gmail_extra"><br><br><div class="gmail_quote">2012/11/27 Adriano S. Melo <span dir="ltr"><<a href="mailto:asm.adrimelo@gmail.com" target="_blank">asm.adrimelo@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Colegas,<br>
Enviei o e-mail abaixo mas não recebi resposta. Desconfio que tenha<br>
sido devido ao tamanho da mensagem. Segue uma versão resumida do<br>
problema. Uso Ubuntu 12.04.<br>
<br>
Aparentemente, o maclapply (pacotes multicore ou parallel) tem<br>
desempenho distinto dependendo do código:<br>
<br>
## Aqui o mclapply foi mais bem mais lento que um for loop:<br>
<div class="im"> system.time({<br>
  a<-mclapply(1:1000, function(numero) sd(rnorm(100000)))<br>
 })<br>
   usuário   sistema decorrido<br>
   528.277     4.544    92.195<br>
<br>
 system.time({<br>
 a<-vector('list', 1000)<br>
 for (i in 1:1000){a[[i]]<-sd(rnorm(100000))}<br>
 })<br>
   usuário   sistema decorrido<br>
    16.301     0.520    16.835<br>
<br>
<br>
</div><div class="im">### Mas neste exemplo abaixo ele reduziu o tempo pela metade (como<br>
 esperado, visto que tenho 2 CPUs):<br>
 library(vegan)<br>
data(BCI)<br>
system.time({<br>
a<-mclapply(1:100,   function(numero) nestednodf(BCI))<br>
 })<br>
  usuário   sistema decorrido<br>
   127.996     2.520    47.902<br>
<br>
<br>
 system.time({<br>
a<-vector('list', 100)<br>
 for (i in 1:100){a[[i]]<-nestednodf(BCI)}<br>
 })<br>
   usuário   sistema decorrido<br>
    82.765     0.352    83.204<br>
<br>
</div><div class="im">Sugestões do que pode estar acontecendo?<br>
Em que situação vale a pena usar o mclapply?<br>
<br>
</div>Abraços e grato por qualquer ajuda,<br>
Adriano<br>
Ecologia - UFG<br>
<br>
<br>
Em 25 de novembro de 2012 18:21, Adriano S. Melo<br>
<<a href="mailto:asm.adrimelo@gmail.com">asm.adrimelo@gmail.com</a>> escreveu:<br>
<div class="HOEnZb"><div class="h5">> Colegas,<br>
> Estou com um problema de lentidão no uso do mclapply do pacote<br>
> multicore. Uso Ubuntu 12.04 em Dell Latitude E6500, 4Gb Ram e<br>
> processador Centrino2. Trabalho com R no gedit (repeti algumas coisas<br>
> diretamente no R executado no terminal mas não mudou nada). Já<br>
> brinquei bastante com o comando, mas ainda não consegui entender<br>
> exatamente o que está acontecendo (veja que fiz vários testes abaixo).<br>
><br>
> Seguindo uma mensagem anterior desta lista (18out12), executei o<br>
> codigo do Fernando H. Toledo em:<br>
> <a href="http://ridiculas.wordpress.com/2011/10/23/paralelizacao-de-processos/" target="_blank">http://ridiculas.wordpress.com/2011/10/23/paralelizacao-de-processos/</a><br>
> O tempo de processammento SEM mcapply foi de:<br>
> 1> tempoA[3]<br>
> elapsed<br>
>   2.065<br>
><br>
> Com o mcapply foi de:<br>
> 1> tempoB[3]<br>
> elapsed<br>
>   2.135<br>
><br>
> Visto que o tempo do mclapply foi até maior, tentei descobrir o que<br>
> estava acontecendo.<br>
> Achei isto (<a href="https://github.com/markmfredrickson/RItools/issues/2" target="_blank">https://github.com/markmfredrickson/RItools/issues/2</a>):<br>
> "My understanding is that multicore first checks to see if the<br>
> mc.cores argument is set. If so, it uses that value. Next, it checks<br>
> options("cores"), if this is set, it will use that value. If neither<br>
> condition is true, it runs detectCores() itself. So in general, we do<br>
> not need to manually detect cores. The multicore help page has more<br>
> details on this.<br>
><br>
> If you want to override in RItools, you have two options. 1)<br>
> options("cores" = 2)  -- multicore will respect this. 2)<br>
> options("RItools-apply" = function(lst, f) { mclapply(lst, f,<br>
> mc.cores= 2) }). You can also use the second strategy to set other<br>
> mclapply options.<br>
><br>
> No meu computador:<br>
> getOption("cores")<br>
> NULL<br>
><br>
> Usei a sugestão 1) acima:<br>
> options("cores" = 2)<br>
> getOption("cores")<br>
> [1] 2<br>
><br>
> Executei o código novamente, mas não adiantou:<br>
> 1> tempoA[3]<br>
> elapsed<br>
>   2.197<br>
> 1> tempoB[3]<br>
> elapsed<br>
>   2.302<br>
><br>
><br>
> Usei a sugestão 2) acima, mas também não adiantou:<br>
> 1> tempoA[3]<br>
> elapsed<br>
>   2.172<br>
> 1> tempoB[3]<br>
> elapsed<br>
>   2.249<br>
><br>
> Fechei tudo e repeti os comandos usando o mclapply do pacote parallel.<br>
> Ele não reconheceu o número de CPUs e portanto coloquei como<br>
> argumento: mc.cores = 2<br>
> Melhorou apenas um pouquinho:<br>
> 1> tempoA[3]<br>
> elapsed<br>
>    2.22<br>
> 1> tempoB[3]<br>
> elapsed<br>
>   2.205<br>
><br>
> ===>> Continuei brincando com o mclapply e vi que as coisas podem ser<br>
> diferentes:<br>
> system.time({<br>
>  a<-mclapply(1:1000, function(numero) sd(rnorm(100000)))<br>
> })<br>
>   usuário   sistema decorrido<br>
>   528.277     4.544    92.195<br>
><br>
> system.time({<br>
> a<-vector('list', 1000)<br>
> for (i in 1:1000){a[[i]]<-sd(rnorm(100000))}<br>
> })<br>
>   usuário   sistema decorrido<br>
>    16.301     0.520    16.835<br>
> #### Notem que aqui o mclapply foi BEM lento.<br>
><br>
><br>
> #### Mas neste exemplo abaixo ele reduziu o tempo pela metade (como<br>
> esperado, visto que tenho 2 CPUs):<br>
> library(vegan)<br>
> data(BCI)<br>
> system.time({<br>
> a<-mclapply(1:100,   function(numero) nestednodf(BCI))<br>
> })<br>
>  usuário   sistema decorrido<br>
>   127.996     2.520    47.902<br>
><br>
><br>
> system.time({<br>
> a<-vector('list', 100)<br>
> for (i in 1:100){a[[i]]<-nestednodf(BCI)}<br>
> })<br>
>   usuário   sistema decorrido<br>
>    82.765     0.352    83.204<br>
> ####<br>
><br>
><br>
> Eu tenho 2 CPUs:<br>
> 1> detectCores() # função do pacote parallel<br>
> [1] 2<br>
> No Monitor do Sistema pude observar que de fato o mclapply está usando<br>
> as duas CPUs para processamento (tanto com multicore quanto com<br>
> parallel).<br>
><br>
> Sugestões do que pode estar acontecendo?<br>
> Em que situação vale a pena usar o mclapply?<br>
><br>
> Abraços,<br>
> Adriano S. Melo<br>
> Ecologia - UFG<br>
_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br>
</div></div></blockquote></div><br></div>