Monografias.com > Tecnología
Descargar Imprimir Comentar Ver trabajos relacionados

Comunicaciones colectivas y Tipos de datos derivados




Enviado por Pablo Turmero



Partes: 1, 2


    Monografias.com
    Comunicaciones colectivas
    Muchas aplicaciones requieren de la comunicación entre más de dos procesos.

    Esto se puede hacer combinando operaciones punto a punto, pero para que le resulte más cómodo al programador, y para posibilitar implementaciones optimizadas, MPI incluye una serie de operaciones colectivas:

    Barreras de sincronización
    Broadcast (difusión)
    Gather (recolección)
    Scatter (distribución)
    Operaciones de reducción (suma, multiplicación, mínimo, etc.)
    Combinaciones de todas ellas

    Monografias.com
    Comunicaciones colectivas
    Una operación colectiva tiene que ser invocada por todos los participantes, aunque los roles que juegen no sean los mismos.

    La mayor parte de las operaciones requieren la designación de un proceso como root, o raíz de la operación.

    Monografias.com
    Comunicaciones colectivas. Barreras y broadcast
    Dos de las operaciones colectivas más comunes son las barreras de sincronización (MPI_Barrier()) y el envío de información en modo difusión (MPI_Broadcast()).

    En MPI_Barrier no exige ninguna clase de intercambio de información. Es una operación puramente de sincronización, que bloquea a los procesos de un comunicador hasta que todos ellos han pasado por la barrera. Suele emplearse para dar por finalizada una etapa del programa, asegurándose de que todos han terminado antes de dar comienzo a la siguiente.

    int MPI_Barrier(MPI_Comm comm);

    Monografias.com
    Comunicaciones colectivas. Barreras y broadcast
    MPI_Broadcast() sirve para que un proceso, el raíz, envíe un mensaje a todos los miembros del comunicador.

    Esta función ya muestra una característica peculiar de las operaciones colectivas de MPI: todos los participantes invocan la misma función, designando al mismo proceso como raíz de la misma.

    Una implementación alternativa sería tener una función de envío especial, en modo broadcast, y usar las funciones de recepción normales para leer los mensajes.

    int MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm);

    Monografias.com
    Comunicaciones colectivas. Barreras y broadcast
    Este esquema representa el significado de un broadcast.

    En las filas representamos los procesos de un comunicador, y en las columnas los datos que posee cada proceso.

    Antes del broadcast, el procesador raíz (suponemos que es el 0) tiene el dato A. Tras realizar el broadcast, todos los procesos (incluyendo el raíz) tienen una copia de A0.

    Monografias.com
    Comunicaciones colectivas. Recolección (gather)
    MPI_Gather realiza una recolección de datos en el proceso raíz.

    Este proceso recopila un vector de datos, al que contribuyen todos los procesos del comunicador con la misma cantidad de datos.

    El proceso raíz almacena las contribuciones de forma consecutiva.

    int MPI_Gather(void* sendbuf, int sendcount,
    MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm);

    Monografias.com
    Comunicaciones colectivas. Recolección (gather)
    Sólo el proceso raíz tiene que preocuparse de los parámetros recbuf, recvcount y recvtype.

    Sin embargo, todos los procesos (raíz incluido) tienen que facilitar valores válidos para sendbuf, sendcount y sendtype.

    Monografias.com
    Comunicaciones colectivas. Recolección (gather)
    Existe una versión de la función de recolección, llamada MPI_Gatherv(), que permite almacenar los datos recogidos en forma no consecutiva, y que cada proceso contribuya con bloques de datos de diferente tamaño .

    int MPI_Gatherv(void* sendbuf, int sendcount,
    MPI_Datatype sendtype, void* recvbuf, int *recvcounts,
    int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm);

    La tabla recvcounts establece el tamaño del bloque de datos aportado por cada proceso, y displs indica cuál es el desplazamiento entre bloque y bloque

    Monografias.com
    Comunicaciones colectivas. Recolección (gather)
    Muchas veces interesa distribuir a todos los procesos el resultado de una recolección previa. (Esto se puede hacer concatenando una recolección con un broadcast).

    Existen funciones que se encargan de hacer todo esto en un único paso: MPI_Allgather() (si los bloques de datos son de tamaño fijo y se almacenan consecutivamete) y MPI_Allgatherv() (si los tamaños de los datos son variables y/o se almacenan de forma no consecutiva).

    int MPI_Allgather(void* sendbuf, int sendcount,
    MPI_Datatype sendtype, void* recvbuf, int recvcount,
    MPI_Datatype recvtype, MPI_Comm comm);

    int MPI_Allgatherv(void* sendbuf, int sendcount,
    MPI_Datatype sendtype,void* recvbuf, int *recvcounts,
    int *displs, MPI_Datatype recvtype, MPI_Comm comm);

    Monografias.com
    Comunicaciones colectivas. Recolección (gather)

    Partes: 1, 2

    Página siguiente 

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter