Por que o Paralelo GNU está ficando lento?

1

Estou aprendendo o GNU paralelo e tentei o seguinte:

$ for i in {1.txt,2.txt}; do time wc -l $i; done
100 1.txt

real    0m0.010s
user    0m0.000s
sys     0m0.010s
10000012 2.txt

real    0m0.069s
user    0m0.050s
sys     0m0.018s

Eu, então, revejo o comando acima com parallel , mas ele reduziu a velocidade. Por quê?

$ for i in {1.txt,2.txt}; do time parallel --nonall wc -l $i; done
100 1.txt

real    0m0.325s
user    0m0.192s
sys     0m0.042s
10000012 2.txt

real    0m0.305s
user    0m0.220s
sys     0m0.043s
    
por user13107 19.01.2014 / 07:19

2 respostas

5

No seu caso, você está chamando de um loop para que você não esteja realmente executando nada em paralelo. Tudo o que você está fazendo é adicionar a sobrecarga de chamadas paralelas no segundo exemplo, mas ainda está apenas executando os arquivos de maneira única.

Exemplo

Isso pode ajudar você a ver o que está acontecendo.

sem paralelo

$ time for i in {1..2}; do sleep 2;done

real    0m4.004s
user    0m0.001s
sys 0m0.002s

com paralelo

$ time for i in {1..2}; do parallel "sleep 2" < /dev/null;done

real    0m4.574s
user    0m0.245s
sys 0m0.089s

Uma alternativa

Você pode chamar parallel desse jeito.

$ time parallel --gnu time wc -l ::: 1.txt 2.txt 

real    0m0.007s
user    0m0.001s
sys 0m0.000s
1000 1.txt

real    0m0.003s
user    0m0.000s
sys 0m0.001s
1000 2.txt

real    0m0.207s
user    0m0.120s
sys 0m0.052s

Aqui podemos ver que há sobrecarga em ter que chamar 'paralelamente ao terceiro agrupamento de tempo mostrando a quantidade total de tempo gasto para executar o comando paralelo inteiro.

Referências

por 19.01.2014 / 08:03
0

Graças a este post, eu entendi porque eu estava perdendo tempo com um trabalho semelhante. Espero que minhas descobertas ajudem mais pessoas!

Neste exemplo, uso tanto para como paralelamente para: - faça 100.000 operações ao poder de 10 - faça 10 operações ao poder de 1000000

Os resultados confirmam claramente o que Casey menciona: "você precisa de trabalhos que demorem mais para serem executados do que a sobrecarga introduzida pela paralelização deles". O laço for tem a vantagem para as 100.000 operações pequenas, enquanto que o paralelo tem a vantagem para o ^ 1000000

$ time for i in $(seq 100000); do echo "$i^10"|bc>/dev/null; done
real    1m19.859s
user    0m4.788s
sys     0m24.204s

$ time seq 100000|parallel "echo {}^10|bc>/dev/null"
real    2m31.269s
user    1m43.833s
sys     1m40.089s

$ time for i in $(seq 10); do echo "$i^1000000"|bc>/dev/null; done
real    1m54.729s
user    1m54.690s                                                                                                                                                                                                                                                                           
sys     0m0.023s                                                                                                                                                                                                                                                                            

$ time seq 10|parallel "echo {}^1000000|bc>/dev/null"
real    0m27.950s                                                                                                                                                                                                                                                                           
user    2m28.476s                                                                                                                                                                                                                                                                           
sys     0m0.047s 

Como você pode ver, o tempo do usuário é muito maior usando paralelo (overhead) ... mas o tempo real fica muito melhor, efetivamente obtendo os resultados mais rapidamente (por um fator de 4)

Estes não são resultados de testes extensivos, mas podem ajudá-lo a entender o tipo de operações em que o uso de paralelo será benéfico.

    
por 06.02.2016 / 17:11