Notas introdutórias sobre paralelização, em particular padrões de problemas e algoritmos

10

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:

  1. definir uma matriz de números inteiros como zero (dimensiona perfeitamente.)
  2. somando uma matriz de números inteiros (quanto mais threads você usar, maior será a sobrecarga).
  3. 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.

shuhalo
fonte
Você pode reformular esta frase: "Por exemplo, eu gostaria de ter uma linguagem porque a abordagem paralela óbvio para os seguintes problemas têm comportamento qualitativo diferente"
Gopi
Feito. Espero que isso seja mais preciso.
shuhalo

Respostas:

6

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.

Gopi
fonte
11
O termo "linguagem" se refere à linguagem natural, não à linguagem de programação ou similar. Assim como a matemática é uma linguagem, diz-se que, por exemplo, a teoria da categoria ou a teoria dos grupos fornece uma "linguagem" para certas estruturas, relações e fatos. Mas obrigada mesmo assim.
shuhalo
de fato, meu mal :). Então, para as três perguntas que você fez, eu realmente recomendo o livro que vinculei, o que é muito teórico. Eles estudam todo tipo de algoritmos e técnicas paralelas em diferentes tipos de arquitetura paralela. Então a parte que pode responder às suas três perguntas seria a parte de Loops uniformes .
Gopi
+1 para a Iniciativa de Currículo NSF / IEEE-TCPP, mas sugiro que você remova o OpenMP & MPI, pois eles não são realmente relevantes aqui.
Jukka Suomela 7/10
Na verdade, eu esqueci de removê-lo após o comentário de @Martin. Obrigado.
Gopi
7

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.

Massimo Cafaro
fonte
1

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.

Chad Brewbaker
fonte