Notas introductorias sobre paralelización, en particular patrones de problemas y algoritmos.

10

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:

  1. establecer una matriz de enteros todo cero (escala perfectamente)
  2. sumando una matriz de enteros (cuantos más hilos use, más gastos generales).
  3. 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í.

shuhalo
fuente
¿Puede reformular esta oración: "Por ejemplo, me gustaría tener un lenguaje por el cual el obvio enfoque paralelo a los siguientes problemas tiene un comportamiento cualitativo diferente"
Gopi
Hecho. Espero que esto sea más preciso.
shuhalo

Respuestas:

6

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.

Gopi
fuente
1
El término "lenguaje" se refería al lenguaje natural, no al lenguaje de programación o similar. Al igual que las matemáticas son un lenguaje y, por ejemplo, se dice que la teoría de categorías o la teoría de grupos proporcionan un "lenguaje" para ciertas estructuras, relaciones y hechos. Pero gracias de todas formas.
shuhalo
de hecho, mi mal :). Luego, para las tres preguntas que tenía, realmente recomiendo el libro que vinculé, que es muy teórico. Estudian todo tipo de algoritmos y técnicas paralelas en diferentes tipos de arquitectura paralela. Entonces, la parte que podría responder a sus tres preguntas sería la parte de Uniform Loops .
Gopi
+1 para la Iniciativa Curricular NSF / IEEE-TCPP, pero sugiero que elimine OpenMP y MPI, ya que no son realmente relevantes aquí.
Jukka Suomela
De hecho, olvidé eliminarlo después del comentario de @Martin. Gracias.
Gopi
7

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.

Massimo Cafaro
fuente
1

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.

Chad Brewbaker
fuente