Como posso compartilhar memória para computação paralela no Mathematica?

2

É possível usar RAM de outros computadores para ajudar com a computação paralela do Mathematica Light Grid Server 7? Se sim, como?

    
por Pipe 22.12.2011 / 18:23

1 resposta

1

O Mathematica implementa computação paralela usando vários kernels (vários processos) que podem até mesmo rodar em máquinas diferentes. Existe um kernel principal com o qual você interage diretamente, e vários subkernels (controlados pelo kernel principal) que fazem o trabalho.

Então, em resumo: você não pode ter acesso direto à memória das outras máquinas, mas você pode explorá-lo totalmente executando um subkernel em cada máquina.

Você não mencionou o problema específico que está tentando resolver, mas se precisar processar um conjunto de dados grande que não cabe na memória de uma máquina em paralelo, faça o seguinte:

  1. Primeiro, divida os dados em partes gerenciáveis.
  2. Faça com que cada um dos subkernels carregue um trecho e o processe, obtendo um resultado que não ocupa muita memória.

    Existem várias maneiras de controlar os subkernels de totalmente manuais para totalmente automáticos. ParallelEvaluate[] lhe dará um controle refinado sobre cada kernel. Você também pode usar a variável $KernelID$ para decidir qual parte do conjunto de dados deve ser carregada em cada kernel. Consulte a documentação para obter detalhes.

  3. Finalmente, os resultados serão coletados no kernel principal (se o resultado não ocupar muita memória), ou serão gravados no disco de cada sub-kernel (se o resultado for tão grande quanto o dados de entrada)

Um ponto importante: para impedir explicitamente que algumas variáveis sejam automaticamente compartilhadas entre os kernels (e ocupar memória valiosa), é necessário colocá-las em um contexto separado, como descrito aqui e os links nele .

    
por 10.01.2012 / 10:21