Пример #1
0
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]);
  }
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
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);
}
Пример #5
0
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);
}
Пример #6
0
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);
}
Пример #7
0
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);
}
Пример #8
0
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);
}
Пример #9
0
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);
}
Пример #10
0
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);
}