Esempio n. 1
0
static void SCCPackFun(c4snet_data_t *data, void *buf)
{
  SNetDistribPack(data, buf, sizeof(c4snet_data_t), false);

  if (data->vtype == VTYPE_array) {
    SNetDistribPack(data->data.ptr, buf, AllocatedSpace(data), true);
  }
}
Esempio n. 2
0
static void MPIPackFun(c4snet_data_t *data, void *buf)
{
  int vtype = data->vtype,
      type = data->type;

  SNetDistribPack(&vtype, buf, MPI_INT, 1);
  SNetDistribPack(&data->size, buf, MPI_INT, 1);
  SNetDistribPack(&type, buf, MPI_INT, 1);

  if (data->vtype == VTYPE_array) {
    SNetDistribPack(data->data.ptr, buf, TypeToMPIType(data->type),
                    data->size);
  } else {
    SNetDistribPack(&data->data, buf, TypeToMPIType(data->type), 1);
  }
}
Esempio n. 3
0
void SNetDistribUpdateRef(snet_ref_t *ref, int count)
{
  mpi_buf_t buf = {0, 0, NULL};
  SNetRefSerialise(ref, &buf);
  SNetDistribPack(&buf, &count, sizeof(count));
  MPISendBuf(&buf, SNetRefNode(ref), snet_ref_update);
  SNetMemFree(buf.data);
}
Esempio n. 4
0
void SNetDistribGlobalStop(void)
{
  char pload_v = 0;
  int i = SNetDistribZMQHTabCount();

  for (i--; i >= 0; i--) {
    zframe_t *payload = NULL;
    SNetDistribPack(&payload, &pload_v, sizeof(pload_v));
    SNetDistribZMQSend(payload, snet_stop, i);
  }

}
Esempio n. 5
0
void SNetDistribZMQSend(zframe_t *payload, int type, int destination)
{
  int rc;
  zframe_t *source_f = NULL;
  zframe_t *type_f = NULL;
  zmsg_t *msg = zmsg_new();

  zmsg_push(msg, payload);

  SNetDistribPack(&type_f, &type, sizeof(int));
  zmsg_push(msg, type_f);

  SNetDistribPack(&source_f, &node_location, sizeof(int));
  zmsg_push(msg, source_f);

  rc = HTabSend(msg, destination);
  if (rc != 0) {
    SNetUtilDebugFatal("ZMQDistrib: Cannot send message to  %d (%s): zmsg_send (%d)",
        destination, SNetDistribZMQHTabLookUp(destination)->host, rc);
  }
}
Esempio n. 6
0
static void SAC4SNetMPIPackFun(void *sacdata, void *buf)
{
  int *shape;
  void *contents = NULL;
  SACarg *data = sacdata;
  int type, dims, num_elems = 1;

  type = SACARGgetBasetype(data);
  dims = SACARGgetDim(data);
  shape = SNetMemAlloc(dims * sizeof(int));

  for (int i = 0; i < dims; i++) {
    shape[i] = SACARGgetShape(data, i);
    num_elems *= SACARGgetShape(data, i);
  }

  SNetDistribPack(&type, buf, MPI_INT, 1);
  SNetDistribPack(&dims, buf, MPI_INT, 1);
  SNetDistribPack(shape, buf, MPI_INT, dims);

  SNetMemFree(shape);

  switch (type) {
    case SACint:
      contents = SACARGconvertToIntArray(SACARGnewReference(data));
      break;
    case SACdbl:
      contents = SACARGconvertToDoubleArray(SACARGnewReference(data));
      break;
    case SACflt:
      contents = SACARGconvertToFloatArray(SACARGnewReference(data));
      break;
    default:
      Error( "Unsupported basetype in pack function.");
      break;
  }

  SNetDistribPack(contents, buf, SAC4SNetBasetypeToMPIType(type), num_elems);
  SNetMemFree(contents);
}