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.