Skip to content

Instantly share code, notes, and snippets.

@joerns
Last active November 27, 2018 10:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joerns/a0059c3f591db42c88b004df6883fce9 to your computer and use it in GitHub Desktop.
Save joerns/a0059c3f591db42c88b004df6883fce9 to your computer and use it in GitHub Desktop.
hints = fi_allocinfo();
hints->ep_attr->type = FI_EP_RDM;
hints->caps = FI_MSG;
fi_getinfo(FI_VERSION(1, 1), "0.0.0.0", "12345, FI_SOURCE, hints, &socket->fi);
fi_fabric(socket->fi->fabric_attr, &socket->fabric, &socket->prov_ctx);
fi_domain(socket->fabric, socket->fi, &socket->domain, &socket->prov_ctx);
fi_endpoint(socket->domain, socket->fi, &socket->ep, &socket->prov_ctx);
struct fi_av_attr av_attr;
av_attr.type = socket->fi->domain_attr->av_type; /* type of AV */
av_attr.count = 1; /* expected # entries for AV */
av_attr.ep_per_node = 0; /* # endpoints per fabric address */
av_attr.name = NULL; /* system name of AV */
av_attr.map_addr = 0; /* base mmap address */
av_attr.flags = 0; /* operation flags */
fi_av_open(socket->domain, &av_attr, &socket->av, &socket->prov_ctx);
fi_ep_bind(socket->ep, &socket->av->fid, 0);
struct fi_cq_attr cq_attr;
cq_attr.size = socket->fi->rx_attr->size; /* # entries for CQ */
cq_attr.flags = 0; /* operation flags */
cq_attr.format = FI_CQ_FORMAT_CONTEXT; /* completion format */
cq_attr.wait_obj= FI_WAIT_NONE; /* requested wait object */
cq_attr.signaling_vector = 0; /* interrupt affinity */
cq_attr.wait_cond = FI_CQ_COND_NONE; /* wait condition format */
cq_attr.wait_set = NULL; /* optional wait set */
fi_cq_open(socket->domain, &cq_attr, &socket->cq, NULL);
fi_ep_bind((socket->ep), &socket->cq->fid, FI_TRANSMIT|FI_RECV);
fi_enable(socket->ep);
fi_mr_reg(socket->domain, buf->data, buf->size, access, 0, 0, 0, &buf->mr,
&socket->prov_ctx);
desc = fi_mr_desc(buf->mr);
fi_recv(socket->ep, buf->data, buf->size, desc, FI_ADDR_UNSPEC, &socket->prov_ctx); // succeeds
hints = fi_allocinfo();
hints->ep_attr->type = FI_EP_RDM;
hints->caps = FI_MSG;
fi_getinfo(FI_VERSION(1, 1), "192.168.56.2", "12345, 0, hints, &socket->fi);
fi_fabric(socket->fi->fabric_attr, &socket->fabric, &socket->prov_ctx);
fi_domain(socket->fabric, socket->fi, &socket->domain, &socket->prov_ctx);
fi_endpoint(socket->domain, socket->fi, &socket->ep, &socket->prov_ctx);
struct fi_av_attr av_attr;
av_attr.type = socket->fi->domain_attr->av_type; /* type of AV */
av_attr.count = 1; /* expected # entries for AV */
av_attr.ep_per_node = 0; /* # endpoints per fabric address */
av_attr.name = NULL; /* system name of AV */
av_attr.map_addr = 0; /* base mmap address */
av_attr.flags = 0; /* operation flags */
fi_av_open(socket->domain, &av_attr, &socket->av, &socket->prov_ctx);
fi_ep_bind(socket->ep, &socket->av->fid, 0);
struct fi_cq_attr cq_attr;
cq_attr.size = socket->fi->tx_attr->size; /* # entries for CQ */
cq_attr.flags = 0; /* operation flags */
cq_attr.format = FI_CQ_FORMAT_CONTEXT; /* completion format */
cq_attr.wait_obj= FI_WAIT_NONE; /* requested wait object */
cq_attr.signaling_vector = 0; /* interrupt affinity */
cq_attr.wait_cond = FI_CQ_COND_NONE; /* wait condition format */
cq_attr.wait_set = NULL; /* optional wait set */
fi_cq_open(socket->domain, &cq_attr, &socket->cq, NULL);
fi_ep_bind((socket->ep), &socket->cq->fid, FI_TRANSMIT|FI_RECV);
fi_enable(socket->ep);
fi_mr_reg(socket->domain, buf->data, buf->size, access, 0, 0, 0, &buf->mr, &config.socket.prov_ctx);
fi_addr_t addr;
fi_av_insert(socket->av, socket->fi->dest_addr, 1, &addr, 0, &config.socket.prov_ctx);
desc = fi_mr_desc(buf->mr);
fi_send(config.socket.ep, buf->data, buf->size, desc, addr, &config.socket.prov_ctx);
// returns -11: Resource temporarily unavailable
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment