inline static void PackRef(void *buf, int count, snet_ref_t **src) { for (int i = 0; i < count; i++) { SNetRefSerialise(src[i], buf, &PackInt, &PackByte); SNetRefOutgoing(src[i]); } }
void SNetDistribFetchRef(snet_ref_t *ref) { mpi_buf_t buf = {0, 0, NULL}; SNetRefSerialise(ref, &buf); MPISendBuf(&buf, SNetRefNode(ref), snet_ref_fetch); SNetMemFree(buf.data); }
void SNetDistribFetchRef(snet_ref_t *ref) { mpi_buf_t buf = {0, 0, NULL}; SNetRefSerialise(ref, &buf, &PackInt, &PackByte); MPISend(buf.data, buf.offset, SNetRefNode(ref), snet_ref_fetch); SNetMemFree(buf.data); }
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 SNetDistribSendData(snet_ref_t *ref, void *data, void *dest) { mpi_buf_t buf = {0, 0, NULL}; SNetRefSerialise(ref, &buf, &PackInt, &PackByte); SNetInterfaceGet(SNetRefInterface(ref))->packfun(data, &buf); MPISend(buf.data, buf.offset, (uintptr_t) dest, snet_ref_set); SNetMemFree(buf.data); }
void SNetDistribUpdateRef(snet_ref_t *ref, int count) { mpi_buf_t buf = {0, 0, NULL}; SNetRefSerialise(ref, &buf, &PackInt, &PackByte); PackInt(&buf, 1, &count); MPISend(buf.data, buf.offset, SNetRefNode(ref), snet_ref_update); SNetMemFree(buf.data); }
void SNetDistribSendData(snet_ref_t *ref, void *data, void *dest) { // Only called from imanager, so no safety issue to use static static mpi_buf_t buf = {0, 0, NULL}; buf.offset = 0; SNetRefSerialise(ref, &buf); SNetInterfaceGet(SNetRefInterface(ref))->packfun(data, &buf); MPISendBuf(&buf, (uintptr_t) dest, snet_ref_set); }
void SNetDistribUpdateRef(snet_ref_t *ref, int count) { int node = SNetRefNode(ref); snet_comm_type_t type = snet_ref_update; start_write_node(node); cpy_mem_to_mpb(node, &type, sizeof(snet_comm_type_t)); SNetRefSerialise(ref, (void*) node, &PackInt, &PackByte); cpy_mem_to_mpb(node, &count, sizeof(int)); stop_write_node(node); }
void SNetDistribFetchRef(snet_ref_t *ref) { int node = SNetRefNode(ref); snet_comm_type_t type = snet_ref_fetch; start_write_node(node); cpy_mem_to_mpb(node, &type, sizeof(snet_comm_type_t)); SNetRefSerialise(ref, (void*) node, &PackInt, &PackByte); if (remap) { cpy_mem_to_mpb(node, &node_location, sizeof(node_location)); } else { lut_addr_t addr = SCCPtr2Addr(SCCMallocPtr(SNetRefAllocSize(ref))); cpy_mem_to_mpb(node, &addr, sizeof(lut_addr_t)); } stop_write_node(node); }
void SNetDistribSendData(snet_ref_t *ref, void *data, void *dest) { int node; lut_addr_t addr; snet_comm_type_t type = snet_ref_set; if (remap) { addr.node = *(int*) dest; } else { addr = *(lut_addr_t*) dest; SNetMemFree(dest); } node = addr.node; start_write_node(node); cpy_mem_to_mpb(node, &type, sizeof(snet_comm_type_t)); SNetRefSerialise(ref, (void*) node, &PackInt, &PackByte); if (!remap) cpy_mem_to_mpb(node, &addr, sizeof(lut_addr_t)); SNetInterfaceGet(SNetRefInterface(ref))->packfun(data, &addr); stop_write_node(node); }