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

7

Meu post abaixo foi (acho que injustamente) fechado no StackOverflow, portanto, meu lançamento aqui.

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

Basicamente, temos um grande número de arquivos de vídeo que precisamos transformar para que nossos analistas possam fazer sua análise. O problema é complicado pelo fato de não poder contar mais sobre o projeto.

Publicação original: link

    
por Community 14.07.2009 / 20:04

9 respostas

9

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

Resposta curta para você: Se o seu software de processamento permitir que você separe os trabalhos e os execute em paralelo, faça isso. Se isso não acontecer, fale com as pessoas que escreveram sobre tê-las reutilizando-as para funcionar de forma mais paralela.

A mecânica de obter os dados para os computadores individuais, iniciar tarefas paralelas, certificar-se de que as tarefas terminaram e trazer os dados de volta é muito do que o software de gerenciamento de cluster que outros pôsteres mencionam faz. Existem alguns problemas não triviais envolvidos, mas em geral o software de gerenciamento de cluster é sobre o agendamento de trabalhos e o gerenciamento de recursos. O software de gerenciamento de cluster não lida realmente com o trabalho paralelo - é o que seu "software de processamento" terá que fazer.

Não há "magia" que você possa jogar em um grupo de vários computadores para fazê-los "agir como" uma única máquina mais rápida. Você não vai sair deste w / o tendo software que é construído para tirar proveito de vários processadores fora do portão.

    
por 14.07.2009 / 20:09
5

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

No entanto, esses são softwares complicados, criando um cluster utilizável de alto desempenho é um trabalho complicado e potencialmente dispendioso e não deve ser realizado com leviandade. 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 juntos e magicamente fazer um cluster e instalar um grupo padrão de aplicativos do Windows nele.

    
por 14.07.2009 / 20:12
2

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

Posso ter alguém sentado em cada computador e fazer parte do problema, e isso acelerará as coisas? Em outras palavras, o problema pode ser dividido em partes que são 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 clustering do 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 mestre em uma pasta.

Crie uma pasta compartilhada por cliente e monte cada cliente nessa pasta compartilhada.

Os clientes executam algumas linguagens de script do Windows (o perl funcionaria) que é ativado de vez em quando, e, se algo estiver na pasta compartilhada, renomeia para work_yourfilenamehere e executa sua transformação. Quando é feito, ele renomeia para done_yourfilenamehere. Se não, espere por 60 segundos ou mais.

O computador mestre executa um script que fica em cada uma das pastas compartilhadas. Se eles não tiverem nada, coloque um arquivo para ser transformado. Se eles tiverem um arquivo chamado done_yourfilenamehere, mova-o para a pasta done. Loop até que nada seja deixado na pasta principal.

Basicamente, todos os clientes devem ser mantidos o mais ocupado possível, com cada cliente tomando o tempo que eles precisavam para transformar cada arquivo.

    
por 14.07.2009 / 21:28
0

É possível, mas haveria uma quantidade razoável de trabalho envolvido na construção de um cluster. É difícil dizer mais sem mais informações

    
por 14.07.2009 / 20:08
0

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

O Adobe After Effects tem uma espécie de modo de clustering que eles chamam de "renderização de rede", mas não é uma solução ideal. (A última vez que verifiquei isso envolveu renderizar seu vídeo para uma sequência de imagens , que presumivelmente precisaria ser recombinada em um vídeo para seu uso)

Essa ideia básica é dividir o filme em partes e ter um PC diferente trabalhando em cada parte:

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

  • Cada parte pode ser copiada para uma pasta compartilhada diferente (novamente muito fácil de automatizar)

  • Cada um dos PCs em seu "farm" estaria procurando em uma dessas pastas compartilhadas para transformar um vídeo de origem. (Muito fácil, supondo que o software que faz a transformação tenha uma função para "assistir a uma pasta", mas um script de arquivo / shell em lote provavelmente poderia ser preparado para isso)

Sem conhecer a natureza da "transformação" do vídeo, o software que você está usando ou o nível de script / programação à sua disposição, será impossível fazer comentários adicionais.

    
por 14.07.2009 / 21:06
0

o que você está "criando" não é "um computador mais rápido", mas um cluster . que nada mais é do que um grupo de computadores usados juntos.

IOW, o que você precisa fazer é criar um programa que seja executado em cada um de seus computadores e execute parte do problema.

No seu caso específico, você tem muitos arquivos para transformar. se cada arquivo puder ser transformado independentemente dos outros, é quase fácil: distribuí-los entre as máquinas e colocá-los todos para transformar seus próprios arquivos.

    
por 14.07.2009 / 21:18
0

Como outros já disseram, depende do que você está tentando fazer e de quão simples é executar em paralelo.

A lei de Amdahl e a lei de Gustafson descrevem a quantidade de aceleração à medida que a execução é distribuída em mais processadores.

    
por 14.07.2009 / 23:26
0

Você já considerou o Hadoop? Usando o Hadoop, você pode executar o trabalho em lote como o seu usando várias máquinas.

link

    
por 07.10.2010 / 06:50
-1

A maioria dos maiores computadores do planeta são grandes clusters de muitos nós individuais, cada um dos quais é geralmente um servidor padrão.

Consulte o link , especificamente a divisão por arquitetura: link .

    
por 14.07.2009 / 20:42