Espacio de memoria compartida

Anuncio
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.
Descargar