Como compartilhar CPU ou RAM?

21

Na rede, compartilhamos arquivos (driver de disco) ou bancos de dados. Mas como podemos compartilhar CPU ou RAM pela rede.

MJH
fonte
3
O problema de fazer isso é que, em comparação com as latências de nanosegundos em escala entre CPU e RAM, uma rede é incrivelmente lenta!
Phoshi 12/03
@ Phoshi: Mesmo com as latências adicionadas pela rede, essa configuração pode ser mais rápida que a troca baseada em disco.
Piskvor 24/02
@Piskvor: Mas como qualquer um pode lhe dizer, a troca baseada em disco é um enorme sucesso no desempenho!
Phoshi
@ Phoshi: Eu concordo - de fato é, e a solução ideal é "adicionar mais memória física". Tudo o que estou dizendo é que a paginação para um dispositivo rápido (por exemplo, um ramdisk) em uma rede rápida ainda pode ser mais rápida do que a paginação para um disco físico. Em outras palavras: esse pode ser um dispositivo de troca mais rápido do que uma troca em um meio físico, mesmo que seja muitas ordens de magnitude mais lenta que a RAM física.
Piskvor
11
@Piskvor: Totalmente plausível, e mesmo se você estiver errado, certamente está na mesma ordem de magnitude, portanto, não seria significativamente pior no pior dos casos. Suponho que provavelmente seja apenas mais barato ter mais armazenamento físico local!
Phoshi

Respostas:

21

Para fazer isso, os programas que acessam os recursos da CPU / RAM devem ser projetados especificamente para acessar esses recursos. Um sistema configurado dessa maneira é chamado de cluster, e a maneira comum de compartilhar recursos é com um protocolo chamado MPI (Message Pass Interface). É um download gratuito e usá-lo com Linux pode gerar um cluster poderoso (possivelmente até um super computador) por um custo mínimo, mas novamente é inútil, a menos que você tenha programas que foram projetados especificamente para tirar proveito do MPI. Existem alguns bons tutoriais de cluster por aí, se você ainda estiver interessado, verifique um.

Editar:

Eu recomendaria o tutorial aqui se você deseja configurar um cluster. Criei um cluster seguindo este tutorial há cerca de um ano e funcionou muito bem. O tutorial é um pouco antigo, portanto, alguns arquivos podem não estar exatamente onde o tutorial diz que estão (às vezes os arquivos são movidos em diferentes / mais recentes distribuições Linux), mas se você está um pouco familiarizado com o Linux, isso não deve ser um problema. O tutorial usa uma versão mais antiga do MPI, mas usei a versão mais recente e não tive problemas que não foram resolvidos com facilidade. Dependendo do que você está fazendo, pode haver um programa que pode tirar proveito do MPI. Eu sei que existem alguns programas de codificação de vídeo e processamento de números que aproveitam o MPI que pode ser baixado de fontes universais.

ubiquibacon
fonte
por favor me diga algumas referências.
MJH
11
@MJH veja minha resposta editada.
ubiquibacon
obrigado. mas este tutorial funciona no Linux e eu uso o Windows. Além disso, o aplicativo deve escrever em MPI e suas restrições.
MJH
3
@MJH se você quiser trabalhar com o Windows, basta uma biblioteca MPI que funcione com o Windows, mas o conceito é o mesmo. O MPICH funciona com o Windows ou você pode criar seu cluster do Windows com o Windows HPC (possui condutividade MPI) se você tiver que gastar uma moeda. Embora isso permita que você use o Windows, você ainda precisará usar programas escritos para MPI, mas não há como evitar isso no momento.
ubiquibacon
2
Obrigado por esta resposta - o tutorial referido parece ter alterado o endereço para uiowa.edu/mihpclab/hpcSystsemTechnicalReport/… ... Saúde!
Sdaau
9

Você pode compartilhar RAM usando discos de RAM, mas isso se parece com o compartilhamento de discos normais, exceto que eles estão na RAM de outro computador. Não existe uma maneira direta de um computador usar a RAM de outro computador como se fosse sua própria RAM, mas existem algumas maneiras de usar a RAM de outro computador. Mais sobre isso no próximo parágrafo.

Quanto ao compartilhamento de CPU, é possível, mas não existe um padrão único para isso. Você não pode simplesmente compartilhá-lo e deixar outro computador pegar os recursos necessários. Em vez disso, você precisa ter aplicativos projetados especificamente que possam funcionar em vários computadores ao mesmo tempo. Isso geralmente é chamado de computação distribuída e é usado por alguns projetos de pesquisa como SETI @ Home, Einstein @ Home, Climateprediction.net e muitos outros.

Basicamente, os programas funcionam de tal maneira que existe um servidor central que distribui o trabalho que precisa ser realizado. Os computadores na rede baixam unidades de trabalho do computador central e as processam. Depois que o computador central recebe resultados dos clientes e os mescla em um resultado coeso. Dessa forma, os computadores "compartilham" recursos de CPU e RAM pela rede. A desvantagem disso é que os programas precisam ser criados de maneira a funcionar em rede e, no momento, a computação distribuída não é popular o suficiente entre os usos comuns de um computador; portanto, apenas um pequeno número de programas especializados o suporta. Por outro lado, é comumente usado para fins científicos, pois é mais barato obter um grande número de computadores pessoais ou estações de reprodução 3 do que obter acesso a um computador de mainframe.

AndrejaKo
fonte
existe software para compartilhar meu aplicativo na minha rede? sem a necessidade de uma rede estrangeira! (por exemplo, eu quero renderizar um arquivo, que meu PC renderize isso em 7 dias, mas eu o compartilho para minha rede e reduzi-lo para 1 dia?
MJH
@MJH Infelizmente, eu não ouvi nenhum programa que pudesse fazer isso para renderização.
AndrejaKo
11
compartilhar ramdisks é meio inútil, não é? Você obtém a volatilidade do ram, com a lentidão do armazenamento conectado à rede
Journeyman Geek
11
@AndrejaKo Para transcodificação direta de vídeo, também não ouvi falar de nenhum (mas alguns pesquisando no Google, encontrei um ou dois projetos em alfa / beta). No entanto, para renderização em 3D, não vejo um programa de renderização em 3D desde os anos 90 que não oferece suporte à renderização em rede .
Scott Chamberlain
5

existe software para compartilhar meu aplicativo na minha rede? sem a necessidade de rede externa! (por exemplo, eu quero renderizar um arquivo, que meu PC renderize isso em 7 dias, mas eu o compartilho para minha rede e reduzi-lo para 1 dia? - MJH 12 / mar '11 às 1:19

Você se deparou com um problema XY , não deveria perguntar "como posso compartilhar computadores com CPU e RAM", mas "como posso usar vários computadores para tornar minhas renderizações mais rápidas no ZZZZZ?"

É altamente dependente do software que você está usando e do que está renderizando (você está transcodificando vídeo ou está processando um modelo / vídeo 3D?).

Para escolher alguns exemplos, o software 3D gratuito Blender suporta renderização distribuída, onde você pode ter muitos computadores trabalhando juntos para gerar uma saída. Se você está fazendo renderização de vídeo, pesquisou rapidamente no Google o projeto de código aberto MediaEncodingCluster, que permite renderizar arquivos de vídeo e áudio usando vários computadores.

Scott Chamberlain
fonte
5

O único sistema operacional que conheço que permite compartilhar CPU / RAM é o plan9. Lá você pode exportar / montar quase tudo. Isso não significa que as performances são boas, é claro.

Heinrich Spindeln
fonte
0

Seria um bom recurso compartilhar cpu / ram para tarefas na rede. Atualmente, ainda temos algumas noções antigas para manter os programas na caixa onde as coisas acontecem, mas podemos permitir que vários cpus na mesma máquina acessem o mesmo fragmento de código. Nós temos um método (pelo menos) que faz algo assim. o java nas páginas da web funciona usando o servidor e o cliente, mas ainda está bloqueado de uma maneira servidor-cliente para fazer as coisas (onde o servidor contém a maioria dos dados). O que precisamos ser capazes de atribuir tarefas às máquinas da mesma maneira que fazemos quando temos vários cpus (exceto a máquina que faz o trabalho precisa ter o snip do programa e o snip de dados atribuídos. Isso sobrecarrega a rede. se as tarefas em si não são de natureza simples e podem resultar em novos gargalos. Gosto da ideia de onde

k9dog
fonte