Pergunta

Se você pretende escrever uma aplicação paralela muito computacionalmente intensivas, que guidelines você usaria para criar seus objetos (se classes ou estruturas, ou qualquer outra coisa) para maximizar o seu potencial de tirar o máximo proveito do paralelismo.

Estou pensando em uma aplicação que dizem interpreta / compila uma árvore-como gráfico de objetos que exigem a criação de material, passando-o para outro objeto a ser processado, e assim por diante, com a árvore como estrutura.

O que se deve considerar a partir do processo inicial do projeto?

Foi útil?

Solução

Se você estiver criando coisas e depois passá-la para ser processado, em seguida, quase certamente você pode projetar seu aplicativo para fazer uso de passagem de mensagens e isolamento objeto.

O primeiro passo será identificar responsabilidades, isto é, a identificação de quem vai lidar com o que. Cada quem é arredondado por uma caixa.

O segundo passo será definir o fluxo de informações entre suas caixas, isto é, se A produz X ... quem consome?

Depois que os dois passos você terá uma simples gráfico com as folhas representam os trabalhadores e as setas representam mensagens. Cada seta representa um ordem dependência (isto é, se uma seta vai de a para B, então uma precisa ser executado antes de B).

Com isso, você vai ser capaz de ver facilmente quais ações podem ser feitas em paralelo e quais ações são de fato seqüencial em um fácil gráfica para ver, fácil de mostrar caminho.

Em seguida, basta implementar a estrutura de um Cachimbo para deixá-lo passar mensagens entre os trabalhadores para que todos os trabalhadores têm um gasoduto de trabalho.

Em uma nota final: Uma vez que o design original é feito, é relativamente fácil de refatorar-lo, a fim de melhorar. Por exemplo, os nós que fazem o mesmo trabalho pode compartilhar TUBOS de trabalho, de modo que 8 analisador de sintaxe consumir a partir do pipe "léxico token", ou alterá-lo para que os trabalhadores podem "roubar" o trabalho de outros tubos de trabalhadores, etc.

Outras dicas

Se você pode ir longe com o uso de uma série de estruturas de dados imutáveis, que você vai economizar muito tempo, digitação e dor de cabeça.

O padrão de Jorge Córdoba descreve acima é apenas uma abordagem. O seguinte é definitivamente vale a pena ler:

http://www.amazon.com/Patterns-Parallel-Programming-Software / dp / 0321228111

É muito depende das dependências entre os dados quanto à melhor maneira de se decompor seu problema. Por exemplo, padrões como dados do programa vários único mestre-Trabalhador e (SPMD) tendem a ser abordagens muito simples se o seu problema se presta a sunch e abordagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top