1. Indice de pagina
  2. 1. Descripción breve
  3. 2. Sintaxis
  4. 2.1. En C
  5. 2.2. En C++
  6. 3. Parámetros
  7. 3.1. De entrada
  8. 3.2. De salida
  9. 4. Descripción
  10. 5. Notas
  11. 6. Errores
  12. 7. Véase también

MPI_Unpack

Descripción breve

Dada un paquete de memoria continua saca los tipos de datos.

Sintaxis

En C

#include <mpi.h>
int MPI_Unpack(void *inbuf, int insize, int *position,
		void *outbuf, int outcount, MPI_Datatype datatype,
		MPI_Comm comm)

En C++

#include <mpi.h>
void Datatype::Unpack(const void* inbuf, int insize,
		void *outbuf, int outcount, int& position,
		const Comm& comm) const

Parámetros

De entrada

inbuf Inicio del buffer de entrada.
outcount Numero de elementos de datos de salida.
datatype Tipo de dato de cada elemento de datos de salida.
insize Tamaño del buffer de entrada, en bytes.
comm Comunicador para el mensaje empaquetado.
position Posición actual del buffer, en bytes.

De salida

position Posición actual del buffer, en bytes.
outbuf Inicio del buffer de salida.

Descripción

Proceso contrario de MPI_Pack.

Notas

Un sencillo ejemplo del uso de MPI_Unpack con su opuesto MPI_Pack es:

#define TAM_BUFFER 100
#define TAG 0
#define DEST 1
#define SOURCE 0
 
main(int argc, char* argv[]) {
   int   my_rank;
   char  buffer[TAM_BUFFER];
   int   posicion;
   MPI_Status  status;
   float a, b;
   int   n;
 
   MPI_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
 
   if ( rank == SOURCE ) {
      a = 10.3;
      b = 11.2
      n = 4;
      posicion = 0;
      MPI_Pack(&a,1,MPI_FLOAT,buffer,TAM_BUFFER,&posicion,MPI_COMM_WORLD);
      MPI_Pack(&b,1,MPI_FLOAT,buffer,TAM_BUFFER,&posicion,MPI_COMM_WORLD);
      MPI_Pack(&n,1,MPI_INT,buffer,TAM_BUFFER,&posicion,MPI_COMM_WORLD);
      MPI_Send(buffer,TAM_BUFFER,MPI_PACKED,DEST,TAG,MPI_COMM_WORLD);
   }
   else {
      MPI_Recv(buffer,TAM_BUFFER,MPI_PACKED,SOURCE,TAG,MPI_COMM_WORLD,&status);
      posicion = 0;
      MPI_Unpack(buffer,TAM_BUFFER,&posicion,&a,1,MPI_FLOAT,MPI_COMM_WORLD);
      printf("   a = %f\n",a);
      MPI_Unpack(buffer,TAM_BUFFER,&posicion,&b,1,MPI_FLOAT,MPI_COMM_WORLD);
      printf("   b = %f\n",b);
      MPI_Unpack(buffer,TAM_BUFFER,&posicion,&n,1,MPI_INT,MPI_COMM_WORLD);
      printf("   n = %d\n",n);
   }
   MPI_Finalize();
}

Errores

MPI_SUCCESS No ha habido error, la función se ha completado satisfactoriamente.
MPI_ERR_COMM El comunicador seleccionado no es válido. Un error común es usar un comunicador nulo.
MPI_ERR_COUNT Valor de count no válido. El argumento count debe ser un valor no negativo, es posible utilizar el valor cero.
MPI_ERR_TYPE Argumento datatype no válido. Puede ocurrir cuando no se hace commit del tipo de dato (Véase MPI_Type_commit).
MPI_ERR_ARG Valor de argumento no válido.

Véase también

MPI_Pack

Creado por: Daniel Guerrero Martínez y Sergio Rodríguez Lumley 2010

Valid HTML 4.01 Transitional