Execução paralela de várias cópias do mesmo arquivo com entradas diferentes usando o script shell

2

Suponha que eu tenha um arquivo "Analysis.C", que usa um arquivo de dados como entrada. O arquivo de dados é denominado "a.00001.txt" por meio de "a.01000.txt". Uma maneira de fazer loop em todos os arquivos é escrever um script de shell no qual eu uso sed para alterar o nome do arquivo de entrada em "Analysis.C" em uma iteração de 0001 para 1000. No entanto, preciso fazer esse arquivo de entrada de uma vez.

O que eu quero é executar várias instâncias do arquivo "Analysis.C" em paralelo, onde ele recebe diferentes entradas em cada instância (a restrição aqui é o número de núcleos que posso poupar no meu PC, suponho), e executa as diferentes instâncias ao mesmo tempo. Como faço isso?

    
por Diptanil Roy 31.08.2018 / 07:54

2 respostas

1

Com o GNU Parallel, você pode fazer isso:

parallel analysis.C ::: *.txt

Ou se você tiver realmente muitos .txt -files:

printf '%s
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
' *.txt | parallel -0 analysis.C

O padrão é executar um trabalho por thread de CPU. Isso pode ser ajustado com -j20 para 20 trabalhos em paralelo.

Ao contrário do parallel.moreutils -solution, você pode processar a saída: A saída é serializada, então você nunca verá a saída do mix de duas tarefas.

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.

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

Por razões de segurança, você deve instalar o GNU Parallel com seu gerenciador de pacotes, mas se o GNU Parallel não estiver empacotado para sua distribuição, você pode fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos ao fazer isso:

parallel analysis.C ::: *.txt

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

Leia o livro: link

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

    
por 31.08.2018 / 09:10
1

Veja o comando parallel (do pacote moreutils em muitas distros). Na página do manual:

parallel runs the specified command, passing it a single one of the specified arguments. This is repeated for each argument. Jobs may be run in parallel. The default is to run one job per CPU.

Então:

parallel analysis.C -- a.0????.txt
    
por 31.08.2018 / 08:24