Construindo um 'supercomputador' improvisado conectando vários PCs usados em uma LAN

4

Eu estou em desenvolvimento contínuo de um programa de computador simples, mas com processamento intensivo, que eu uso para pesquisa científica. Seria realmente útil ter mais velocidade de processamento. No momento, estou executando o Mac OS X 10.5.7 em um processador Intel Core Duo de 2 GHz e meu programa funciona bem devagar. Por um tempo eu estava rodando em um laptop consideravelmente mais antigo com o Ubuntu e ele rodou ~ 20 vezes mais rápido.

O que eu estou pensando é que eu poderia colocar na LAN um monte de PCs baratos de segunda mão rodando Linux, e usar programas com threads para distribuir a carga de processamento entre os computadores. Meu programa é embaraçosamente paralelo , ou seja, aumentos lineares no número de núcleos devem levar a aumentos quase lineares na velocidade de computação. Além disso, o tamanho do programa, os requisitos de memória e os requisitos de HD são praticamente nulos, e a quantidade de informação a ser passada para e da rotina principal (entre computadores) é basicamente zero.

Então, o que eu estou querendo saber é que tipo de bloqueios de estradas provavelmente estarão no caminho de implementar isso? Deveria ser bem direto ou não? Será que vai funcionar mesmo? Além disso, ao comprar os computadores usados, que fatores devo levar em consideração? Para os meus propósitos, é um dual core 2GHz ~ = para um único núcleo 4GHz? Eu acho que, como regra geral, eu deveria ir com as máquinas multicore-processor mais baratas que eu posso encontrar (melhor custo de processamento).

    
por Matt Munson 24.10.2011 / 10:03

3 respostas

3

Atenção: a maioria dos conhecimentos aqui é teórica e precisa ser apoiada em fatos baseados em necessidades específicas

Você provavelmente poderia / deveria configurar um cluster. Se você está indo para novos sistemas, os sistemas multicore mais baratos soam como uma boa aposta (se você for para os antigos EVITE PENTIUM IVs, a menos que você queira aquecer a sala mais eficientemente do que você processaria.Eu consideraria um dual core sistema de 2 GHz um pouco melhor do que um processador de 4 GHz, a menos que você tivesse um único segmento que requer muita energia (o que você não faz). Em geral, as versões mais recentes dos processadores tradicionais geralmente tendem a ser melhores do que as que elas substituem, especialmente recentemente, já que o uso de energia se tornou um problema. Se eu quisesse chegar ao âmago da questão, eu olharia para as várias gerações. de processadores e benchmarks para que eles tenham uma idéia mais clara de eficiência e poder.

Você provavelmente consideraria inicializar os sistemas de trabalho com um sistema operacional mínimo, fora das imagens padrão via rede usando PXE para economizar armazenamento para cada sistema individual - já que seus requisitos de RAM são mínimos, você provavelmente poderia ter todo o sistema operacional em ram, desde que você está usando apenas por uma coisa

Você precisaria ter, provavelmente, um software que possa ser executado em um cluster (ou seja, leve isso em consideração ao projetá-lo - talvez com MPI , tem a configuração do software de cluster e assim por diante. Dito isto, tenho visto matrizes MASSIVE de PCs de commodity ligados em uma universidade por um cluster para que seja plausível

Por outro lado, considerando a paralelização massiva é o seu objetivo principal, e você está indo para cargas de trabalho massivamente paralelas, você pode querer considerar alternativas para um cluster x86 - o ubuntu tem um cluster de 48 núcleos que eles criaram a partir de placas de desenvolvimento de braço (Eu estou pensando que um conjunto de sistemas pi de framboesa seria ... interessante, e bastante eficiente em termos de poder, se você não se importasse com uma enorme quantidade de sistemas pouco caros e estranhos).

    
por 24.10.2011 / 11:06
2

O Journeyman Geek tem muitos pontos positivos sobre como configurar seu próprio cluster, mas eu também gostaria de adicionar, dependendo da sua carga de trabalho, pode ser mais barato usar algo como Elastic Map-Reduce. Se a sua carga de trabalho pode ser transformada em um problema Map-Reduce você deveria olhar para ele. Depois de calcular o custo de comprar os computadores, eletricidade, resfriamento e custos de manutenção, pode ser mais barato / hora apenas executá-lo na Amazon (US $ 0,10 / hora para o nível mais baixo da Amazon, US $ 0,045 / hora se você usar o ponto atual preço da instância))

Se você estiver disposto a fazer um pouco mais de esforço, pode usar seu próprio mecanismo de processamento paralelo e usar a micro instância para um preço ainda mais baixo (US $ 0,02 / hora para uma instância completa, US $ 0,007 / hora). O próprio pacote Map-Reduce da Amazon não será executado nele. Isto pode ser muito útil se o seu processo for ligado à cpu se a memória ligada como micro instâncias for mais rápida que a pequena imagem padrão, mas não tiver armazenamento e menos memória RAM.

    
por 24.10.2011 / 17:34
0

Outra opção que você pode considerar é rodar seu programa dentro do BOINC . Isto tem a vantagem de um sistema existente que já tem a parte difícil de distribuir e coletar "empregos". Isso também permite que você obtenha mais pessoas para executar seu programa. Você pode obter amigos ou até mesmo pessoas aleatórias na internet para executar o seu programa, se você anunciar o suficiente. Isso permite que você tenha um cluster (potencialmente) massivo de computadores para executar programas sem o custo inicial de muitos computadores pequenos e os custos de eletricidade em andamento.

Note que eu nunca programei no BOINC, então a dificuldade de fazer isso é algo que você terá que descobrir. Para uma plataforma inicial, eu acho que o tempo economizado não ter que reinventar o BOINC iria equilibrar a complexidade de usá-lo

    
por 24.10.2011 / 17:57