AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Espacio de memoria compartida Curso 2011-2012 AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Índice • • • • Modelos de memoria compartida. Modelo basado en threads. Modelo basado en directivas: OpenMP. Casos reales: CRAY T3D. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Modelos de memoria compartida • Existen dos modelos comúnmente usados en memoria compartida: – Modelo basado en procesos ligeros o threads. • Programación a bajo nivel y orientada al sistema (más que a la aplicación). • Se usa como estándar POSIX thread API (abreviado Pthreads). – Modelo basado en directivas. • Programación a alto nivel (con directivas) y orientado a la aplicación (más que al sistema). • Se usa como estándar OpenMP. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Modelo basado en threads • ¿Qué es un thread? – Es un flujo de control independiente dentro de la ejecución de un programa. En una matriz n x n, hay n2 cálculos, que se podrían hacer en paralelo for (row=0; row<n; row++) for (column=0; column<n; column++) c[row][column] = dot_product(get_row(a,row), get_col(b,col)); } Se crean n2 threads, que se planifican concurrentemente en múltiples procesadores for (row=0; row<n; row++) for (column=0; column<n; column++) c[row][column] = create_thread (dot_product(get_row(a,row), get_col(b,col))); } AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Threads • En el ejemplo anterior, todos los threads necesitan acceder a las matrices a, b, c. Esto se consigue mediante el uso de memoria compartida. • Sin embargo, las variables propias de cada thread, tienen que ser locales, ya que se generan dinámicamente en tiempo de ejecución, y por lo tanto deben estar fuera del espacio compartido. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Ventajas de los Threads • Portabilidad Software: Las aplicaciones basadas en threads pueden ser desarrolladas en máquinas serie (un procesador), y luego ser ejecutadas en máquinas paralelas sin ningún cambio. En el primer caso, se trataría de una programación de múltiples procesos sobre un único procesador, y en el segundo caso, sobre múltiples procesadores. Ambos métodos son equivalentes. • Disminución de la latencia de memoria: La memoria tarda un tiempo desde que recibe una petición hasta que puede servir los datos (latencia). Si la memoria tiene varios puertos, múltiples threads pueden acceder de forma segmentada, mejorando el tiempo de respuesta. • Planificación y equilibrado de carga: Los threads pueden reasignarse fácilmente en tiempo de ejecución, mejorando el equilibrado de carga. • Facilidad de programación: La programación con threads es intuitiva y fácil de implementar. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Exclusión mutua • El hecho de trabajar con memoria compartida, introduce el problema de regiones críticas. • No puede haber más de un thread escribiendo simultáneamente en una zona compartida, ya que puede producir riesgos en los datos. • Por lo tanto, es preciso crear cerrojos para forzar a la exclusión mutua de los threads. • Para entrar en una región crítica, el thread debe verificar que el cerrojo esté desbloqueado. De ser así, entra, lo bloquea, y al acabar el acceso lo vuelve a desbloquear. Si un thread encuentra un cerrojo bloqueado, se suspende hasta que se abra. • Este mecanismo produce un efecto negativo, ya que serializa las zonas compartidas, impidiendo cualquier tipo de paralelismo. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Barreras • Es habitual que los procesos requieran la sincronización de sus threads en ciertos instantes dados. • La sincronización es necesaria para que la lógica de los procesos se mantenga. • La barrera es un mecanismo lógico que hace que los threads se suspenden al pasar por el punto de control, hasta que todos ellos hayan llegado. Cuando esto ocurre, todos los threads suspendidos en la barrera proceden con su ejecución. • Este mecanismo produce un efecto negativo, ya que aumenta el tiempo de espera de los procesadores, y por lo tanto el rendimiento decrece. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Modelo basado en directivas: OpenMP • OpenMP es un estándar basado en directivas. • Puede ser usado con C, C++ y Fortran, a fin de desarrollar programas para máquinas con espacio de memoria compartida. • Todas las directivas de OpenMP tienen la forma: #pragma omp nombre_directiva [argumentos] AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Modelo basado en directivas: OpenMP • Las regiones paralelas se especifican por la directiva parallel. • La lista de cláusulas incluye: – Condición de paralelización: if. – Grado de concurrencia: num_threads. – Manejo de datos: private, firstprivate, shared. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Ejemplo: Cálculo del valor de π AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Organización orientada a memoria compartida El sistema de comunicación se organiza en un pseudo-procesador y una pseudo-memoria. Si un procesador pide un dato contenido en la memoria local, se sirve directamente. Si no, la petición se hace a través de la pseudo-memoria, la cual es atendida por el pseudo-procesador remoto. AT5128 – Arquitectura e Ingeniería de Computadores II Juan Antonio Maestro (2004/05) Caso real: CRAY T3D Sistema de hasta 2048 nodos (DEC Alpha 21064) conectados en toro 3-D. Mecanismos de cola para minimizar la latencia de acceso a memoria y gestión de paso de mensajes. Conjunto de registros DTB para ampliación de las direcciones físicas de memoria.