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); } }
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); } }
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); }
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); } }
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); } }
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); }