Estoy buscando notas de conferencias disponibles en línea u otros recursos que brinden una buena introducción a la programación paralela, al igual que el análogo paralelo de las clases básicas de informática.
Mi enfoque es el siguiente: si bien puedo hablar sobre divide y vencerás, algoritmos codiciosos, programación dinámica y similares, es decir, patrones básicos de algoritmos secuenciales (y problemas), y no tengo el lenguaje apropiado para clasificar enfoques en algoritmos paralelos.
Por ejemplo, me gustaría adquirir los términos apropiados para expresar el hecho de que los enfoques paralelos obvios para cada uno de los siguientes problemas tienen un comportamiento cualitativo diferente:
- establecer una matriz de enteros todo cero (escala perfectamente)
- sumando una matriz de enteros (cuantos más hilos use, más gastos generales).
- Dada una matriz, enumere los productos de cada entrada entre sí (si paralelizamos el doble canónico para bucle, el tiempo de ejecución se escalará al sqrt de los procesadores de números).
Un entorno de memoria compartida es suficiente, y la comunicación entre procesos no es tan relevante para mí (de hecho, estoy interesado en algoritmos que lo eviten en absoluto). Además, los aspectos técnicos son insignificantes para mí.
Respuestas:
Para un libro introductorio para programación paralela (no sé sobre material en línea), lo he estado aprendiendo con algoritmos paralelos de Casanova, Legrand y Robert, lo cual es muy útil para comenzar en algoritmos paralelos teóricos.
Además, en SPAA'11 hubo una discusión sobre qué debe saber un algoritmo paralelo y un estudiante de computación distribuida y qué se debe enseñar. Esta Iniciativa Curricular sobre Computación Paralela y Distribuida , lo ayudará a encontrar no un curso, sino la lista de diferentes temas que deben cubrirse durante un curso de pregrado. Entonces supongo que es más fácil encontrar documentación sobre cada tema específico.
fuente
Si no desea profundizar en los detalles sangrientos, el libro Patterns for Parallel Programming de Mattson, Sanders y Massingill proporciona una muy buena introducción a los patrones de diseño de paralelización .
Encontrará soluciones generales y ampliamente aplicables a la paralelización e incluso una breve introducción a OpenMP y MPI. El libro comienza presentando patrones de diseño y concurrencia. Luego, los autores proceden a ilustrar cómo explotar la concurrencia, cómo estructurar el algoritmo y cómo implementar el algoritmo teniendo en cuenta la sincronización y la comunicación.
Nuevamente, este no es un libro de texto sobre algoritmos paralelos. Hace un muy buen trabajo al presentar materiales estrictamente relacionados con la ingeniería de software paralela, con un enfoque práctico y teórico. Por lo tanto, debe adaptarse perfectamente a sus necesidades.
fuente
MPI_RUBY ... necesito encontrar mi última versión estable. Sugeriría agregar un prefijo paralelo (escaneo) a la lista. Simplemente enseñaría un prefijo paralelo y les mostraría cómo usar una curva de relleno de espacio para obtener una mejor eficiencia de caché en el problema de todos los pares.
fuente