6-Computacion de alto rendimiento

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