O “parallel -jobs 10” significa que exatamente 10 trabalhos serão executados?

2

Ao especificar a opção --jobs para GNU parallel , o que exatamente isso significa?

Eu executo:

parallel --jobs 10 ./program ::: {1..100}

onde program é uma tarefa intensiva e os trabalhos são completamente independentes um do outro. {1..100} representa entradas simbólicas para cada tarefa. Quando inspeciono os processos em execução no PC, descubro que muitas vezes há menos que 10 trabalhos em execução simultaneamente.

Então, o que exatamente é --jobs especificando?

    
por becko 22.03.2016 / 17:12

1 resposta

2

De acordo com a página do manual, --jobs é o número máximo de trabalhos que serão executados em paralelo em cada máquina (ênfase minha):

--jobs N

Number of jobslots on each machine. Run up to N jobs in parallel. 0 means as many as possible.

Isso não significa que sempre será igual a isso. O primeiro e mais importante requisito para a computação paralela é que as tarefas possam ser executadas de forma independente e a saída final possa ser combinada de forma que produza a mesma saída se as tarefas forem executadas sequencialmente. Se isso não for possível, a tarefa não pode ser feita em paralelo.

Além disso, na página man paralela do GNU:

GNU parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input.

Agora, se o arquivo tiver apenas duas linhas, mas você passar --jobs 10 , parallel não poderá executar 10 trabalhos para duas linhas, já que a menor entrada é uma linha. Então, você verá apenas 2 trabalhos.

Este não é apenas o caso do GNU paralelo, mas praticamente de qualquer mecanismo de computação paralela.

    
por 22.03.2016 / 17:41