Clusters
Clusters
Clusters
4. Clusters
Arquitectura de un cluster
Introduccin
Componentes de un cluster
Ventajas e inconvenientes
Tipos de clusters
Clusters de alto rendimiento
Clusters de balanceo de carga
Clusters de alta disponibilidad
Redes para clusters
Redes Ethernet
Myrinet
InfiniBand
Ejemplo de Cluster: Google
Arquitectura de Clusters
Definicin: Agrupacin de computadores
independientes e interconectados que
colaboran en una tarea.
El Cluster es un tipo ms de arquitectura
paralela distribuida (MPM), pero con una
caracterstica especial: cada computador
puede utilizarse de forma independiente.
Arquitectura de un cluster
2
Arquitectura de Clusters
Componentes de un cluster
Nodos de computacin
Son mltiples y pueden encontrarse encapsulados en
un nico computador o estar fsicamente separados.
Los nodos pueden ser PCs, workstation o SMPs
Middleware
SSI (Single System Image)
Ofrece al usuario una visin unificada de todos los
recursos del sistema
Se define mediante hardware o software y puede
implementarse a tres niveles:
Nivel hardware: Se ve el cluster como un sistema
de memoria compartida distribuida.
Nivel kernel S.O.: Ofrece alto rendimiento a las
aplicaciones secuenciales y paralelas. Por
ejemplo, gang-scheduling para programas
paralelos, identificacin de recursos sin uso,
acceso global a recursos, migracin de procesos
(balanceo de carga), etc.
Nivel aplicacin: Software de planificacin y
gestin de recursos, herramientas de gestin del
sistema, sistemas de ficheros paralelos, etc.
Disponibilidad
Infraestructura de alta disponibilidad, que incluye
servicios de checkpointing, recuperacin tras fallo,
tolerancia a fallos, etc.
Arquitectura de Clusters
Red de interconexin
Suele ser una red de altas prestaciones:
Myrinet, Infiniband, Gigabit Ethernet, etc.
Sistema operativo
Pueden utilizarse la mayora de los S.O. del
mercado: UNIX, Linux, W2k, WXP, etc.
Protocolos rpidos de comunicacin
Active message, Fast messages, VIA, etc.
Entornos y herramientas de programacin
paralela
Programacin: MPI, PVM, OpenMP, DSM
(Threadmarks, Linda), etc.
Depuradores paralelos: TotalView
Anlisis de rendimiento: VT (IBM SP), MPE,
Pablo, Vampir, etc.
Administracin: Parmon.
Aplicaciones
Aplicaciones paralelas o distribuidas,
secuenciales.
3
Arquitectura de Clusters
Ventajas
Relacin coste/prestaciones.
Uso de componentes comerciales (nodos y red)
Escaso coste de integracin.
Flexibilidad
Hardware comn: red, procesador, etc
Software de dominio pblico (Linux, PVM, MPI,
etc)
Alta disponibilidad
El uso de hardware comn con un coste ajustado,
permite la rplica de componentes.
Existe redundancia natural, cada nodo posee sus
propios componentes internos (bus, memoria,
procesador, etc).
Escalabilidad
Permite agregar nuevos componentes para aumentar
las prestaciones sin necesidad de eliminar elementos
ya existentes
Incorporacin de tecnologa punta
Heterogeneidad
Desventajas
Software
Problemas de administracin y gestin
Memoria fsicamente distribuida utilizacin
menos eficiente
Varias copias del sistema operativo
La red es el cuello de botella del sistema
Tipos de Clusters
Clasificaremos los clusters en tres tipos
bsicos:
Clusters de alto rendimiento
Clusters de balanceo de carga
Clusters de alta disponibilidad
Existen clusters que combinan varios
de los tipos anteriores.
Clusters de alto rendimiento (HPC)
Utilizado en aplicaciones que realizan
clculos intensivos: Simulaciones
cientficas, modelos meteorolgicos,
renderizacin de grficos, etc.
Pretenden sustituir a los grandes y
costosos supercomputadores.
Ejemplo: Clusters Beowulf
Supercomputador virtual paralelo basado en
una agrupacin de computadores con hardware
comn, y con sistema operativo y aplicaciones
libres.
4
Tipos de Clusters
Utiliza una red privada de alta velocidad
Los nodos estn dedicados exclusivamente al
cluster
Existe un nodo maestro que se encarga de
acceder, compilar y manejar las aplicaciones a
ejecutar. Normalmente es el nico con salida al
exterior.
Sistema operativo libre: GNU/Linux, FreeBSD,
NetBSD
Utiliza aplicaciones GNU: compiladores,
herramientas de programacin, y libreras de
comunicaciones estndar (MPI, PVM,
OpenMOSIX, etc.)
Tipos de Clusters
Libreras de comunicaciones estndar en
clusters HPC
MPI (Message Passing Interface)
Librera para paso de mensaje, propuesto como
estndar por un comit de vendedores,
implementadores y usuarios.
Coleccin de funciones que oculten detalles de
bajo nivel, tanto software como hardware
Diseado para obtener un alto rendimiento
tanto en mquinas paralelas como en clusters
La unidad bsica de paralelismo son los
procesos independientes
Tienen espacios de memoria independientes
Intercambio de datos y sincronizacin mediante
paso de mensajes
A cada proceso se le asigna un identificador
interno propio
Proporciona una funcionalidad flexible,
incluyendo diferentes formas de comunicacin,
rutinas especiales para comunicaciones
colectivas y la habilidad de usar tipos de
datos y topologas definidas por el usuario
dentro de las comunicaciones.
Programacin en Fortran y C. En la revisin del
estndar (MPI-2) se soporta C++ y Fortran 90
5
Tipos de Clusters
Ejemplo de programa escrito en C, usando
MPI, y su salida por pantalla cuando se ejecuta
en un cluster de 10 nodos.
#include <stdio.h>
#include <mpi.h>
void main (int argc, char *argv[])
{
int err, mi_rango;
err =MPI_Init (&argc, &argv);
err =MPI_Comm_rank (MPI_COMM_WORLD, &mi_rango);
printf (Hola mundo!, desde el nodo %d\n, mi_rango);
err =MPI_Finalize();
}
$ mpirun np 10 ./ejemplo_mpi
Hola mundo!, desde el nodo 0
Hola mundo!, desde el nodo 3
Hola mundo!, desde el nodo 8
Hola mundo!, desde el nodo 4
Hola mundo!, desde el nodo 2
Hola mundo!, desde el nodo 5
Hola mundo!, desde el nodo 7
Hola mundo!, desde el nodo 6
Hola mundo!, desde el nodo 9
Hola mundo!, desde el nodo 1
Tipos de Clusters
PVM (Paralell Virtual Machine)
Objetivo: Coordinar una red de ordenadores
para que se puedan usar cooperativamente en la
resolucin de problemas de clculo
computacional paralelo
Existe un conjunto de nodos (hosts)
susceptibles de poder ser usados en tareas de
computacin, definido por el usuario.
El usuario selecciona el conjunto de mquinas
donde se ejecutarn la tarea de computacin
paralela. Dicho conjunto puede alterarse en
tiempo de ejecucin, aadiendo o quitando
mquinas, esto es importante para la tolerancia
a fallos
Acceso semitransparente al hardware: Podemos
aprovechar las caractersticas de cada nodo para
ejecutar determinados clculos.
Computacin basada en el proceso.
Modelo de paso de mensajes explcito.
Soporte para arquitecturas heterogneas, en
trminos de mquinas, redes y aplicaciones.
Soporta los lenguajes C, C++ y Fortran.
6
Tipos de Clusters
Labatc73:~$ ./hola
Yo soy la tarea iniciadora t40015
Mensaje desde t40016: Hola, mundo desde labatc74.cluster-atc.net
// Tarea iniciadora hola.c en PVM
#include pvm3.h
void main (void)
{
int cc, tid, msgtag;
char buf[100];
printf(Yo soy la tarea iniciadora t%x\n, pvm_mytid());
cc =pvm_spawn (hola_otro, (char**)0, 0, , 1, &tid);
if (cc ==1)
{
msgtag =1;
pvm_recv(tid, msgtag);
pvm_upkstr(buf);
printf(Mensaje desde t%x: %s\n, tid, buf);
}
else
printf(No puedo ejecutar hola_otro\n);
pvm_exit();
}
// Tarea esclava hola_otro.c en PVM
#include pvm3.h
#include <string.h>
void main (void)
{
int ptid, msgtag;
char buf[100];
ptid =pvm_parent();
strcpy (buf, Hola, mundo desde );
gethostname(buf +strlen(buf), 64);
msgtag =1;
pvm_initsend (PvmDataDefault);
pvm_pkstr (buf);
pvm_send (ptid, msgtag);
pvm_exit(),
}
Tipos de Clusters
MOSIX
Sistema de administracin que hace que un cluster de
servidores y estaciones de trabajo Linux x86 funciona
casi como un sistema SMP.
Simplicidad de uso y programacin.
Prestaciones casi ptimas. Por ejemplo, cuando se
crea un proceso, MOSIX lo asignar al nodo menos
ocupado, para aumentar las prestaciones.
El kernel de MOSIX consiste en algoritmos de
administracin adaptativos que monitorizan y
automticamente responden a los requerimientos de
recursos de todos los procesos frente a los recursos
disponible en todo el cluster.
Se presenta como un parche al ncleo de Linux, ms
unas cuantas utilidades de usuario para gestionar el
cluster.
Dispone de un sistema de ficheros distribuidos: MFS
(MOSIX File System). Esto permite el uso de
ficheros compartidos por todos los nodos del cluster.
Permite trasladar todo el conjunto de trabajo de un
proceso (cdigo y datos) desde un nodo del cluster a
otro. En MOSIX, fork() puede reasignar el proceso
recin creado a otra CPU en otro nodo dentro del
cluster.
No establece ningn mecanismo propio de mensajera
entro procesos. Puede trabajar con cualquiera de las
libreras de paso de mensajes (PVM, MPI). Adems
puede usar los mecanismos de comunicacin
estndares (tuberas, tuberas con nombre, sockets
UNIX y sockets TCP/IP) para compartir datos.
La gestin del cluster se realiza leyendo y escribiendo
en archivos especiales usando la interfaz /proc del
sistema.
7
Tipos de Clusters
Clusters de alta disponibilidad (HAC)
Intenta mantener en todo momento la prestacin
del servicio, encubriendo los fallos que se puedan
producir.
Requisitos de un HAC
Fiabilidad: Tiempo durante el cual un sistema puede
operar sin pararse (MTTF)
Disponibilidad: Porcentaje del tiempo en el cual el
sistema est disponible para el usuario.
Facilidad de Mantenimiento: Indica la facilidad de
mantener el sistema en condiciones de operacin
(reparaciones, actualizaciones, etc) tanto a nivel
hardware como software. El tiempo medio durante el
cual un sistema est averiado es MTTR.
Disponibilidad = MTTF / (MTTF + MTTR)
Tolerancia a fallos Redundancia (menor MTTR)
Redundancia en el hardware: Replicacin de
componentes
Redundancia en el software: Administracin del
hardware redundante para asegurar el correcto
funcionamiento en caso de la cada de algn
elemento
Redundancia temporal: Repeticin de la ejecucin
de un conjunto de instrucciones para asegurar el
funcionamiento correcto en caso de que ocurra un
fallo
Tipos de Clusters
Posibles configuraciones
Activo-Pasivo: Las aplicaciones se ejecutan
sobre un conjunto de nodos (activos), mientras
que los restantes actan como backups
redundantes de los servicios ofrecidos.
Activo-Activo: Todos los nodos actan como
servidores activos de una o ms aplicaciones y
potencialmente como backups para las
aplicaciones que se ejecutan en otros nodos.
En cualquier caso, el fallo de un nodo, provoca
la migracin de las aplicaciones que ejecutaba,
a otro nodo del sistema. Si la migracin es
automtica se denomina failover, si es manual
switchover.
Servicios tpicos en los HAC
Bases de datos, sistemas de ficheros, servidores
de correo y servidores Web.
En general, tareas crticas que no puedan
interrumpir el servicio
8
Tipos de Clusters
Clusters de balanceo de carga (LBC)
ltimamente, ha crecido mucho la carga de trabajo
en los servidores de servicios, especialmente en los
servidores Web.
Utilizacin de mquinas de altas prestaciones
A largo plazo, el crecimiento de la carga de trabajo
dejar la mquina obsoleta.
Utilizacin de tecnologa clustering
La solucin al problema del crecimiento de la carga
de trabajo, pasara por aadir ms servidores
Balanceo de carga por DNS. Se asigna un mismo
nombre a distintas direcciones IP y se realiza un
round-robin a nivel de DNS entre ellas.
En el caso ideal la carga se repartir equitativamente
Problemas:
Los clientes cachean los datos del DNS.
Las cargas de trabajo pueden ser muy distintas
Una solucin mejor es utilizar un balanceador de
carga para distribuir sta entre los servidores. En
este caso el balanceo queda a nivel de conexin. El
balanceo de carga se puede hacer a dos niveles:
A nivel de aplicacin
A nivel IP
Tipos de Clusters
Linux Virtual Server (LVS)
Balanceo a nivel IP.
Parches y aplicaciones de mantenimiento y gestin,
a integrar sobre GNU/Linux.
Permite la construccin de clusters de alta
disponibilidad y de balanceo de carga.
Todo el sistema aparece como un nico servidor
virtual.
Existe un nodo director que controla el resto de
nodos del sistema. En este nodo director corre
Linux, parcheado para incluir el cdigo ipvs.
El nodo director se encarga de dirigir la carga de
trabajo, en funcin de un conjunto de reglas, al resto
de nodos del sistema.
Cuando un cliente solicita un servicio al servidor
virtual
El director escoge un servidor real para que se lo
ofrezca.
El director debe mantener la comunicacin entre el
cliente y el servidor real. Esta asociacin, durar lo
que dure la conexin tcp establecida.
Cuando se solicite una nueva conexin, el director
escoger de nuevo un servidor real que puede ser
distinto al anterior.
Los servidores reales pueden ser extrados del LVS
para su actualizacin o reparacin, y devueltos al
cluster sin interrumpir ningn servicio.
El sistema es fcilmente escalable.
9
Redes para Clusters
Redes Ethernet
Ethernet
LAN introducida en 1982 y ms utilizada en los aos
90
Ancho de banda a 10 Mbits/seg
No muy adecuada para clusters debido a su bajo ancho
de banda
Basada en el concepto de dominios de colisin
Fast Ethernet
LAN introducida en 1994 y ms utilizada actualmente
Ancho de banda a 100 Mbits/seg
Mediante el uso de conmutadores y hubs se pueden
definir varios dominios de colisin separados
El S.O. interviene en la introduccin y extraccin de
los mensajes, va interrupciones
La latencia aplicacin-aplicacin depende del driver y
del API
TCP/IP aprox. 150s
U-Net, MVIA aprox. 50 s
Gigabit Ethernet
LAN introducida en 1998
Ancho de banda a 1 Gbits/seg
Basado en conmutadores punto-a-punto rpidos
Redes para Clusters
Myrinet
Red diseada por Myricom
Vlida para LAN y SAN (System-Area Network)
Ancho de banda de 1,28 Gbits/seg, con conmutacin
wormhole
La responsabilidad se reparte entre el procesador del
nodo y LANai
LANai es un dispositivo de comunicacin programable
que ofrece un interfaz a Myrinet.
LANai se encarga de las interrupciones originadas por
los mensajes
DMA directa entre cola FIFO y memoria NIC, y entre
memoria NIC y memoria del nodo
La memoria NIC puede asignarse al espacio lgico de
los procesos
La latencia aplicacin-aplicacin es de aprox. 9s.
10
Redes para Clusters
InfiniBand
Nuevo estndar que define un nuevo sistema de
interconexin a alta velocidad punto a punto basado en
switches.
Diseado para conectar los nodos de procesado y los
dispositivos de E/S, para formar una red de rea de
sistema (SAN)
Rompe con el modelo de E/S basada en transacciones
locales a travs de buses, y apuesta por un modelo
basado en el paso remoto de mensajes a travs de
canales.
Arquitectura independiente del sistema operativo y del
procesador del equipo.
Soportada por un consorcio de las empresas ms
importantes en el campo: IBM, Sun, HP-Compaq,
Intel, Microsoft, Dell, etc.
Arquitectura de InfiniBand
Redes para Clusters
Caractersticas de la red Infiniband
Latencia aproximada de 4,5 s
Ancho de banda: 2,5 Gbps a 30 Gbps
No hay bus E/S
Todos los sistemas se interconectan mediante
adaptadores HCA o TCA
La red permite mltiples transferencias de datos
paquetizados
Permite RDMA (Remote Memory Access Read or
Write)
Implica modificaciones en el software del sistema
11
Ejemplo de Cluster: Google (i)
Funcionamiento ante una peticin
Seleccin del servidor Google que atender la peticin
(balanceo de carga basado en DNS entre varios clusters)
Bsqueda en un ndice invertido que empareja cada palabra
de bsqueda con una lista de identificadores de documentos
Los servidores de ndice intersectan las diferentes listas y
calculan un valor de relevancia para cada documento
referenciado (establece el orden de los resultados)
Los servidores de documentos extraen informacin bsica
(ttulo, URL, sumario, etc.) de los documentos a partir de los
identificadores anteriores (ya ordenados)
Caractersticas
Paralelismo multinivel
A nivel de peticin: Se resuelven en paralelo mltiples
peticiones independientes.
A nivel de trmino de bsqueda: Cada trmino de bsqueda
puede chequearse en paralelo en los servidores de ndice.
A nivel de ndice: El ndice de los documentos est dividido en
piezas que comprenden una seleccin elegida aleatoriamente de
documentos.
Principios del diseo de Google
Fiabilidad hardware: Existe redundancia a diferentes niveles,
como alimentacin elctrica, discos magnticos en array
(RAID), componentes de alta calidad, etc.
Alta disponibilidad y servicio: Mediante la replicacin masiva
de los servicios crticos
Preferencia en precio/rendimiento frente a rendimiento
pico: Mltiples servidores hardware de bajo coste configurados
en cluster.
PCs convencionales: Uso masivo de PCs convencionales
frente a hardware especializado en alto rendimiento.
Ejemplo de Cluster: Google (ii)
(Datos de Diciembre de 2000)
Se realizan alrededor de 1.000 consultas por segundo
Cada pgina Web es visitada una vez al mes para
actualizar las tablas de ndices
El objetivo es que la bsqueda tarde menos de 0.5 seg
(incluido los retrasos de red)
Utiliza ms de 6000 procesadores y 12.000 discos (1
petabyte)
Por fiabilidad dispone de tres sites redundantes: dos en
Silicon Valley y uno en Virginia (slo en uno se rastrea la
Web para generar las tablas de ndices)
Para la conexin a Internet se utiliza una conexin OC48
(2488Mbits/seg)
Dispone de conexiones extra (OC12, 622Mbits/seg) para
hacer el sistema ms robusto
Dispone de dos switchs (Foundry, 128 x 1Gbit/s Ethernet)
por fiabilidad
Un site dispone de 40 racks y cada rack contiene 80 PCs
Cada PC est compuesto por:
Un procesador desde un Pentium Celeron (533Mhz) a un
Pentium III (800MHz)
Dos discos duros entre 40 y 80Gb
256Mb de SDRAM
Sistema operativo Linux Red Hat
Cada rack tiene dos lneas Ethernet de 1Gbit/s conectadas
a ambos switches
12
Ejemplo de Cluster: Google (iii)
5. Programacin y aplicaciones
Modos de programacin
Paralelismo de datos
Paralelismo de tareas o funciones
Herramientas para generar programas
paralelos
Bibliotecas de funciones para la
programacin
Lenguajes paralelos y directivas del
compilador
Compiladores paralelos
Estilos de programacin
Paso de mensajes
Variables compartidas
Paralelismo de datos
Estructuras de programas paralelos
Fases de la programacin paralela
Ejemplo: Paralelizar el clculo del
nmero pi
13
Programacin y aplicaciones
Modos de progamacin
Paralelismo de datos (SPMD, Single-Program
Multiple-Data)
Los cdigos que se ejecutan en paralelo se obtienen
compilando el mismo programa.
Cada copia trabaja con un conjunto de datos distintos y
sobre un procesador diferente.
Es el modo de programacin ms utilizado
Recomendable en sistemas masivamente paralelos
Difcil encontrar cientos de unidades de cdigo distintas
Grado de paralelismo muy alto, pero no est presente en
todas las aplicaciones.
Paralelismo de tareas o funciones (MPMD, Multiple-
Programs Multiple-Data)
Los cdigos que se ejecutan en paralelo se obtienen
compilando programas independientes.
La aplicacin a ejecutar se divide en unidades
independientes.
Cada unidad trabaja con un conjunto de datos y se
asigna a un procesador distinto.
Inherente en todas las aplicaciones.
Generalmente tiene un grado de paralelismo bajo.
Programacin y aplicaciones
Herramientas para generar programas paralelos
Bibliotecas de funciones para la programacin
El programador utiliza un lenguaje secuencial (C o Fortran),
para escribir el cuerpo de los procesos y las hebras. Tambin,
usando el lenguaje secuencial, distribuye las tareas entre los
procesos.
El programador, utilizando las funciones de la biblioteca:
Crea y gestiona los procesos.
Implementa la comunicacin y sincronizacin.
Incluso puede elegir la distribucin de los procesos entre los
procesadores (siempre que lo permitan las funciones).
Ventajas
Los programadores estn familiarizados con los lenguajes
secuenciales.
Las bibliotecas estn disponibles para todos los sistemas paralelos.
Las bibliotecas estn ms cercanas al hardware y dan al
programador un control a bajo nivel
Podemos usar las bibliotecas tanto para programar con hebras
como con procesos
Ejemplos
MPI, PVM, OpenMP y Pthread.
Lenguajes paralelos y directivas del compilador
Utilizamos lenguajes paralelos o lenguajes secuenciales con
directivas del compilador, para generar los programas paralelos.
Los lenguajes paralelos utilizan:
Construcciones propias del lenguaje, como p.e. FORALL para el
paralelismo de datos. Estas construcciones, adems de distribuir la
carga de trabajo, pueden crear y terminar procesos.
Directivas del compilador para especificar las mquinas virtuales
de los procesadores, o como se asignan los datos a dichas
mquinas.
Funciones de biblioteca, que implementan en paralelo algunas
operaciones tpicas.
Ventajas: Facilidad de escritura y claridad. Son ms cortos.
Compiladores paralelos
Un compilador, a partir de un cdigo secuencial, extrae
automticamente el paralelismo a nivel de bucle (de datos) y a
nivel de funcin (de tareas, en esto no es muy eficiente).
14
Programacin y aplicaciones
Estilos de programacin
Paso de mensajes
La comunicacin entre procesos se produce mediante
mensajes de envo y recepcin de datos.
Las transmisiones pueden ser sncronas o asncronas
Normalmente se usa el envo no bloqueante y la
recepcin bloqueante.
PVM, MPI.
Variables compartidas
La comunicacin entre procesos se realiza mediante el
acceso a variables compartidas.
Lenguajes de programacin: Ada 95 o Java.
Bibliotecas de funciones: Pthread (POSIX-Thread) u
OpenMP.
Lenguaje secuencial + directivas: OpenMP.
Paralelismo de datos
Se aprovecha el paralelismo inherente a aplicaciones en
las que los datos se organizan en estructuras (vectores o
matrices).
El compilador paraleliza las construcciones del
programador.
Bucles, operandos tipo vector o matriz, distribucin de la
carga entre los elementos de procesado.
C*, lenguaje muy ligado a procesadores matriciales
Fortran 90 (basado en Fortran 77) permite usar
operaciones sobre vectores y matrices.
HPF (ampliacin de Fortran 90).
Comunicaciones implcitas [A(I)=A(I-1)], paralelizar
bucles (FORALL), distribuir los datos entre los
procesadores (PROCESSORS, DISTRIBUTE), funciones
de reduccin (a partir de un vector obtenemos un escalar),
funciones de reordenacin de datos en un vector, etc.
Estructuras de programas paralelos
Fases de la programacin paralela
Descomposicin funcional: Identificar las funciones
que debe realizar la aplicacin y las relaciones entre
ellas.
Particin
Distribucin de las funciones en procesos y esquema de
comunicacin entre procesos.
Objetivo: maximizar el grado de paralelismo y
minimizar la comunicacin entre procesos.
Localizacin
Los procesos se asignan a procesadores del sistema
Objetivo: ajustar los patrones de comunicacin a la
topologa del sistema.
Escribir el cdigo paralelo
Escalado: Determina el tamao ptimo del sistema en
funcin de algn parmetro de entrada.
Paralelismo ideal Maestro-Esclavo
Segmentacin Divide y vencers
Programacin y aplicaciones
15
Programacin y aplicaciones
Ejemplo: Paralelizar el clculo del
nmero pi.
Objetivo: Calcular el nmero pi mediante
integracin numrica, teniendo en cuenta
que la integral en el intervalo [0,1] de la
derivada del arco tangente de x es /4.
Vamos a basarnos en una versin
secuencial. En ella se aproxima el rea en
cada subintervalo utilizando rectngulos
en los que la altura es el valor de la
derivada del arco tangente en el punto
medio.
0
4
) (
1
1
0 ) 0 (
4
) 1 (
1
1
) (
1
0
1
0
2
2
= =
+
=
=
+
=
x arctg
x
arctg
arctg
x
x g arct
Programacin y aplicaciones
Versin secuencial
Main (int argc, char **argv){
double ancho, x, sum;
int intervalos, i;
intervalos = atoi(argv[1]);
ancho = 1.0/(double) intervalos;
for (i=0; i<intervalos;i++){
x = (i+0.5)*ancho;
sum=sum + 4.0/(1.0 + x*x);
}
sum*=ancho;
}
Asignamos tareas a procesos o hebras.
Suponemos que tenemos un cluster Beowulf,
con 8 PCs.
En cada procesador se ejecutar un proceso.
La carga de trabajo se distribuir por igual
entre los procesadores.
Realizaremos una planificacin esttica de las
tareas.
Escribimos el cdigo paralelo usando
MPI (paso de mensajes).
Utilizaremos parelelismo de datos.
Partiendo de la versin secuencial obtenemos
el cdigo SPMD paralelo.
Grafo de dependencias
entre tareas
16
Versin SPMD paralelo
#include <mpi.h>
Main (int argc, char **argv)
{
double ancho, x, sum, tsum=0;
int intervalos, i, nproc,iproc;
if(MPI_Init(&argc, &argv)=MPI_SUCCESS) exit(1);
MPI_Comm_size(MPI_COMM_WORLD, &nproc);
MPI_Comm_rank(MPI_COMM_WORLD, &iproc);
intervalos = atoi(argv[1]);
ancho = 1.0/(double) intervalos;
for (i=iproc; i<intervalos;i+=nproc){
x = (i+0.5)*ancho;
sum=sum + 4.0/(1.0 + x*x);
}
sum*=ancho;
MPI_Reduce(&sum,&tsum,1,MPI_DOUBLE,MPI_SUM,0,
MPI_COMM_WORLD);
MPI_Finalize();
}
Programacin y aplicaciones
Crear procesos
Declarar variables
Incluir libreras
Asignar/localizar
Comunicar/
sincronizar
Terminar procesos
Programacin y aplicaciones
Crear y terminar procesos
MPI_Init(): Crea el proceso que lo ejecuta dentro
del mundo MPI, es decir, dentro del grupo de
procesos denominado MPI_COMM_WORLD. Una
vez que se ejecuta esta funcin se pueden utilizar el
resto de funciones MPI.
MPI_Finalice(): Se debe llamar antes de que un
proceso creado en MPI acabe su ejecucin.
MPI_Comm_size(MPI_COMM_WORLD,
&nproc): Con esta funcin se pregunta a MPI el
nmero de procesos creados en el grupo
MPI_COMM_WORLD, se devuelve en nproc.
MPI_Comm_rank(MPI_COMM_WORLD,
&iproc): Con esta funcin se devuelve al proceso
su identificador, iproc, dentro del grupo.
Asignar tareas a procesos y localizar paralelismo.
Se reparten las iteraciones del bucle entre los
diferentes procesos MPI de forma explcita. Se
utiliza un turno rotatorio.
Comunicacin y sincronizacin.
Los procesos se comunican y sincronizan para
sumar las reas parciales calculadas por los
procesos.
Usamos MPI_Reduce. Esta es una operacin
cooperativa realizada entre todos los miembros del
comunicador y se obtiene un nico resultado final.
Los procesos envan al proceso 0 el contenido de su
variable local sum, los contenidos de sum se suman
y se guardan en el proceso 0 en la variable tsum.
17
Versin OpenMP variables compartidas
#include <omp.h>
#define NUM_THREADS 4
Main (int argc, char **argv)
{
Register double ancho, x;
int intervalos, i;
intervalos = atoi(argv[1]);
ancho = 1.0/(double) intervalos;
omp_set_num_threads(NUM_THREADS)
#pragma omp parallel
#pragma omp for reduction(+:sum) private(x)
schedule(dynamic)
for (i=0; i<intervalos;i++){
x = (i+0.5)*ancho;
sum=sum + 4.0/(1.0 + x*x);
}
sum*=ancho;
}
Programacin y aplicaciones
Crear/terminar
Declarar variables
y constantes
Incluir libreras
Comunicar/Sincronizar
Asignar/localizar
Programacin y aplicaciones
Escribimos el cdigo paralelo usando OpenMP con
directivas (variables compartidas).
Crear y terminar hebras
omp_set_num_threads(): Funcin OpenMP que modifica
en tiempo de ejecucin el nmero de hebras que se pueden
utilizar en paralelo; para ello sobrescribe el contenido de la
variable OMP_NUM_THREADS, que contiene dicho
nmero.
#pragma omp parallel: esta directiva crea un conjunto de
hebras; el nmero ser el valor que tenga
OMP_NUM_THREADS menos uno, ya que tambin
interviene en el clculo el padre. El cdigo de las hebras
creadas es el que sigue a esta directiva, puede ser una
nica sentencia o varias.
Asignar tareas a procesos y localizar paralelismo.
#pragma omp for: La directiva for identifica o localiza un
conjunto de trabajo compartido iterativo paralelizable y
especifica que se distribuyan las iteraciones del bucle for
entre las hebras del grupo cuya creacin se ha especificado
con una directiva parallel. Esta directiva obliga a que
todas las hebras se sincronicen al terminar el ciclo.
schedule(dynamic): Utilizamos una distribucin
dinmica de las hebras.
private(x): Hace que cada hebra tenga una copia
privada de la variable x, es decir, esta variable no
ser compartida.
reduction(+:sum): Hace que cada hebra utilice
dentro del ciclo una variable sum local, y que, una
vez terminada la ejecucin de todas las hebras, se
sumen todas las variables locales sum y el resultado
pase a una variable compartida sum.
Comunicacin y sincronizacin.
Utilizamos una variable compartida llamada sum para
almacenar el resultado final definida por reduction(+:sum).