static void MPIPackFun(c4snet_data_t *data, mpi_buf_t *buf) { int vtype = data->vtype, type = data->type; MPIPack(buf, &vtype, MPI_INT, 1); MPIPack(buf, &data->size, MPI_INT, 1); MPIPack(buf, &type, MPI_INT, 1); if (data->vtype == VTYPE_array) { MPIPack(buf, data->data.ptr, TypeToMPIType(data->type), data->size); } else { MPIPack(buf, &data->data, TypeToMPIType(data->type), 1); } }
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); } }
static c4snet_data_t *MPIUnpackFun(void *buf) { void *tmp; c4snet_data_t *result; int vtype, type, count; MPIUnpack(buf, &vtype, MPI_INT, 1); MPIUnpack(buf, &count, MPI_INT, 1); MPIUnpack(buf, &type, MPI_INT, 1); if (vtype == VTYPE_array) { result = C4SNetAlloc(type, count, &tmp); MPIUnpack(buf, tmp, TypeToMPIType(type), count); } else { result = C4SNetAlloc(type, 1, &tmp); MPIUnpack(buf, tmp, TypeToMPIType(type), 1); } return result; }
static c4snet_data_t *MPIUnpackFun(void *buf) { void *tmp; c4snet_data_t *result; int vtype, type, count; SNetDistribUnpack(&vtype, buf, MPI_INT, 1); SNetDistribUnpack(&count, buf, MPI_INT, 1); SNetDistribUnpack(&type, buf, MPI_INT, 1); if (vtype == VTYPE_array) { result = C4SNetAlloc(type, count, &tmp); SNetDistribUnpack(tmp, buf, TypeToMPIType(type), count); } else { result = C4SNetCreate(type, 1, &tmp); SNetDistribUnpack(tmp, buf, TypeToMPIType(type), 1); } return result; }