in src/nccl_ofi_api.cpp [634:683]
ncclResult_t nccl_net_ofi_irecv_v9(void* recvComm, int n, void** data,
size_t* sizes, int* tags, void** mhandles, void** request)
{
if (OFI_UNLIKELY(recvComm == NULL || data == NULL ||
sizes == NULL || tags == NULL ||
mhandles == NULL || request == NULL)) {
NCCL_OFI_WARN("Invalid argument: NULL pointer detected");
return check_return(ncclInvalidArgument);
}
if (OFI_UNLIKELY(n <= 0 || n > NCCL_OFI_MAX_RECVS)) {
NCCL_OFI_WARN("Invalid number of receives: %d (max: %d)", n, NCCL_OFI_MAX_RECVS);
return check_return(ncclInvalidArgument);
}
nccl_net_ofi_recv_comm_t *recv_comm =
(nccl_net_ofi_recv_comm_t *)recvComm;
nccl_net_ofi_mr_handle_t **handles = (nccl_net_ofi_mr_handle_t **)mhandles;
nccl_net_ofi_req_t **base_req = (nccl_net_ofi_req_t **)request;
if (OFI_UNLIKELY(recv_comm == NULL)) {
NCCL_OFI_WARN("Invalid communicator object provided");
return check_return(ncclInternalError);
}
if (OFI_UNLIKELY(n > NCCL_OFI_MAX_RECVS)) {
NCCL_OFI_WARN("Request for group recv size of %d, greater than maximum of %d",
n, NCCL_OFI_MAX_RECVS);
return check_return(ncclInternalError);
}
if (OFI_UNLIKELY(handles == NULL)) {
NCCL_OFI_WARN("Invalid memory handle provided");
return check_return(ncclInternalError);
}
/* can't check the memory handle for validity because the
* send/recv protocol will return a NULL handle for a host
* buffer when the provider does not require local
* registration and the buffer is a host buffer.
*/
if (OFI_UNLIKELY(base_req == NULL)) {
NCCL_OFI_WARN("Invalid request provided");
return check_return(ncclInternalError);
}
int ret = recv_comm->recv(recv_comm, n, data, sizes, tags, handles, base_req);
return nccl_net_ofi_retval_translate(ret);
}