Sei sulla pagina 1di 44

Programacion con Paso de Mensajes

Dr. Abelardo Rodriguez Leon

Temario

1. Introduccion al clustering

2. Introduccin a la programacin paralela. 3. Instalacin y configuracin de un ambiente PC Paralelo 4. Paso de mensajes punto a punto. Ejercicios. 5. Paso de mensajes grupal. Ejercicios.

Clasificacin del computo por SW

Secuencial: Una tarea en un solo CPU Concurrente: Varias tareas en uno o varios CPU's Multitarea: Varias tareas multiplexadas en un mismo CPU Distribuida: Paralela: Tareas similares, en diferentes CPU's locales para acceso a datos o computo intensivo. Web: Tareas simultaneas en diferentes CPU's locales y remotos para acceso a datos locales y remotos Grid: Tareas simultaneas en diferentes CPU's locales y remotos para computo intensivo.

Qu es la computacin distribuida?
Grupo de CPUs interconectados, que resuelven un problema especfico en forma colaborativa. Cada CPU resuelve una parte del problema. Un procesador esta formado por una o mas CPUs Un nodo es una computadora que cuenta con uno o mas procesadores y tiene recursos propios. Los nodos se comunican con otros nodos por medio de una red de interconexion. Entonces, la comunicacin entre CPUs se puede dar en varios niveles: por memoria compartida o por una red de interconexin.

Porque ahora podemos tener acceso a supercomputo ?

Hardware individual

Limitacin de incremento de velocidad de actuales procesadores Continua miniaturizacin electrnica R=SMP o multicores

Intel y AMD los lanzaron al mercado masivo en 2006 Proyectan que en pocos aos habr procesadores con 12 cores

Porque ahora podemos tener acceso supercomputo ?

Hardware masivo

Abaratamiento del hardware genrico Desarrollo de software libre R=Cluster Beowulf

Que es un cluster?

Tipos de Nodos
Dedicados No dedicados

Tipo de hardware en los nodos


Rendimiento Homogneo

Semi-Homogneo

Heterogneo

Costo

Poder de computo en los nodos

Dentro del CPU

Dual y quat core

Octacore 64 bits

Varios procesadores en una placa

Es una red de computadoras locales un cluster?

Un cluster es mas que conectar computadoras entre s. Es necesario un sistema de administracin del cluster. Dicho sistema se encarga de interactuar con el usuario y los procesos que corren en l cluster

Tipos de cluster

Alto rendimiento (High Performance) Diseados para dar altas prestaciones de clculo (computo intensivo). Alta disponibilidad (High Availability) Trata de brindar la maxima disponibilidad posible de servicios (tolerancia a fallos). Alta productividad. Su funcin principal es realizar la mayor cantidad de trabajo posible sin importar mucho el tiempo de entrega de tareas (balance de carga).

Clusters Beowulf - Objetivo: arquitectura generica de hardware en clusters - Se usan en: donde se requiera mucho poder de computo - Ejemplos: PVM, MPI, OpenMP Clusters HA (Alta disponibilidad) -Objetivo principal: alta disponibilidad - Se usan en: servidores de internet. - Ejemplos: LVS (Linux Virtual Server) Clusters SSI (Single System Image) - Objetivo principal: balanceo de carga - Se usa en: atencin a muchos usuarios heterogeneos - Ejemplos: Mosix, OpenMosix, Condor, OpenSSI Clusters Grid - Objetivo principal: alto rendimiento; mucho tiempo (la red es Internet) - Se usan en: computacin distribuida - Ejemplos: Globus, BOINC

Arquitectura general de un cluster

Arquitectura operativa de un Cluster Beowulf

Componentes de un cluster
Nodos Pueden ser simples ordenadores, sistemas multi procesador o estaciones de trabajo (workstations). Sistema Operativo GNU/Linux Unix: Solaris / HP-Ux / Aix Windows NT / 2000 / 2003 Server Mac OS X Cluster OS's especiales Conexiones de Red Los nodos de un cluster pueden conectarse mediante una red Ethernet simple con tarjetas comunes (NIC's) , o utilizarse tecnologas especiales de alta velocidad como FastEthernet, GigaEthernet, 10GigaEthernet, Myrinet, Infiniband, etc.

Middleware Software que acta entre el SO y las aplicaciones, dndole al cluster : Una interfaz nica de acceso al sistema: denominada SSI (Single System Image), la cual genera la sensacin al usuario de que utiliza un nico ordenador muy potente. Herramientas para la administracin y mantenimiento del sistema: migracin de procesos, checkpoint-restart (congelar uno o varios procesos, mudarlos de servidor y continuar su funcionamiento en el nuevo host), balanceo de carga, tolerancia a fallos, etc.; Escalabilidad: debe poder detectar automticamente nuevos servidores conectados al cluster para proceder a su utilizacin.

Existen diversos tipos de middleware, como por ejemplo: MOSIX, OpenMOSIX, Condor, OpenSSI, etc.

El middleware recibe los trabajos y los distribuye entre los nodos del cluster, buscando que se ejecute de la forma ms rpida posible. Para lograr lo anterior el middleware puede migrar procesos entre nodos con distintas finalidades: Balancear la carga: si un nodo est muy cargado de procesos y otro est ocioso, pueden transferirse procesos del primero para liberarlo de carga y optimizar el funcionamiento; Mantenimiento de nodos: si hay procesos corriendo en un nodo que necesita mantenimiento o una actualizacin, es posible migrar los procesos a otro servidor y proceder a desconectar el nodo a reparar. Priorizacin de trabajos: Se le puede dar mayor importancia a ciertos procesos para que terminen mas rpido.

Clusters en el mundo
www.top500.org
1er Lugar - Comp. Roadruner - Inst. DOE/NNSA/LANL - Lugar: Los Alamos, USA - 129,600 procesadores PowerXCell 3.2 Ghz - Red Infiniband - Fabricante : IBM - 1456 Tflops pico

Clusters en el mundo
Lugar 60 Comp. Marenostrum Lugar: Barcelona Espaa - 10,240 procesadores - 94.21 Tflops

Marenostrum

Clusters en Mxico

Kam Balam UNAM

Argentum - CNS

- 1368 procesadores - 7.113 Tflops

- 684 procesadores - 6.2 Tflops

Cluster ITVer - UAEM


ELEMENTO Comunicaciones Nodo maestro N01 HARDWARE Switch Cisco C2960 24/10/100 Pentium 4, 2793 MHz 512 MB RAM 80 GB HD Pentium 2, 266 Mhz 256 MB RAM 4 GB HD Pentium 2, 133 Mhz 128 MB RAM 4 GB HD Pentium Dual Core 2800 MHz 1GB RAM 160GB HD Celeron Dual Core, 2000MHz 2 GB RAM 160GB HD Computernode-0 Computernode-1 Computernode-2 Computernode-3 ELEMENTO Comunicaciones FrontEnd HARDWARE Switch 24/10/100/1000 Pentium 4, 2394 Mhz 1 GB Memoria 60 GB disco duro 2 tarjetas 10/100 Mb/s Pentium 4 Quat Core,2.3 Ghz 2 GB Memoria 80 GB disco duro Sata 1 tarjetas 10/100/1000 Mb/s

N 02

N03 N04 N05 N06 N07 N08

Clasificacin de computadoras
La clasificacin de Flynn (1966): La multiplicidad de los flujos de instrucciones y datos en una computadora. El esquema de Feng (1972): La comparacin del procesamiento serial con el procesamiento paralelo. Clasificacin de Hndler (1977): El grado de paralelismo y enrutamiento en los diferentes niveles de los subsistemas.

Clasificacin de computadoras
SISD Sigle Instruction Single Data SIMD Single Instruction Multiple Data

Clasificacin de computadoras
MIMD. Multiple Instruction Multiple Data

Memoria distribuida
P M P M P M P M P M P M

Memoria compartida
P P P P P P

BUS

Debilmente acopladas

Network

M em o r y

Fuertemente acopladas

Tipos de Paralelismo
Explcito : El programa indica explcitamente como cooperan los procesadores para resolver un problema especfico. El compilador es normal, la tarea del programador es bastante difcil. Implcito: Se usan los programas actuales y el compilador inserta las instrucciones necesarias para ejecutar el programa en una computadora paralela. El compilador analiza y comprende el programa para generar un codigo aplicable a una computadora paralela.

Comunicacin en ambientes paralelos


Memoria compartida: El programador define procesos que acceden a una memoria compartida. Varios procesos puede acceder a la misma zona de memoria, al mismo tiempo, produciendo resultados impredecibles. Esto se resuelve por exclusin mutua. Paso de mensajes: El programador define procesos con variables locales privadas y la posibilidad de enviar y recibir datos a procesos en otros nodos. Los nodos de la computadora se comunican por medio del paso de mensajes.

Comunicacin en ambientes paralelos

La mayoria de los lenguajes para programacin paralela, son lenguajes secuenciales con librerias para la sincronizar la comunicacin entre procesos. El problema de estos lenguajes es la portabilidad entre diferentes arquitecturas. Desde hace algun tiempo se han vuelto comunes el uso libreras estandard con primitivas independientes de la arquitectura como OpenMP y MPI. En bajo nivel aun no se ponen de acuerdo para usar paralelismo dentro del procesador. Intel tiene SSE y AMD a 3DNow

Paralelismo de datos/de control Paralelismo de datos: Procesos simultaneos que aplican las mismas operaciones a todos los datos . Es ms apropiado para ejecutar en computadoras SIMD, aunque tambin se pueden ejecutar en MIMD. Paralelismo de control: Procesos simultaneos con diferentes operaciones, aplicados a los mismos o diferentes datos. Es apropiado para ejecutarse en computadoras MIMD.

Porque hacer programacin paralela?

Resolver problemas mayores y/o mas rapidamente. El crecimiento de la capacidad de los CPUs secuenciales est llegando a su limite. Soluciones: Poner varios CPUs en un mismo procesador Poner varios procesadores en una misma placa base. Aprovechar la evolucion del HW de comunicaciones para usar los procesadores en otros nodos. En cualquier caso, es necesario realizar cambios en los programas actuales.

Consideraciones al hacer programacin paralela

Tomar en cuenta la arquitectura HW que se tiene disponible Conocer las interdependencias del problema para disear de algoritmos eficientes. Aplicar mtodos y tcnicas para evaluar los algoritmos paralelos. Utilizar lenguajes y herramientas para computadores paralelos. Hacer nuestros programas paralelos portables. Usar compiladores autoparalelizantes.

Tipos de Paralelismo y su aplicacion en HW


Dentro del procesador
Grano Fino

Memoria Compartida
Grano Medio Grano Grueso

Memoria Distribuida

Control

Vectorial

Datos

Como aprovechar el poder de computo de un cluster?

Depender del tipo de problema y hardware disponible. Entre mas dependencias de datos tenga el problema es mas difcil paralelizarlo y aprovechar el poder adicional de otros procesadores. El hardware disponible ofrece varios niveles en los cuales hacer paralelizacin.

Nivel bajo : Vectorizacin instrucciones. Nivel medio: Threads Nivel Alto : Paso de mensajes.

Vectorizacin de cdigo

Es la paralelizacin que se da a nivel de datos. Los procesadores modernos incluyen instrucciones que permiten hacer esto, llamadas extensiones multimedia. Estas instrucciones usan los registros extras para guardar mas datos y poder aplicar la misma operacin sobre todos, en un mismo ciclo-procesador. Cada fabricante de procesadores ha creado sus propias extensiones multimedia, para sus procesadores. Intel desarroll MMX, SSE, SSE2, SSE3 AMD cuenta con 3DNow!

Vectorizacin de cdigo

Programar a este nivel regularmente se hace en ensamblador. Sin embargo existen algunas librerias como instrisic de Intel que ayuda a darle un nivel de abtraccin aceptable.

Threads
Cuando se tienen varios nucleos en una mismo motherboard, todos ellos comparten la misma memoria de programas. Para poder aprovechar estos nucleos es necesario crear threads para que estos sean atendidos por diferentes nucleos. Hay varias formas de crear threads: Posix Thread, Java, y OpenMP.

OpenMP es un API estndar para manejo de threads que definieron los principales fabricantes de hardware y software Cuenta con una serie de esquemas predefinidos de paralelizacin. Disponible para Fortran y C++

Threads
OpenMp establece :

3 tipos de regiones paralelas

Threads
OpenMp establece 6 mecanismos de sincronizacin.

Master. Solo el hilo principal ejecuta la regin indicada. Critical. La regin indicada solo puede ser accedida por un hilo al mismo tiempo. Barrier. Establece un punto para sincronizar todos los hilos. Una vez que todos han llegado a la barrera entonces continan con la ejecucin. Atomic. Establece una mini seccin de tipo Critical que incluye una regin de memoria accedida por un hilo a la vez. Flush. Establece un punto en el cual todos los hilos que usen ciertas variables de memoria, actualizan el contenido de las mismas. Ordered. Establece en una regin Do/For ciertas instrucciones que se ejecutan como si fueran secuenciales.

Threads

Un programa sencillo OpenMP (1/2)

#include <omp.h> #include <stdio.h> #define CHUNKSIZE 10 #define N 100 int main (int argc, char *argv[]) { int nthreads, tid, i, chunk; float a[N], b[N], c[N]; for (i=0; i < N; i++) a[i] = b[i] = i * 1.0; chunk = CHUNKSIZE;

Threads
Un programa sencillo OpenMP (2/2) #pragma omp parallel shared(a,b,c,nthreads,chunk) private(i,tid) { tid = omp_get_thread_num(); if (tid == 0) { nthreads = omp_get_num_threads(); printf("Number of threads = %d\n", nthreads); } printf("Thread %d starting...\n",tid); #pragma omp for schedule(dynamic,chunk) for (i=0; i<N; i++) { c[i] = a[i] + b[i]; printf("Thread %d: c[%d]= %f\n",tid,i,c[i]); } } /* fin de la seccin paralela */ }

Paso de mensajes
Cuando se busca aprovechar el poder de clculo de otras computadoras conectadas en la misma red local (cluster), se usa una tcnica llamada paso de mensajes.

MPI es el estandar mas usado para realizar programas con paso de mensajes. Cuenta con versiones propietarias y de distribucin libre. Proporciona un entorno de ejecucin y una librera de programacin que permiten crear programas paralelos. El entorno de ejecucin permite acceder al hardware de comunicaciones. La librera de programacin proporciona una interfaz de programacin para lanzar los procesos y realizar las comunicaciones

Paso de mensajes

Un programa en MPI consta de 3 partes.


Inicializacin del ambiente MPI Comunicaciones entre procesos y Finalizacin del ambiente. Punto a punto bloqueante. Punto a punto no bloqueante. Colectiva.

MPI cuenta con 3 tipos de formas de comunicacin:


MPI controla las comunicaciones ayudado por un demonio llamado POE que se encarga de la gestin de mensajes.

Paso de mensajes

Programa sencillo en MPI (1/2)

Int main(int argc, char *argv[]) { int rango,nprocs,msg,et,fuen,dest; MPI_Status estado; MPI_Init (&argc, &argv); MPI_Comm_size (MPI_COMM_WORLD, &nprocs); MPI_Comm_rank (MPI_COMM_WORLD, &rango); switch (rango) { case 0: fuent = 1; dest=1; MPI_Recv ( &msg, 1, MPI_INT, fuente, et, MPI_COMM_WORLD, &estado); printf(Recibi el saludo de la maquina 1 =%d\n,msg); msg=msg*2; MPI_Send(&msg, 1, MPI_INT,dest,et, MPI_COMM_WORLD, &estado);

Paso de mensajes

Programa sencillo en MPI (2/2) case 1: fuent=0; dest=0; msg=15; MPI_Send(&msg, 1, MPI_INT,dest,et, MPI_COMM_WORLD,&estado); MPI_Recv (&msg, 1, MPI_INT, fuente, et, MPI_COMM_WORLD, &estado); printf(Recibi el saludo de la maquina 0 =%d\n,msg); }

Potrebbero piacerti anche