Example #1
0
int Unpack(void * inbuf, int insize, int * position, void *outbuf,
                int outcount, Datatype type, Comm* comm)
{
  int i, j;
  MPI_Aint extent;

  Type_extent(type, &extent);

  for (i = 0; i < outcount; i++)
  {
    for (j = 0; j < type->count; j++)
    {    
      if ((*position) + Simpletype_length(type->pairs[j].type) > insize)
      {
        printf("MPI_Unpack: Data exceeds buffer size\n");
	exit(1);
      }
      memcpy(outbuf+type->pairs[j].disp + (extent*i), ((char*) inbuf)+(*position) ,
             Simpletype_length(type->pairs[j].type));
      *position += Simpletype_length(type->pairs[j].type);
    }
  }
}
Example #2
0
int calc_padding(Datatype datatype)
{
  long size_max = INT_MIN;
  long type_len;
  int i;
  //find the largest datatype size.  The epsilon padding is (probably) based on this.

  for (i = 0; i < datatype->count; i++)
  {
    type_len = Simpletype_length(datatype->pairs[i].type);
    size_max = type_len > size_max ? type_len : size_max;
  }

  return size_max;
}