Pergunta

Há algum paradigma que dar-lhe uma mentalidade diferente ou ter uma opinião diferente de escrever aplicações multi fio? Talvez algo que se sente muito diferentes como de programação procedural a programação função.

Foi útil?

Solução

A concorrência tem muitos modelos diferentes para diferentes problemas. A página da Wikipedia para concorrência lista alguns modelos e há também uma página para que tem um bom ponto de partida para diferentes tipos de formas de abordagem de simultaneidade inicial.

A abordagem que você toma é muito dependente do problema na mão. Diferentes modelos resolver vários problemas diferentes que podem surgir em aplicações simultâneas, e alguns construção sobre os outros.

Na aula eu fui ensinado que usam concorrência exclusão mútua e sincronização juntos para resolver problemas de concorrência. Algumas soluções requerem apenas um, mas com tanto você deve ser capaz de resolver qualquer problema de concorrência.

Para um conceito muito diferente você pode olhar para a imutabilidade e simultaneidade. Se todos os dados é imutável, em seguida, as abordagens convencionais para a simultaneidade não são sequer necessário. explora este artigo esse tópico.

Outras dicas

Eu realmente não entendi a pergunta, mas se você começar a fazer alguma codificação usando CUDA give -lhe alguma maneira diferente de pensar sobre as aplicações multi-threading.

Ela difere de técnicas gerais-threading multi, como semáforos, monitores, etc., porque você tem milhares de threads simultaneamente. Portanto, o problema de paralelismo em CUDA reside mais em particionar seus dados e misturando os blocos de dados mais tarde.

Apenas um pequeno exemplo de uma reformulação completa de um problema de série comum é o SCAN algoritmo. É tão simples como:

  • Dado um conjunto {a, b, c, d, e}

Eu quero o seguinte conjunto:

{a, a + b, a + b + c, a + b + c + d, a + b + c + d + e}

Quando o símbolo '+' neste caso é qualquer operador Commutattive (não só mais, você pode fazer a multiplicação também).

Como fazer isso em paralelo? É uma reflexão completa do problema, que é descrito neste papel .

Muitas implementações mais de diferentes algoritmos em CUDA pode ser encontrada no

Bem, uma mudança de paradigma muito conservadora é de concorrência no segmento-centric (participação de tudo) em direcção (separação address-space) centrada em processos de concorrência. Desta forma pode-se evitar o compartilhamento de dados não intencional e é mais fácil de aplicar uma política de comunicação entre os diferentes sub-sistemas.

Esta ideia é antiga e foi propagado (entre outros) pela comunidade Micro-kernel do sistema operacional para construir sistemas operacionais mais confiáveis. Curiosamente, os Singularity OS protótipo por Microsoft Research mostra que os espaços de endereços tradicionais são nem mesmo necessário quando se trabalha com este modelo.

A idéia relativamente nova que eu mais gosto é transacional memória : Evitar problemas de concorrência, certificando-se atualizações são sempre atômica.

Tenha um looksee em OpenMP para uma variação interessante.

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