int mca_coll_hcoll_ialltoallv(const void *sbuf, int *scounts, int *sdisps, struct ompi_datatype_t *sdtype, void *rbuf, int *rcounts, int *rdisps, struct ompi_datatype_t *rdtype, struct ompi_communicator_t *comm, ompi_request_t ** request, mca_coll_base_module_t *module) { dte_data_representation_t stype; dte_data_representation_t rtype; int rc; HCOL_VERBOSE(20,"RUNNING HCOL IALLTOALLV"); mca_coll_hcoll_module_t *hcoll_module = (mca_coll_hcoll_module_t*)module; stype = ompi_dtype_2_hcoll_dtype(sdtype, NO_DERIVED); rtype = ompi_dtype_2_hcoll_dtype(rdtype, NO_DERIVED); if (OPAL_UNLIKELY(HCOL_DTE_IS_ZERO(stype) || HCOL_DTE_IS_ZERO(rtype))) { HCOL_VERBOSE(20,"Ompi_datatype is not supported: sdtype = %s, rdtype = %s; calling fallback ialltoallv;", sdtype->super.name, rdtype->super.name); rc = hcoll_module->previous_ialltoallv(sbuf, scounts, sdisps, sdtype, rbuf, rcounts, rdisps, rdtype, comm, request, hcoll_module->previous_alltoallv_module); return rc; } rc = hcoll_collectives.coll_ialltoallv((void *)sbuf, (int *)scounts, (int *)sdisps, stype, rbuf, (int *)rcounts, (int *)rdisps, rtype, hcoll_module->hcoll_context, (void**)request); if (HCOLL_SUCCESS != rc){ HCOL_VERBOSE(20,"RUNNING FALLBACK IALLTOALLV"); rc = hcoll_module->previous_ialltoallv(sbuf, scounts, sdisps, sdtype, rbuf, rcounts, rdisps, rdtype, comm, request, hcoll_module->previous_alltoallv_module); } return rc; }
int mca_coll_hcoll_ibcast(void *buff, int count, struct ompi_datatype_t *datatype, int root, struct ompi_communicator_t *comm, ompi_request_t ** request, mca_coll_base_module_t *module) { dte_data_representation_t dtype; int rc; void** rt_handle; HCOL_VERBOSE(20,"RUNNING HCOL NON-BLOCKING BCAST"); mca_coll_hcoll_module_t *hcoll_module = (mca_coll_hcoll_module_t*)module; rt_handle = (void**) request; dtype = ompi_dtype_2_hcoll_dtype(datatype, TRY_FIND_DERIVED); if (OPAL_UNLIKELY(HCOL_DTE_IS_ZERO(dtype))){ /*If we are here then datatype is not simple predefined datatype */ /*In future we need to add more complex mapping to the dte_data_representation_t */ /* Now use fallback */ HCOL_VERBOSE(20,"Ompi_datatype is not supported: %s; calling fallback non-blocking bcast;",datatype->super.name); rc = hcoll_module->previous_ibcast(buff,count,datatype,root, comm, request, hcoll_module->previous_ibcast_module); return rc; } rc = hcoll_collectives.coll_ibcast(buff, count, dtype, root, rt_handle, hcoll_module->hcoll_context); if (HCOLL_SUCCESS != rc){ HCOL_VERBOSE(20,"RUNNING FALLBACK NON-BLOCKING BCAST"); rc = hcoll_module->previous_ibcast(buff,count,datatype,root, comm, request, hcoll_module->previous_ibcast_module); } return rc; }
int mca_coll_hcoll_iallgatherv(const void *sbuf, int scount, struct ompi_datatype_t *sdtype, void *rbuf, const int *rcount, const int *displs, struct ompi_datatype_t *rdtype, struct ompi_communicator_t *comm, ompi_request_t ** request, mca_coll_base_module_t *module) { dte_data_representation_t stype; dte_data_representation_t rtype; int rc; HCOL_VERBOSE(20,"RUNNING HCOL NON-BLOCKING ALLGATHERV"); mca_coll_hcoll_module_t *hcoll_module = (mca_coll_hcoll_module_t*)module; stype = ompi_dtype_2_hcoll_dtype(sdtype, NO_DERIVED); rtype = ompi_dtype_2_hcoll_dtype(rdtype, NO_DERIVED); void **rt_handle = (void **) request; if (OPAL_UNLIKELY(HCOL_DTE_IS_ZERO(stype) || HCOL_DTE_IS_ZERO(rtype))) { /*If we are here then datatype is not simple predefined datatype */ /*In future we need to add more complex mapping to the dte_data_representation_t */ /* Now use fallback */ HCOL_VERBOSE(20,"Ompi_datatype is not supported: sdtype = %s, rdtype = %s; calling fallback non-blocking allgatherv;", sdtype->super.name, rdtype->super.name); rc = hcoll_module->previous_iallgatherv(sbuf,scount,sdtype, rbuf,rcount, displs, rdtype, comm, request, hcoll_module->previous_iallgatherv_module); return rc; } rc = hcoll_collectives.coll_iallgatherv((void *)sbuf,scount,stype,rbuf,rcount,displs,rtype, hcoll_module->hcoll_context, rt_handle); if (HCOLL_SUCCESS != rc){ HCOL_VERBOSE(20,"RUNNING FALLBACK NON-BLOCKING ALLGATHER"); rc = hcoll_module->previous_iallgatherv(sbuf,scount,sdtype, rbuf,rcount, displs, rdtype, comm, request, hcoll_module->previous_iallgatherv_module); } return rc; }
int mca_coll_hcoll_ireduce(const void *sbuf, void *rbuf, int count, struct ompi_datatype_t *dtype, struct ompi_op_t *op, int root, struct ompi_communicator_t *comm, ompi_request_t ** request, mca_coll_base_module_t *module) { dte_data_representation_t Dtype; hcoll_dte_op_t *Op; int rc; HCOL_VERBOSE(20,"RUNNING HCOL NON-BLOCKING REDUCE"); mca_coll_hcoll_module_t *hcoll_module = (mca_coll_hcoll_module_t*)module; Dtype = ompi_dtype_2_hcoll_dtype(dtype, NO_DERIVED); void **rt_handle = (void**) request; if (OPAL_UNLIKELY(HCOL_DTE_IS_ZERO(Dtype))){ /*If we are here then datatype is not simple predefined datatype */ /*In future we need to add more complex mapping to the dte_data_representation_t */ /* Now use fallback */ HCOL_VERBOSE(20,"Ompi_datatype is not supported: dtype = %s; calling fallback non-blocking reduce;", dtype->super.name); rc = hcoll_module->previous_ireduce(sbuf,rbuf,count,dtype,op, root, comm, request, hcoll_module->previous_ireduce_module); return rc; } Op = ompi_op_2_hcolrte_op(op); if (OPAL_UNLIKELY(HCOL_DTE_OP_NULL == Op->id)){ /*If we are here then datatype is not simple predefined datatype */ /*In future we need to add more complex mapping to the dte_data_representation_t */ /* Now use fallback */ HCOL_VERBOSE(20,"ompi_op_t is not supported: op = %s; calling fallback non-blocking reduce;", op->o_name); rc = hcoll_module->previous_ireduce(sbuf,rbuf, count,dtype,op, root, comm, request, hcoll_module->previous_ireduce_module); return rc; } rc = hcoll_collectives.coll_ireduce((void *)sbuf,rbuf,count,Dtype,Op,root,hcoll_module->hcoll_context,rt_handle); if (HCOLL_SUCCESS != rc){ HCOL_VERBOSE(20,"RUNNING FALLBACK NON-BLOCKING REDUCE"); rc = hcoll_module->previous_ireduce(sbuf,rbuf, count,dtype,op, root, comm, request, hcoll_module->previous_ireduce_module); } return rc; }
int mca_coll_hcoll_allgather(const void *sbuf, int scount, struct ompi_datatype_t *sdtype, void *rbuf, int rcount, struct ompi_datatype_t *rdtype, struct ompi_communicator_t *comm, mca_coll_base_module_t *module) { dte_data_representation_t stype; dte_data_representation_t rtype; int rc; HCOL_VERBOSE(20,"RUNNING HCOL ALLGATHER"); mca_coll_hcoll_module_t *hcoll_module = (mca_coll_hcoll_module_t*)module; stype = ompi_dtype_2_hcoll_dtype(sdtype, TRY_FIND_DERIVED); rtype = ompi_dtype_2_hcoll_dtype(rdtype, TRY_FIND_DERIVED); if (sbuf == MPI_IN_PLACE) { stype = rtype; } if (OPAL_UNLIKELY(HCOL_DTE_IS_ZERO(stype) || HCOL_DTE_IS_ZERO(rtype))) { /*If we are here then datatype is not simple predefined datatype */ /*In future we need to add more complex mapping to the dte_data_representation_t */ /* Now use fallback */ HCOL_VERBOSE(20,"Ompi_datatype is not supported: sdtype = %s, rdtype = %s; calling fallback allgather;", sdtype->super.name, rdtype->super.name); rc = hcoll_module->previous_allgather(sbuf,scount,sdtype, rbuf,rcount,rdtype, comm, hcoll_module->previous_allgather_module); return rc; } rc = hcoll_collectives.coll_allgather((void *)sbuf,scount,stype,rbuf,rcount,rtype,hcoll_module->hcoll_context); if (HCOLL_SUCCESS != rc){ HCOL_VERBOSE(20,"RUNNING FALLBACK ALLGATHER"); rc = hcoll_module->previous_allgather(sbuf,scount,sdtype, rbuf,rcount,rdtype, comm, hcoll_module->previous_allgather_module); } return rc; }
static int send_nb( dte_data_representation_t data, uint32_t count, void *buffer, rte_ec_handle_t ec_h, rte_grp_handle_t grp_h, uint32_t tag, rte_request_handle_t *req) { ompi_communicator_t *comm = (ompi_communicator_t *)grp_h; if (! ec_h.handle) { fprintf(stderr,"***Error in hcolrte_rml_send_nb: wrong null argument: " "ec_h.handle = %p, ec_h.rank = %d\n",ec_h.handle,ec_h.rank); return 1; } if (HCOL_DTE_IS_INLINE(data)) { /*do inline nb recv*/ size_t size; ompi_request_t *ompi_req; if (!buffer && !HCOL_DTE_IS_ZERO(data)) { fprintf(stderr, "***Error in hcolrte_rml_send_nb: buffer pointer is NULL" " for non DTE_ZERO INLINE data representation\n"); return 1; } size = (size_t)data.rep.in_line_rep.data_handle.in_line.packed_size*count/8; HCOL_VERBOSE(30,"PML_ISEND: dest = %d: buf = %p: size = %u: comm = %p", ec_h.rank, buffer, (unsigned int)size, (void *)comm); if (MCA_PML_CALL(isend(buffer,size,&(ompi_mpi_unsigned_char.dt),ec_h.rank, tag,MCA_PML_BASE_SEND_STANDARD,comm,&ompi_req))) { return 1; } req->data = (void *)ompi_req; req->status = HCOLRTE_REQUEST_ACTIVE; } else { int total_entries_number; int i; unsigned int j; void *buf; uint64_t len; int repeat_count; struct dte_struct_t * repeat; if (NULL != buffer) { /* We have a full data description & buffer pointer simultaneously. It is ambiguous. Throw a warning since the user might have made a mistake with data reps*/ fprintf(stderr,"Warning: buffer_pointer != NULL for NON-inline data representation: buffer_pointer is ignored.\n"); } total_entries_number = count_total_dte_repeat_entries(&data); repeat = data.rep.general_rep->data_representation.data->repeat; repeat_count = data.rep.general_rep->data_representation.data->repeat_count; for (i=0; i< repeat_count; i++) { for (j=0; j<repeat[i].n_elements; j++) { char *repeat_unit = (char *)&repeat[i]; buf = (void *)(repeat_unit+repeat[i].elements[j].base_offset); len = repeat[i].elements[j].packed_size; send_nb(DTE_BYTE,len,buf,ec_h,grp_h,tag,req); } } } return HCOLL_SUCCESS; }