Modelos de Pase de Mensajes

Slides:



Advertisements
Presentaciones similares
Principios de Computación
Advertisements

Curso de java básico (scjp)
LENGUAJES PARALELOS Chang y Smith (1990) clasificación:
PVM Configuración Es necesario tener el software siguiente antes de iniciar PVM: Archivo de instalación de PVM; pvm34.exe o pvm34.z En elcaso de los sistemas.
Configuración y administración de una red
Programando con OpenMP*
T5-multithreading SO-Grado Q1.
INF 1400: Redes de Computadores
IMPLEMENTACIÓN DE CLUSTERS BEOWULF COMO FIREWALLS
Algoritmos paralelos Lab. 1: Introducción
Maquina Virtual La máquina virtual de Java o JVM es un entorno de ejecución para aplicaciones de Java, cuya finalidad es la de adaptar los programas Java.
PROGRAMACIÓN DE SISTEMAS DE MEMORIA DISTRIBUIDA:
INTRODUCCIÓN ESTADO DE LA TÉCNICA PROCESAMIENTO DISTRIBUIDO CON MPI PROCESAMIETNO DISTRIBUIDO DE IMÁGENES GENÉRICO CON VTK PROCESAMIENTO DISTRIBUIDO DE.
Programación, Algoritmos y Estructuras de Datos
Cómputo paralelo usando MPI: Simulaciones de N-cuerpos en la física
ProParCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,
proPar Curso 13/14 4 2, 3, 2 2, 2 5 Computadores Paralelos
Concurrencia en JAVA JAVA es un lenguaje que tiene soporte de concurrencia, mediante Threads. Un thread es un proceso “liviano” (lightweight process) que.
Leonardo Rey Emiliano Riccialdelli Federico Mobrici
Aplicaciones Multihilo
Algoritmos y Estructuras de Datos
Programación con paso de mensajes: MPI
El Algoritmo de Floyd Capítulo 6.
Teo. 5: Paradigma "Message Passing"
Funciones y procedimientos
Multiprogramación Procesos Cecilia Hernández
Java Mayra M. Méndez Anota.
Programa “Coordenadas” Ing. Arturo Díaz Vargas Departamento de Sistemas División de Ciencias Básicas e Ingeniería UNIVERSIDAD AUTONOMA METROPOLITANA.
Tecnologías para el desarrollo de aplicaciones Web
Archivos Programación.
PONNHI PONNHI Una Nueva Arquitectura Microkernel Pthreads en Espacio de Usuario José Manuel Rodríguez García Juan A. Rico Gallego Jesús M. Álvarez Llorente.
Semana 5 Subprogramas..
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
INTEL CONFIDENTIAL Metodología de programación paralela Intel Software College.
Pase de Mensaje MPI Elaborado: Betzaida Romero. Agenda  Historia y Evolución  Que es MPI  Conceptos  Ventajas  Desventajas  Ejemplo  Conclusiones.
SESIÓN 2 Redes y Comunicaciones II
Archivos.
OMAR SANCHEZ ROBLES HECTOR PEREZ GARCIA. “Sistemas de cómputo compuesto por un gran número de CPU´s conectados mediante una red de alta velocidad”, Tanenbaum.
Introducción a la Programación. Lenguaje de Máquina.
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Analisis de Rendimiento.
Ejemplos openMP.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
MPISistemas Distribuidos1 MPI Un estándar de paso de mensajes para Clusters y Workstations Communications of the ACM, July 1996 J.J. Dongarra, S.W. Otto,
Programación de Memoria Compartida
UNIVERSIDAD NACIONAL DEL NORDESTE
Comunicación entre Procesos por pase de mensajes Universidad Simón Bolívar Departamento de Computación y T.I Sistemas de operación III CI-4822 Prof. Yudith.
Programación de Memoria Compartida
Tipos de Paralelismo Paralelismo de datos: cada procesador ejecuta la misma tarea sobre diferentes conjuntos o subregiones de datos Paralelismo de tareas:
Programación en MPI Capítulo 4. 4–2 NOT Gate 4–3 AND Gate.
Sistemas DistribuidosIng. José L. Simón Comunicación entre procesos zLos procesos (programas que se ejecutan) manejan items de datos  estructuras zLas.
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 30 de Mayo de 2004.
Teoría de Sistemas Operativos Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Comunicadores Colectivos BARRIER Esta es una de las primeras que ya vimos. Bloquea todos los procesos hasta que todos los procesos del Comm la llaman.
Introducción a MPI Clase 3 Marcelo Rozenberg (agradecimiento: Ruben Weht Titulo.
ELO3091 Interfaz de Socket Agustín J. González ELO309.
Comunicaciones punto a punto P2P
MPI: Message Passing Interface Vera Ortíz Thimoty Duéñez Saúl Moncada Ma. Cristina Otero Carolina teja.
Aitor Viana Sánchez Octavio Hombrados Juan F. Ramos Jesús López Bustos
(agradecimiento: Ruben Weht
Comandos Básicos para monitorear el Network REDES 316.
User Datagram Protocol UDP Juan Pablo Araneda Danilo Araya Z.
El Cedazo de Eratosthenes Capítulo 5. Metas Analizar métodos de asignar bloques (“block allocation schemes”) Entender la función MPI_Bcast Estudiar métodos.
INSTALACIÓN Y ADMINISTRACIÓN DE REDES DE ÁREA LOCAL
Introducción Nivel 4. Modelo OSI Propiedades Nivel 4 Entrega de mensajes garantizada. Entrega de mensajes en el mismo orden en el que fueron enviados.
Protocolos de comunicación TCP/IP
ORGANIZACIÓN DE COMPUTADORAS DRA. LETICIA FLORES PULIDO.
Agenda  Historia  Características  Mecanismos de concurrencia  Ejemplos  Desventajas  Accesibilidad  Conclusiones  Bibliografía.
INTRODUCCION A M (ESSAGE) P (ASSING) I (NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas.
Message Passing Interface
Transcripción de la presentación:

Modelos de Pase de Mensajes Universidad Simón Bolívar Sistemas Operativos III Prof. Yudith Cardinale Modelos de Pase de Mensajes MPI MPICH y LAM PVM Camacho, Duilmer Hansson, Martin Márquez, Ana Gabriela Sagarzazu, Iñaki

MPI Introducción ¿Que es MPI? Message Passing Interface Handles de MPI Errores en MPI MPI_ERRORS_ARE_FATAL MPI_ERRORS_RETURN Inicializando y finalizando. Ejemplo básico

MPI Introducción #include <mpi.h> Main(int argc, char **argv) { MPI_Init(&argc, &argv); /* Parte principal del Programa */ if () MPI_ABORT(comm, errcode); /* Terminar el MPI */ MPI_Finalize(); Exit(0); }

MPI Conceptos Básicos Procesos (Grupo, Rango) Grupos Contextos MPI_COMM_GROUP MPI_GROUP_EMPTY con no miembros. MPI_GROUP_NULL es el valor usado para handles de grupos invalidos. MPI_GROUP_FREE(group) MPI_GROUP_SIZE(group, size) MPI_GROUP_RANK(group, rank) Contextos

Conceptos Básicos (cont) MPI Conceptos Básicos (cont) Topologías virtuales Communicators MPI_COMM_WORLD int MPI_Comm_size(MPI_Comm comm, int *size) MPI_COMM_DUP(comm, newcomm) MPI_COMM_CREATE(comm, group, newcomm) MPI_COMM_FREE(comm) Inter-Communicators e Intra-Communicators

MPI Comunicación Punto a Punto Blocking send MPI_SEND(buf, count, datatype, dest, tag, comm) Mensajes de MPI Sobre de Mensajes Blocking Receive int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) DataType ...

MPI Manejo de Tipos de datos Matching de tipos de datos: con tipo y sin tipo y con datos empaquetados. CALL MPI_COMM_RANK(comm, rank, ierr) IF(rank.EQ.0) THEN CALL MPI_SEND(a(1), 10, MPI_REAL, 1, tag, comm, ierr) ELSE CALL MPI_RECV(b(1), 15, MPI_REAL, 0, tag, comm, status, ierr) END IF Conversion de Datos Conversion de tipo Conversion de representación

MPI Modos de Comunicación Blocking y Standard Buffered int MPI_Bsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Synchronous int MPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Ready int MPI_Rsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

MPI Semantica de Comunicación PP Mensajes en orden CALL MPI_COMM_RANK(comm, rank, ierr) IF (rank.EQ.0) THEN CALL MPI_BSEND(buf1, count, MPI_REAL, 1, tag, comm, ierr) CALL MPI_BSEND(buf2, count, MPI_REAL, 1, tag, comm, ierr) ELSE ! rank.EQ.1 CALL MPI_RECV(buf1, count, MPI_REAL, 0, MPI_ANY_TAG, comm, status, ierr) CALL MPI_RECV(buf2, count, MPI_REAL, 0, tag, comm, status, ierr) END IF

MPI Semantica de Comunicación PP Progreso Justicia Limitaciones de recursos CALL MPI_COMM_RANK(comm, rank, ierr) IF (rank.EQ.0) THEN CALL MPI_SEND(sendbuf, count, MPI_REAL, 1, tag, comm, ierr) CALL MPI_RECV(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr) ELSE ! rank.EQ.1 CALL MPI_RECV(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr) CALL MPI_SEND(sendbuf, count, MPI_REAL, 0, tag, comm, ierr) END IF

Comunicación Non-Blocking MPI Comunicación Non-Blocking int MPI_Isend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) int MPI_Ibsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) int MPI_Issend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) int MPI_Irecv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request)

MPI Completación de Comunicación MPI_WAIT y MPI_TEST MPI_WAITANY MPI_TESTANY MPI_WAITALL MPI_TESTALL MPI_WAITSOME MPI_TESTSOME

MPI Comunicación Colectiva int MPI_Barrier(MPI_Comm comm ) int MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm ) int MPI_Gather(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) int MPI_Gatherv(sendbuf, sendcount, sendtype, recvbuf, *recvcounts, *displs, recvtype, root, comm)   int MPI_Scatter(void* sendbuf, sendcount, sendtype, void* recvbuf, recvcount, recvtype, root, comm) int MPI_Scatterv(void* sendbuf, *sendcounts, *displs, sendtype, void* recvbuf, recvcount, recvtype, root, comm)

MPI Comunicación Colectiva

MPI Comunicación Colectiva Todos los procesos llaman a las rutinas La sintaxis es consistente con las llamadas a comunicación punto a punto Existe el proceso root. Type matching es más estricto Cantidad de datos en send debe ser igual a la del receive

MPI Operaciones Extendidas MPI-2 Creación de Inter-communicators Dos nuevas rutinas colectivas Un all-to-all generalizado Operaciones de Intra-communicator MPI_BCAST, MPI_GATHER, MPI_GATHERV, MPI_SCATTER, MPI_SCATTERV, MPI_ALLGATHER, MPI_ALLGATHERV, MPI_ALLTOALL, MPI_ALLTOALLV, MPI_ALLTOALLW MPI_REDUCE, MPI_ALLREDUCE, MPI_REDUCE_SCATTER, MPI_BARRIER.

MPI Administración y Creación de Procesos Creando Procesos int MPI_Comm_spawn(char *command, char *argv[], int maxprocs, MPI_Info info, int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[], int array_of_maxprocs[], MPI_Info array_of_info[], int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[])

MPI Cliente Servidor El servidor MPI_Open_port(MPI_INFO_NULL, port_name); MPI_Publish_name("ocean", MPI_INFO_NULL, port_name); MPI_Comm_accept(port_name, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm); /* do something with intercomm */ MPI_Unpublish_name("ocean", MPI_INFO_NULL, port_name); El cliente MPI_Lookup_name("ocean", MPI_INFO_NULL, port_name); MPI_Comm_connect( port_name, MPI_INFO_NULL, 0, MPI_COMM_SELF, &intercomm);

Principios guías del diseño MPICH Arquitectura Principios guías del diseño Desempeño Maximizar la cantidad de código que puede ser compartida sin comprometer el desempeño Portabilidad Proveer una estructura en donde mpich pueda ser portable rápidamente

Abstract Device Interface MPICH Arquitectura Abstract Device Interface Especificar un mensaje para ser enviado o recibido Mover datos entre el ADI y el Hardware Administrar listas de mensajes Pendientes Proveer información básica sobre el ambiente de ejecución

ADI - Channel Interface MPICH Arquitectura ADI - Channel Interface Eager Protocol Rendezvouz Protocol Get Protocol

MPICH Arquitectura ADI – Lower Level Chameleon Shared Memory Specialized SCI

LAM Local Area Multicomputer Historia Desarrollado en el Ohio Supercomputer Center Existe de antes del MPI y fue adoptado para implementar la interfaz de MPI

LAM Local Area Multicomputer Características convierte una red de estaciones de trabajo en una computadora paralela virtual Amplia la capacidad de monitoreo (tunning y debugging) Monitoreo Activado – comunicación a través de demonios, es posible habilitar la comunicación directa entre clientes.

LAM vs. MPICH Short Message Protocol Long Message Protocol LAM MPICH Encabezado + Mensaje es enviado en un mensaje Dividido en paquetes. Se envia el primero, una vez que el sender recibe un ack del receiver procede a enviar el resto. MPICH Eager Protocol Rendezvouz Protocol Get Protocol

LAM vs. MPICH MTU Communications Channels LAM MPICH Maximun Transmission Unit Communications Channels LAM Aumentar el MTU mejora el desempeño del LAM, si embargo se disminuye el desempeño del MPICH. En ambos casos aumenta la latencia Se establece una red completamente conectada al momento de la inicialización MPICH Se realizan las conecciones con base en la demanda

LAM vs. MPICH Ping

LAM vs. MPICH Ping-Pong

LAM vs. MPICH Broadcast

LAM vs. MPICH Gather

LAM vs. MPICH All To All

PVM Introducción Atributos User-configured host pool Translucent access to hardware Process-based computation Explicit message-passing model Heterogeneity support Multiprocessor support

PVM Compuesto por: Basic Programming techniques Daemon Library of PVM interface routines Basic Programming techniques Common Parallel Programming Paradigms Crowd Master-slave The node only Tree

PVM Basic Programming techniques Data Descomposition Funtion Descomposition 1 6 7 8 5 4 3 2 9

PVM User Interface Process Control Information Dynamic Configuration Signaling Setting and Getting Options Message Passing Dynamic Process Groups

PVM Message Passing Message Buffers pvm_initsend() pvm_pk*() pvm_send() pvm_mcast() pvm_recvf() Message Buffers pvmDataDefault pvm_mkbufer() pvm_send(dst ,tag)

PVM Packing Data Sending and Receiving Data pvm_pkbyte(char *cp, int nitem, int strike) pvm_pkint(int *cp, int nitem, int strike) pvm_pkstr(char *cp) Sending and Receiving Data pvm_send(int tid,int msgtag) pvm_mcast(int *tids, int ntask, int msgtag) pvm_recv(int tid,msgtag)

PVM Unpacking Data pvm_upkbyte(char *cp,int nitem,int strike) pvm_upkint(int *np, int nitem,int strike) Pvm_upkstr(char *cp)

PVM Ejemplo Hello.c #include "pvm3.h" main(){ int cc, tid, msgtag; char buf[100]; printf("i'm t%x\n", pvm_mytid());  cc = pvm_spawn("hello_other",(char**)0,0,"", 1,&tid);   if (cc == 1){ msgtag = 1; pvm_recv(tid, msgtag); pvm_upkstr(buf); printf("from t%x: %s\n", tid, buf); } else { printf("can't start hello_other\n"); } pvm_exit();

PVM Ejemplo Hello_other.c #include "pvm3.h" main(){ int ptid, msgtag; char buf[100]; ptid = pvm_parent();  strcpy(buf, "hello, world from "); gethostname(buf + strlen(buf), 64); msgtag = 1; pvm_initsend(PvmDataDefault); pvm_pkstr(buf); pvm_send(ptid, msgtag); pvm_exit(); }

Titulo Subtítulo Punto 1 Punto 2

Titulo Subtítulo Punto 1 Punto 2

Titulo Subtítulo Punto 1 Punto 2

Titulo Subtítulo Punto 1 Punto 2

Titulo Subtítulo Punto 1 Punto 2

Titulo Subtítulo Punto 1 Punto 2