Está en la página 1de 42

COMPUTACIN DE ALTO RENDIMIENTO (HPC)

Ponente: Ing. Adolfo J. Cardozo S.


DOCENTE (DHIC) INVESTIGADOR (CIDRHI)
CANDIDATO DOCTORAL EN CIENCIAS DE LA INGENIERA (UCV)
Computacin de Alto Rendimiento
Conjunto de tcnicas y herramientas para el desarrollo de
simulaciones computacionales de problemas complejos.
Busca maximizar el aprovechamiento de las capacidades
computacionales de un sistema.
Se apoya en tecnologas computacionales como
supercomputadoras, clusters, multicores, multiprocesadores,
etc.
Computacin de Alto Rendimiento
Se centra en desarrollar
tcnicas y herramientas que
permitan resolver grandes
problemas (en tiempo y
espacio, o de gran cantidad
de datos) en tiempos
razonables usando en lo
posible sistemas simples.
Computacin de Alto Rendimiento
Importante ante las necesidades de cmputo para:
Problemas complicados
Modelos complejos
Grandes volmenes de datos
Capacidad de respuesta en tiempo limitado (tiempo real)
Computacin de Alto Rendimiento
Para hacer algo ms rpido se puede:
Trabajar ms duro mejoras en tecnologa (hardware)
Trabajar ms inteligentemente optimizacin de algoritmos
Buscar ayuda procesamiento paralelo

Tendencia actual:
Tecnologa Clusters (clusters Beowulf)
Algoritmos Librera BLAS, LAPACK y similar
Procesamiento paralelo Paradigma y librera (threads,
OpenMP, MPI, CUDA)
Computacin Paralela
Es un mtodo que divide grandes
P1
problemas en componentes ms pequeos, P2
llamados tareas o procesos, que pueden P3
resolverse en paralelo, cada uno una parte..
Tiempo
En contraste existe la computacin h1
concurrente, donde existe simultaneidad en P h2
la ejecucin de varias tareas interactivas. h3

La computacin paralela se implementa:


A nivel de instrucciones pipeline
A travs de hilos de ejecucin multithreading
A alto nivel (supercomputadoras) elementos hardware
(multiprocesador, cache, etc)
Porqu computacin paralela?
Secuencial Paralelo
Se ejecutan en un computador que tiene Se ejecutan utilizando mltiples CPUs.
una sola CPU. El problema se divide en partes discretas
El problema se divide en una serie de que pueden ser resueltas
instrucciones discretas. simultneamente.
Las instrucciones son ejecutadas una Cada parte es dividida en una serie de
despus de otra. instrucciones.
Solamente una instruccin puede ser Las instrucciones de cada parte se
ejecutada en cualquier momento. ejecutan simultneamente en diferentes
Se alcanzaron limitaciones fsicas en los CPUs.
CPUs Madur la tecnologa paralela en CPUs.
Computacin Paralela
Limitaciones. Ley de Amdahl
Computacin Paralela
Arquitecturas paralelas (hardware):
Computacin Paralela
Computador paralelo: estndares actuales
Memoria compartida: un nico espacio de
memoria y todos los procesadores tienen
acceso a la memoria.

Memoria distribuida (paso de mensajes): cada


procesador tiene su memoria. Intercambia
datos por paso de mensajes.

Simple Instruccin Mltiple Dato: muchas


unidades de proceso realizando la misma
operacin, cada una sobre sus datos.
Computacin Paralela
Paradigma memoria compartida:
Hardware: procesadores multicore (Intel Core 2 Duo, AMD Athlon X2,
Intel i3, i5, i7)
Programacin: C, C++, Java threads, Pthreads (API), OpenMP
Paradigma memoria distribuida:
Hardware: especfico: IBM SP, Cray, Intel Paragon. Genrico:
multiprocesadores, Clusters.
Programacin: Java (biblioteca de paso de mensajes), MPI (OpenMPI,
MPICH, LAMMPI)
Paradigma SIMD:
Hardware: GPU Graphics Processor Unit (NVIDIA), Intel Xeon Phi
Programacin: CUDA (Nvidia), OpenCL
Computacin Paralela
Cluster:
Tipo de sistema de procesamiento paralelo o
distribuido, compuesto por un conjunto de
computadoras que son capaces de trabajar
cooperativamente como un nico e integrado
recurso de cmputo.
Caractersticas tpicas:
Red rpida, mejor que una LAN tpica (Gigabit o
mejor)
Protocolos de comunicacin de latencia baja.
Menor conexin que un Multi Procesador
Simtrico (SMP)
Almacenamiento redundante a bajo costo.
Escalabilidad incremental.
Sistema multipropsito (no dedicado)
Herramientas de software completas:
compiladores, Threads, Sos, etc.
Computacin Paralela
Clusters Beowulf:
Mi Clusters Beowulf en Rosario, Argentina.

Actualmente cuenta con:


3 Computadores QuadCore,
8Gb RAM, Disco Duro 1 Tb, red Gigabit
Computacin Paralela
Clusters Rosario:
Entornos de Programacin Paralela
Implementacin de lenguajes y bibliotecas
para desarrollar programas paralelos:
Proveen abstraccin del computador paralelo
subyacente.
Permiten implementar cooperacin de varios
procesos para resolver el problema comn.
Proveen primitivas/funciones para sincronizacin
de procesos, comunicacin de datos, etc.
Proporcionan diversos mecanismos de tolerancia
a fallos y excepciones.
Dan soporte para asegurar la portabilidad y
garantizar la ejecucin en entornos paralelos
heterogneos.
Entornos de Programacin Paralela
Memoria compartida sin threads (SMM)
Los procesos/tareas comparten un espacio de direccio-
nes comunes, que pueden leer y escribir
asincrnicamente.
Se utilizan varios mecanismos (bloqueos / semforos)
para controlar el acceso a la memoria compartida,
resolver contenciones y prevenir condiciones de
sobrescritura y colgaduras.
Es el modelo ms simple de programacin paralela.
Todos los procesos ven y tienen igual acceso a la memoria compartida, por
que el programador no tiene que especificar la comunicacin entre las
mismas.
Es difcil entender y manejar datos localmente, es duro de entender y puede
estar fuera del control del programador promedio.
El estndar es C/C++ con fork-join
Entornos de Programacin Paralela
Memoria compartida con Threads
Es de tipo de programacin con memoria compartida.
Un slo proceso pesado puede tener mltiples caminos
livianos de ejecucin concurrentes.
El proceso pesado carga y adquiere los recursos
necesarios, ejecuta el trabajo serial del programa, y
crea y administra un nmero de tareas (threads o hilos)
que vienen y van, y finalmente permanece presente
hasta que se complete la aplicacin.
Cada thread tiene sus datos locales, pero todos
comparten los recursos del proceso pesado.
Se implementa de dos modos: a) una librera de
subrutinas que se llaman desde el cdigo fuente
paralelo; b) un conjunto de directivas dentro del cdigo
fuente serial o paralelo.
Los estndares son: Java threads, Pthreads y OpenMP
Entornos de Programacin Paralela
OpenMP
Especificacin para un conjunto de directivas y clusulas de compilador,
librera de rutinas y variables de ambiente para especificar paralelismo de
memoria compartida.
Se utiliza en sistemas con procesadores multicore o en sistemas
multiprocesador.
Disponible para C/C++ y Fortran, tambin se encuentran algunos bindings
para Python.
Portable / multi-plataforma, incluyendo plataformas Unix, Linux y Windows.
Puede ser muy fcil y simple de usar, proveyendo paralelismo incremental,
comenzando con cdigo totalmente serial.
Entornos de Programacin Paralela
OpenMP
Las directivas y clusulas se aaden como comentarios
Tipos de directivas:
Distribucin de trabajo
Sincronizacin de tareas
Tipos de clusulas:
Datos
Comportamiento
Sincrona
El soporte para OpenMP se activa al compilar:
Versin serial del programa:
gcc o ejemplo.x ejemplo.cc
gfortran o ejemplo.x ejemplo.f90
Versin paralela del programa:
gcc fopenmp o ejemplo.x ejemplo.cc
gfortran -fopenmp o ejemplo.x ejemplo.f90
Entornos de Programacin Paralela
OpenMP
Ventajas:
Sencillo, no requiere envo explcitos de mensajes entre procesos
La descomposicin de datos es automtica
Admite paralelizacin incremental del cdigo
Mismo cdigo fuente para versiones serial y paralela
Elevada portabilidad
Desventajas:
Requiere de un compilador que entienda OpenMP
El estndar slo contempla C y Fortran
Slo es eficiente en mquinas de memoria compartida (multicore)
La eficiencia paralela es baja.
La escalabilidad es limitada por el acceso a memoria
Aumentar la eficiencia requiere reestructurar el cdigo
Entornos de Programacin Paralela
OpenMP (Fortran) - !$omp directives [clause]
Entornos de Programacin Paralela
OpenMP

DO / for iteraciones compartidas SECTIONS particiona el trabajo en SINGLE serializa una


de un bucle por el equipo. secciones separadas. seccin de cdigo
Representa un tipo de Cada seccin es ejecutada por un hilo.
paralelismo de datos". Se puede utilizar para implementar un
tipo de paralelismo funcional
Entornos de Programacin Paralela
OpenMP
Ejemplo: ejecucin> export OMP_NUM_THREADS
./calc_pi_openmp_PE.x
Entornos de Programacin Paralela
Memoria distribuida con paso de mensajes:
Es de tipo de programacin con memoria distribuida.
Un conjunto de tareas con su propia memoria local.
Mltiples tareas pueden residir en una misma
mquina fsica y/o a travs de un nmero de
mquinas.
Las tareas intercambian datos a travs de
comunicaciones por envo y recepcin de mensajes.
La transferencia de datos usualmente requiere operaciones cooperativas a
ser ejecutado por cada proceso.
Se implementa usualmente como una librera de subrutinas, cuyas llamadas
forman parte del cdigo fuente. El programador determina todo el paralelismo
El estndar es MPI con las libreras MPICH2, OpenMPI y LAMMPI.
Entornos de Programacin Paralela
MPI (Message Passing Interface)
Es una librera de especificaciones de paso de mensajes, propuesta como un
estndar por un comit de estandarizacin para especificar paralelismo con
memoria distribuida.
Es una especificacin, no una implementacin. Garantiza portabilidad entre
sistemas.
Se utiliza en sistemas interconectados por redes de comunicacin (Clusters)
Disponible para C/C++ y Fortran, tambin se encuentran algunos bindings
para Python. Se ha portado a Java.
Paralelismo explcito (definido y controlado en su totalidad por el
programador)
Flexible, expresivo, eficiente y existe mucho software alrededor de MPI.
Portable / multi-plataforma, incluyendo plataformas Unix, Linux y Windows.
Entornos de Programacin Paralela
MPI (Message Passing Interface)
Los mensajes se aaden como llamadas a rutinas.
Tipos mensajes:
Comunicacin punto a punto
Comunicaciones colectivas
Tipos de datos derivados MPI
Comunicadores y grupos (modularidad)
Topologas virtuales
El soporte para MPI se activa al compilar:
Solo existe versin paralela del programa:
mpicc o ejemplo.x ejemplo.cc
mpif90 o ejemplo.x ejemplo.f90
Entornos de Programacin Paralela
MPI (Message Passing Interface)
Ventajas:
Muy portable
No requiere un compilador especial
No necesita hardware especial, pero puede hacer uso de hardware de alto rendimiento.
Muy flexible. Puede manejar casi cualquier modelo de paralelismo.
No comparte datos
Fuerza a hacer las cosas del buen modo en trminos de descomposicin del problema
Desventajas:
Paralelismo todo o nada. Es difcil el paralelismo incremental en cdigo serial existente.
Requiere estructuras de datos distribuida. Nada de datos compartidos.
Generalmente se tiene que escribir ms cdigo.
Las operaciones de particionado en arreglos distribuidos puede ser
Entornos de Programacin Paralela
MPI (Message Passing Interface)
Entornos de Programacin Paralela
MPI (Message Passing Interface)
C : Los nombres de todas las funciones de MPI comienzan con el prefijo MPI_. Los
tipos y funciones definidas en MPI tienen una letra mayscula despus del prefijo; las
letras siguientes son minsculas.

rc = MPI_Xxxxx(parameter, )

C++ : Todas las funciones y clases estan en el espacio de nombres MPI, de tal
manera que para referirnos a una funcin de MPI se usa MPI::Xxxxx.
rc = MPI::Xxxxx(parameter, )

Fortran : Los nombres de todas las funciones de MPI comienzan con el prefijo MPI_ y
todas las dems letras son maysculas.

call MPI_XXXXX(parameter, , rc)


Entornos de Programacin Paralela
MPI (Message Passing Interface): Send y Recv
Entornos de Programacin Paralela
MPI (Message Passing Interface): Bcast y Reduce, Barrier, Scatter y Gather
Entornos de Programacin Paralela
MPI (Message Passing Interface)
Programa cdigo_mpi
Cargar definiciones MPI
Inicializar MPI
Obtener el nmero de procesos
Obtener mi nmero de proceso (rank)

si rank = o entonces
hacer algo para el proceso 0
sino
hacer algo para los otros procesos
fin si

Finalizar MPI
Fin programa cdigo_mpi
Entornos de Programacin Paralela
MPI (Message Passing Interface)
Ejemplo: ejecucin > mpiexec np 8 calc_pi_MPI_SR.x
Entornos de Programacin Paralela
Hbrido (OpenMP+MPI)
Ejemplo
Entornos de Programacin Paralela
SIMD
Entornos de Programacin Paralela
Hbrido (MPI+CUDA)
PROGRAMACIN PARALELA

Computador I3-
4160 3.6 Ghz
8GB RAM, Disco
Duro 1Tb,
(2 Cores real, 4
virtual)
PROGRAMACIN PARALELA

Computador I3-4160 3.6 Ghz


8GB RAM, Disco Duro 1Tb,
(2 Cores real, 4 virtual)
PROGRAMACIN PARALELA

Computador I3-4160 3.6 Ghz


8GB RAM, Disco Duro 1Tb,
(2 Cores real, 4 virtual)
PROGRAMACIN PARALELA

Computador I3-4160 3.6 Ghz


8GB RAM, Disco Duro 1Tb,
(2 Cores real, 4 virtual)
Se aprende ms cuando se hace disfrutando tanto
que no te das cuenta de que pasa el tiempo

Albert Einstein (Fsico Alemn) a su hijo Hans Einstein (famoso


Ingeniero Hidrulico y de Sedimentacin), 1916

También podría gustarte