Estou procurando notas de aula disponíveis on-line ou outros recursos que ofereçam uma boa introdução à programação paralela, assim como o analógico paralelo de classes básicas em ciência da computação.
Meu foco é o seguinte: enquanto sou capaz de falar sobre dividir e conquistar, algoritmos gananciosos, programação dinâmica e similares, ou seja, padrões básicos de algoritmos seqüenciais (e problemas), e não tenho a linguagem apropriada para classificar abordagens em algoritmos paralelos.
Por exemplo, gostaria de adquirir os termos apropriados para expressar o fato de que as abordagens paralelas óbvias para cada um dos seguintes problemas têm um comportamento qualitativo diferente:
- definir uma matriz de números inteiros como zero (dimensiona perfeitamente.)
- somando uma matriz de números inteiros (quanto mais threads você usar, maior será a sobrecarga).
- Dada uma matriz, liste os produtos de cada entrada com a outra entrada (se paralelizarmos o loop for for duplo canônico, o tempo de execução será escalado para o sqrt dos processadores numéricos.)
Um ambiente de memória compartilhada é suficiente e a comunicação entre processos não é tão relevante para mim (na verdade, estou interessado em algoritmos que evitam isso). Além disso, os aspectos técnicos são negligenciáveis para mim.
Respostas:
Para um livro introdutório para programação paralela (eu não sei sobre material on-line), eu o aprendi com Algoritmos Paralelos de Casanova, Legrand e Robert, o que é muito útil para começar no algoritmo paralelo teórico.
Além disso, no SPAA'11 houve uma discussão sobre o que um algoritmo paralelo e um aluno de computação distribuída devem saber e o que deve ensinar. Esta iniciativa curricular sobre computação paralela e distribuída ajudará você a encontrar não um curso, mas a lista de tópicos diferentes que devem ser abordados durante um curso de graduação. Então suponho que seja mais fácil encontrar documentação sobre cada tópico específico.
fonte
Se você não deseja se aprofundar nos detalhes sangrentos, é fornecida uma introdução muito boa aos padrões de design de paralelização no livro Patterns for Parallel Programming de Mattson, Sanders e Massingill.
Você encontrará soluções gerais e amplamente aplicáveis à paralelização e até uma breve introdução ao OpenMP e MPI. O livro começa com a introdução de padrões de design e simultaneidade. Em seguida, os autores ilustram como explorar a simultaneidade, como estruturar o algoritmo e como realmente implementá-lo, levando em consideração a sincronização e a comunicação.
Novamente, este não é um livro sobre algoritmos paralelos. Ele faz um excelente trabalho em apresentar materiais estritamente relacionados à engenharia de software paralela, com foco prático e teórico. Portanto, deve atender perfeitamente às suas necessidades.
fonte
MPI_RUBY ... preciso encontrar minha última versão estável. Eu sugeriria adicionar prefixo paralelo (varredura) à lista. Eu ensinaria o prefixo paralelo e mostraria a eles como usar uma curva de preenchimento de espaço para obter melhor eficiência do cache no problema de todos os pares.
fonte