M.A. Rodríguez‐Meza Ins$tuto Nacional de Inves$gaciones Nucleares Correo electrónico: mar@nuclear.inin.mx h<p://www.astro.inin.mx/mar Paralelo vs serial 18/08/09 UAEH 1 • Dia – noche • nos levantamos – desayunamos – vamos a trabajar – comemos – regresamos a trabajar – nos vamos al antro ‐ ... • Hablamos secuencialmente • En cualquier parte de la naturaleza y en la vida humana, las acPvidades se desarrollan y expresan a si mismas a través del principio secuencial. • Es natural, por lo tanto, que los algorítmos y programas de cómputo se hayan formulado de acuerdo al concepto de secuencia. De hecho el concepto de algorítmo, antes del nacimiento de las computadoras fue definido como una secuencia finita de operaciones. 2 ¿Dónde comenzo todo? 3.1415 * 3 2.772345 /234.4567 sin(3.1415 /4) • Era del hielo: • Edad de piedra • Edad de bronce € • El oscuranPsmo: Bill Gates y MicrosoY • La manzana, pero no de Newton • El renacimiento: Linux y GNU 3 Serial Vs. Paralelo: ¿Qué vemos a nuestro alrededor? • Las colas COUNTER 2 COUNTER COUNTER 1 Q Please • Restaurant Pero ... eso es sólo una parte de la historia • La acPvidad humana y la ley natural no sólo son secuenciales sino altamente paralelas. La acción no es sólo secuencial sino que hay acción en todas partes. • El paralelismo es tan importante como lo secuencial. • Los individuos son secuenciales pero los individuos son parte de organizaciones o de colecPvidades, actuando en paralelo. • Lo mismo es cierto en la naturaleza • Las leyes de la naturaleza muchas veces se expresan como campos asicos, funciones definidas en todos lados a un Pempo dado. • Por lo tanto, una descripción completa de la acPvidad humana y de la acción en la naturaleza requiere de los dos conceptos, paralelismo y secuencialidad. 5 El concepto básico de la programación en paralelo • El proceso: una secuencia de operaciones que pueden ser realizadas por procesador individual. t x • Intercambio de información entre procesos paralelos. • Sincronización entre procesos. 6 El arte de la programación de procesos paralelos Procesos: – Proceso secuencial – Proceso paralelo Clústers: Memoria compartida Memoria distribuida Rank Sort ComputaPon: UNSORTED LIST RANK 15 4 10 3 39 7 8 2 22 6 4 0 19 5 6 1 7 Patrones o categorias – Paralelismo de datos. Un número grande de datos es sujeto a un proceso idénPco o similar. (RC‐Catalogo de galaxias) – Par7ción de los datos. El espacio de datos es parPcionado naturalmente en regiones adjacentes, cada una de las cuales es operada en paralelo por un procesador diferente. – Algorítmo relajado. Cada proceso paralelo cálcula de una manera auto‐suficiente sin sincronización o comunicación entre procesadores. El ordenamiento por rango en paralelo es un ejemplo de un algorítmo relajado. – Iteración sincrónica. Cada procesador realiza el mismo cálculo iteraPvo en una porción diferente de los datos. Sin embargo, el procesador debe ser sincronizado al final de cada iteración. – Replicated workers. Un pool central de tareas similares es mantenida. Hay un número grandes de trabajadores que sacan tareas del pool, llevan a cabo el cálculo requerido, y posiblemente agreguen una nueva tarea al pool. Todo el cálculo termina cuando el pool se vacia. – Pipelined computa7on. Los procesos son arreglados en alguna estructura regular tal como un anillo o malla bidimensional. Los datos entonces fluyen a través de toda la estructura del proceso, con cada proceso realizando cierta fase del cálculo total. 8 DegradaPon sources • • • • • • Memory contenPon. Excessive sequenPal code. Process creaPon Pme. CommunicaPon delay. SynchronizaPon delay. Load imbalance. 9 10 Paralelizando la evolución de un sistema de N‐cuerpos • Ring topology PROCESS 1 PROCESS 2 PROCESS 3 PROCESS 4 PROCESS 5 AA BB CC DD EE AE BA CB DC ED AD BE CA CB EC AC BD CE DA EB AB BC CD DE EA TO 1 11 Protocolo Message‐Passing Interface (MPI) • pnbody: – Funciones 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. MPI_Bcast MPI_Finalize MPI_Barrier MPI_Allreduce MPI_Allgather MPI_Sendrecv MPI_Reduce MPI_Send MPI_Recv MPI_Ssend MPI_Abort MPI_Gather MPI_Init MPI_Comm_Rank MPI_Comm_size pnbody: Parámetros 1. 2. 3. ThisTask NTask Ptask Tipos 1. MPI_Status 12