pergunta sobre comandos CLI multicore

pergunta sobre comandos CLI multicore

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

No passado, eu simplesmente dividia os 150 comandos em arquivos em lote de 12 ou 13 peças, usando o comando split, e depois executava cada um. No entanto, alguns dos arquivos em lote terminaram antes de outros, e finalmente acabo 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 fazer com que cada processador pegue uma tarefa da lista de comandos 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 sejam concluídos, sem que os processadores tropecem uns nos outros e peguem o mesmo comando CLI? As gravações do arquivo devem ser exclusivas.

Existe alguma maneira fácil de fazer isso?

Responder1

Usando GNU Parallel fica assim:

cat 150commands.txt | parallel

Ele executará um trabalho por núcleo.

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

Se você tiver 32 jobs diferentes que deseja executar em 4 CPUs, uma maneira simples de paralelizar é executar 8 jobs em cada CPU:

Agendamento simples

Em vez disso, o GNU Parallel gera um novo processo quando um deles termina - mantendo as CPUs ativas e economizando tempo:

Agendamento paralelo GNU

Instalação

Se o GNU Parallel não estiver 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 fazendo o seguinte:

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

Para outras opções de instalação consultehttp://git.savannah.gnu.org/cgit/parallel.git/tree/README

Saber mais

Veja mais exemplos:http://www.gnu.org/software/parallel/man.html

Assista aos vídeos de introdução:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Percorra o tutorial:http://www.gnu.org/software/parallel/parallel_tutorial.html

Inscreva-se na lista de e-mail para obter suporte:https://lists.gnu.org/mailman/listinfo/parallel

informação relacionada