pergunta de comandos de CLI multicore

2

Eu tenho uma coleção de 150 comandos CLI para executar em um arquivo, na minha máquina de 12 núcleos. Executar todas as 150 tarefas em segundo plano prejudica o sistema e descobri por experiência que ter 12 a 18 tarefas em execução é ideal.

No passado, eu simplesmente dividia os 150 comandos em arquivos em lote de 12 ou 13 partes, usando o comando split, depois corri cada um deles. No entanto, alguns dos arquivos em lote terminaram antes dos outros, e eu finalmente acabei com 3 ou 4 arquivos em lote demorando muito mais para terminar do que outros enquanto os outros 9 ou 8 núcleos estão ociosos.

Meu objetivo é manter todos os 12 núcleos em execução até que todos os 150 comandos CLI sejam executados.

É possível que cada processador pegue uma tarefa na lista de comandos da CLI de 150, marque esse comando como em execução e deixe os outros 11 processadores pegarem seu próprio item, até que todos os 150 estejam prontos, sem que os processadores tropeçam em cada um deles. outro e pegar o mesmo comando da CLI? O arquivo escrito deve ser único.

Existe alguma maneira fácil de fazer isso?

    
por Randall 19.02.2016 / 01:07

1 resposta

2

Usando o GNU Parallel, é assim:

cat 150commands.txt | parallel

Ele executará um trabalho por núcleo.

O GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas para as quais você tem acesso ssh. Muitas vezes, pode substituir um loop for .

Se você tem 32 tarefas diferentes que você quer rodar em 4 CPUs, uma forma direta de paralelizar é rodar 8 tarefas em cada processador:

O

GNUParallelgeraumnovoprocessoquandoumtermina-mantendoasCPUsativaseeconomizandotempo:

Instalação

Se o GNU Parallel não for empacotado para sua distribuição, você poderá fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Para outras opções de instalação, consulte o link

Saiba mais

Veja mais exemplos: link

Assista aos vídeos de introdução: link

Percorra o tutorial: link

Inscreva-se na lista de e-mail para obter suporte: link

    
por 19.02.2016 / 18:55