FUNDAMENTOS DE
COMPUTACIÓN PARA
CIENTÍFICOS
CNCA
Abril
2013
6. COMPUTACIÓN DE
ALTO RENDIMIENTO
Ricardo Román
DEFINICIÓN
High Performance Computing - Computación de Alto
Rendimiento
Técnicas, investigación e infraestructura entorno a problemas con
alta demanda de recursos computacionales
Comprende:
Hardware: almacenamiento, procesamiento, redes...
Software: sistemas de archivos, programación paralela...
Aplicaciones : cálculos complejos, simulación, minería...
DEFINICIÓN
Supercomputación:
Máquinas de gran escala, muchos CPUs y mucha memoria
Computación cluster:
Múltiples máquinas en red funcionando como una sola
Rendimiento se mide en operaciones de punto flotante por
segundo (FLOPS)
En la actualidad las máquinas más grandes operan en el
orden de petaFLOPS (www.top500.org)
TIPOS DE COMPUTADORAS
Taxonomía de Flynn
Instrucciones
SI/SD
SI/MD
Datos
Datos
MI/SD
MI/MD
Instrucciones
TIPOS DE COMPUTADORAS
SISD:
Una instrucción por unidad de tiempo
Trabaja sobre una sola variable (datos)
Podría utilizar pipelining
Ejemplo:
Computador con CPU de un núcleo
TIPOS DE COMPUTADORAS
SIMD:
Todos los procesadores ejecutan la misma instrucción
Podrían utilizar datos o variables diferentes
Requieren distribución y sincronización
Ejemplo:
GPUs
IBM Cell (PS3)
TIPOS DE COMPUTADORAS
MISD:
Maquina poco común
Múltiples procesadores trabajan sobre los mismos datos
Algunos usos posibles:
Sistemas tolerantes a fallas
Criptografía
TIPOS DE COMPUTADORAS
MIMD:
Cada procesador ejecuta diferentes instrucciones sobre diferentes
datos
Se pueden construir a partir de componentes SIMD
Ejemplo:
Computadores con múltiples procesadores y cada procesador con
múltiples núcleos
MÁQUINAS PARALELAS - MIMD
Memoria compartida:
SMP (Symmetric Multi-Processor)
Cada procesador posee su propia memoria caché, y está
interconectado junto con otros procesadores a la memoria principal
Direcciones de memoria comunes para todos los procesadores
Mismos tiempos de respuesta
Escrituras deben sincronizarse
Cantidad de procesadores limitada
MEMORIA COMPARTIDA
MÁQUINAS PARALELAS
Memoria distribuida:
Direcciones de memoria separadas físicamente
Lectura de un bloque de memoria local en forma inmediata
Comunicación para leer memoria remota
Bus de datos
Red
Tiempos de acceso a memoria son diferentes (local vs
remoto)
Permite conectar muchas máquinas y tener muchos
procesadores
MEMORIA DISTRIBUIDA
MÁQUINAS PARALELAS
Híbridas:
Fusión de los enfoques anteriores
Por ejemplo, clusters SMP:
Múltiples máquinas de memoria compartida
Conexión de red de alta velocidad
Permiten utilizar varios paradigmas de programación
MODELO HÍBRIDO
GPGPU
General Purpose computation on Graphic Processing Units
(computación de propósito general en unidades de
procesamiento gráfico)
Inicialmente se utilizaba el hardware para procesamiento gráfico y
las herramientas para utilizarlo en tareas de computación numérica
Hoy en día los fabricantes de tarjetas gráficas han adaptado su
arquitectura para facilitar la utilización del hardware en tareas de
propósito general
Algunas herramientas que dan más control al programador para
utilizar el hardware de las GPUs para este propósito son CUDA y
OpenCL
CPU VS. GPU
CPU se especializa en procesamiento secuencial o
“modestamente” paralelo (múltiples operaciones secuenciales
en varios núcleos)
CPU = procesamiento multi-núcleo. La cantidad de núcleos va
normalmente de 2 a 16
Núcleos con unidades de control complejas e hilos pesados (en
recursos)
GPU = procesamiento muchos -núcleos. La cantidad de núcleos
es de cientos.
Núcleos simples con unidades de control simples y gran área para
procesamiento con hilos livianos (en recursos)
VENTAJAS DE LA GPU
Son comercialmente exitosas lo cual hace estén disponibles
en casi cualquier equipo cómputo
Permite el procesamiento numérico masivamente paralelo en
computadoras personales
El modelo de paralelismo de la GPU es mucho más escalable
que el de la CPU debido a su compromiso con las operaciones
de punto flotante y al tipo de aplicaciones que maneja
SIMD
CUDA
Compute Unified Device Architecture
Arquitectura para computación paralela desarrollada por Nvidia
Permite utilizar el hardware de las GPUs para realizar procesamiento
paralelo
Procesa código secuencial en CPU y código paralelo en el dispositivo
GPU
Similar a la estructura de programación de OpenCL pero específico
para hardware Nvidia por el momento
CUDA
Modelo de programación de CUDA
Host – CPU
Device – GPU
Kernel: porción de código que se ejecuta en la GPU
Grid: conjunto de hilos que ejecutan en un kernel
PROGRAMAS PARALELOS
Memoria compartida
Las aplicaciones acceden la memoria global.
Operaciones concurrentes
Estructuras de datos compartidas
Sincronización
Memoria distribuida
Utiliza comúnmente paso de mensajes para enviar y recibir datos y
sincronizar procesos
Un proceso sólo accede su memoria local
Gran cantidad de procesadores
Cada proceso se podría mapear a un procesador físico
PROGRAMAS PARALELOS
Hilos
Múltiples rutas de ejecución concurrentes
Cada hilo:
comparte todos los recursos del hilo principal
tiene datos locales
Requieren sincronización
Los hilos pueden crearse o destruirse
El hilo principal debe permanecer activo durante toda la ejecución
Asociado a máquinas de memoria compartida
PROGRAMAS PARALELOS - ESTRATEGIAS
Paralelismo de datos:
Divide el problema en subdominios
Cada procesador trabaja sobre datos independientes
Podría mejorar la escalabilidad
Paralelismo de tareas:
Identifica regiones o tareas del programa
Se ejecutan en paralelo aquellas que son independientes
Diferentes procesadores realizan diferentes funciones
PROGRAMAS PARALELOS - ESTRATEGIAS
SPMD:
Single Program, Multiple Data
Un único programa es ejecutado por todos los procesadores.
Cada copia del programa utiliza diferentes datos.
Ej.: operaciones sobre matrices.
MPMD:
Multiple Program, Multiple Data
Diferentes operaciones son realizadas por diferentes procesadores,
sobre diferentes datos.
Puede ser un programa paralelizado por tareas y datos, o una
solución con múltiples programas ejecutables.
CONCEPTOS DE COMPUTACIÓN
PARALELA
Sea T S el tiempo de ejecución secuencial, y T P el tiempo de
paralelo:
Trabajo: tiempo computacional que tarda el programa en finalizar.
Un programa paralelo podría realizar mayor trabajo que uno
secuencial, ya que utiliza más procesadores
Aceleración : razón del tiempo secuencial con respecto al paralelo.
A = TS / TP
Eficiencia: medida de utilización de recursos del programa
secuencial con respecto al paralelo.
E = aceleración / procesadores = T S / (p*T P )
Overhead: trabajo que realiza un programa paralelo que no es parte
de su versión secuencial. Por ejemplo, sincronización, distribución,
manejo de procesos, etc.
T O = p*T P – T S
CONCEPTOS DE COMPUTACIÓN
PARALELA
Escalabilidad: un programa escalable cuando sucede alguna
de las siguientes condiciones:
El tiempo computacional es inversamente proporcional a la cantidad
de procesadores
Si se incrementa el tamaño del problema y la cantidad de
procesadores proporcionalmente:
El tiempo computacional permanece igual
La eficiencia se mantiene positiva
La escalabilidad es una función del overhead, y permite entender la
relación entre n (tamaño del problema) y p (cantidad de
procesadores).