int ompi_coll_tuned_allgatherv_intra_dec_dynamic(const void *sbuf, int scount, struct ompi_datatype_t *sdtype, void* rbuf, const int *rcounts, const int *rdispls, struct ompi_datatype_t *rdtype, struct ompi_communicator_t *comm, mca_coll_base_module_t *module) { mca_coll_tuned_module_t *tuned_module = (mca_coll_tuned_module_t*) module; OPAL_OUTPUT((ompi_coll_tuned_stream, "ompi_coll_tuned_allgatherv_intra_dec_dynamic")); if (tuned_module->com_rules[ALLGATHERV]) { /* We have file based rules: - calculate message size and other necessary information */ int comsize, i; int alg, faninout, segsize, ignoreme; size_t dsize, total_size; comsize = ompi_comm_size(comm); ompi_datatype_type_size (sdtype, &dsize); total_size = 0; for (i = 0; i < comsize; i++) { total_size += dsize * rcounts[i]; } alg = ompi_coll_tuned_get_target_method_params (tuned_module->com_rules[ALLGATHERV], total_size, &faninout, &segsize, &ignoreme); if (alg) { /* we have found a valid choice from the file based rules for this message size */ return ompi_coll_tuned_allgatherv_intra_do_this (sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module, alg, faninout, segsize); } } /* We do not have file based rules */ if (tuned_module->user_forced[ALLGATHERV].algorithm) { /* User-forced algorithm */ return ompi_coll_tuned_allgatherv_intra_do_this(sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module, tuned_module->user_forced[ALLGATHERV].algorithm, tuned_module->user_forced[ALLGATHERV].tree_fanout, tuned_module->user_forced[ALLGATHERV].segsize); } /* Use default decision */ return ompi_coll_tuned_allgatherv_intra_dec_fixed (sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module); }
int ompi_coll_tuned_allgatherv_intra_do_forced(const void *sbuf, int scount, struct ompi_datatype_t *sdtype, void *rbuf, const int *rcounts, const int *rdispls, struct ompi_datatype_t *rdtype, struct ompi_communicator_t *comm, mca_coll_base_module_t *module) { mca_coll_tuned_module_t *tuned_module = (mca_coll_tuned_module_t*) module; OPAL_OUTPUT((ompi_coll_tuned_stream, "coll:tuned:allgatherv_intra_do_forced selected algorithm %d", tuned_module->user_forced[ALLGATHERV].algorithm)); switch (tuned_module->user_forced[ALLGATHERV].algorithm) { case (0): return ompi_coll_tuned_allgatherv_intra_dec_fixed(sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module); case (1): return ompi_coll_base_allgatherv_intra_basic_default(sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module); case (2): return ompi_coll_base_allgatherv_intra_bruck(sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module); case (3): return ompi_coll_base_allgatherv_intra_ring(sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module); case (4): return ompi_coll_base_allgatherv_intra_neighborexchange(sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module); case (5): return ompi_coll_base_allgatherv_intra_two_procs(sbuf, scount, sdtype, rbuf, rcounts, rdispls, rdtype, comm, module); } /* switch */ OPAL_OUTPUT((ompi_coll_tuned_stream, "coll:tuned:allgatherv_intra_do_forced attempt to select algorithm %d when only 0-%d is valid?", tuned_module->user_forced[ALLGATHERV].algorithm, ompi_coll_tuned_forced_max_algorithms[ALLGATHERV])); return (MPI_ERR_ARG); }