É possível criar um computador mais rápido a partir de vários computadores?

É possível criar um computador mais rápido a partir de vários computadores?

Minha postagem abaixo foi (acho um tanto injusta) fechada no StackOverflow, daí minha repostagem aqui.

Pergunta original: Como posso usar vários computadores para criar um ambiente mais rápido? Tenho cerca de 12 computadores com 4 GB cada e 2 GHz cada. Preciso executar uma transformação de dados demorada e gostaria de usar o poder combinado dessas máquinas. Todos eles estão executando o servidor Win2003.

Basicamente temos uma grande quantidade de arquivos de vídeo que precisamos transformar para que nossos analistas possam fazer suas análises. O problema é complicado pelo fato de não poder contar mais sobre o projeto.

Postagem original:https://stackoverflow.com/questions/1126710/is-it-possible-to-create-a-faster-computer-from-many-computers

Responder1

O que você está perguntando está no cerne de uma questão importante na computação hoje. Os núcleos de processamento individuais não ficarão muito mais rápidos, por isso precisamos que os programadores comecem a escrever códigos que dividam problemas maiores em problemas menores que possam ser processados ​​em paralelo em vários computadores.

Resposta curta para você: se o seu software de processamento permite separar os trabalhos e executá-los em paralelo, faça isso. Caso contrário, converse com as pessoas que o escreveram sobre como reformulá-lo para funcionar de maneira mais paralela.

A mecânica de enviar os dados para os computadores individuais, iniciar tarefas paralelas, garantir que os trabalhos realmente foram concluídos e trazer os dados de volta é muito do que faz o software de gerenciamento de cluster mencionado por outros postadores. Lásãoalguns problemas não triviais envolvidos, mas em geral o software de gerenciamento de cluster trata de agendamento de tarefas e gerenciamento de recursos. O software de gerenciamento de cluster não realiza o trabalho paralelo - é isso que o seu "software de processamento" terá que fazer.

Não há nenhuma “mágica” que você possa lançar em um grupo de vários computadores para fazê-los “agir como” uma única máquina mais rápida. Você não vai sair dessa sem ter um software desenvolvido para aproveitar as vantagens de vários processadores desde o início.

Responder2

Para combinar o poder de processamento de várias máquinas, você precisará executar algum tipo de software de cluster, geralmente chamado de computação ou cluster de computação. Alguns exemplos de aplicativos que podem fazer isso são:

No entanto, esses são softwares complicados. Criar um cluster utilizável de alto desempenho é um trabalho complicado e potencialmente caro e não deve ser realizado levianamente. Você também precisará de um software especial que possa ser executado em um cluster para fazer seu trabalho. Você não pode simplesmente conectar um monte de computadores Windows e criar um cluster magicamente e instalar um monte de aplicativos Windows padrão nele.

Responder3

Um cluster de computadores funciona bem quando você pode dizer...

Posso pedir a alguém que se sente em frente a cada computador e resolva parte do problema, e isso acelerará as coisas? Em outras palavras, o problema pode ser dividido em partes basicamente independentes?

Dado que você descreve o problema como "um grande número de arquivos de vídeo para transformar", sim, isso funcionaria em um cluster.

A Microsoft possui software de cluster sobre o qual não sei nada. Pode ser o caminho a percorrer.

Provavelmente mais fácil seria:

Dedique um computador como mestre. Todo o resto são clientes.

Coloque todos os seus arquivos de vídeo neste master em uma pasta.

Crie uma pasta compartilhada por cliente e faça com que cada cliente monte essa pasta compartilhada.

Os clientes executam alguma linguagem de script do Windows (perl funcionaria) que é ativada de vez em quando e, se algo estiver na pasta compartilhada, renomeia-o para work_yourfilenamehere e executa sua transformação. Quando terminar, ele será renomeado para done_yourfilenamehere. Caso contrário, espere cerca de 60 segundos.

O computador mestre executa um script que examina cada uma das pastas compartilhadas. Se não houver nada neles, coloque um arquivo para ser transformado. Se eles tiverem um arquivo chamado done_yourfilenamehere, mova-o para a pasta concluída. Faça um loop até que não reste nada na pasta mestre.

Basicamente todos os clientes devem ser mantidos o mais ocupados possível, com cada cliente demorando o tempo que for necessário para transformar cada arquivo.

Responder4

A resposta à sua pergunta dependelargamenteno software que você está usando para "transformar" esses arquivos de vídeo e o que isso implica.

Adobe After Effects tem uma espécie de modo de cluster que eles chamam de “renderização de rede”, mas não é uma solução ideal. (a última vez que verifiquei isso envolvia renderizar seu vídeo para umimagine sequência, que provavelmente precisaria ser recombinado em um vídeo para seu uso)

Essa ideia básica é dividir o filme em partes e fazer com que um PC diferente trabalhe em cada parte:

  • Deveria haver algumas ferramentas de codificação de vídeo de linha de comando que tivessem opções para processar apenas um determinado intervalo de quadros; isso poderia automatizar a divisão.

  • Cada pedaço pode ser copiado para uma pasta compartilhada diferente (novamente muito fácil de automatizar)

  • Cada um dos PCs em sua "fazenda" procuraria uma dessas pastas compartilhadas para transformar um vídeo de origem. (Muito fácil, supondo que o software que está fazendo a transformação tenha uma função para "monitorar uma pasta", mas um arquivo em lote/script de shell provavelmente poderia ser configurado para isso)

Sem conhecer a natureza da “transformação” do vídeo, qual software você está usando ou o nível de script/programação à sua disposição, será impossível comentar mais.

informação relacionada