/* * The following are used by dynamic and forced rules. Publish * details of each algorithm and if its forced/fixed/locked in as you add * methods/algorithms you must update this and the query/map routines. * This routine is called by the component only. This makes sure that * the mca parameters are set to their initial values and perms. * Module does not call this. They call the forced_getvalues routine * instead. */ int ompi_coll_tuned_alltoallv_intra_check_forced_init(coll_tuned_force_algorithm_mca_param_indices_t *mca_param_indices) { int max_alg = 2, requested_alg; ompi_coll_tuned_forced_max_algorithms[ALLTOALLV] = max_alg; mca_base_param_reg_int (&mca_coll_tuned_component.super.collm_version, "alltoallv_algorithm_count", "Number of alltoallv algorithms available", false, true, max_alg, NULL); mca_param_indices->algorithm_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoallv_algorithm", "Which alltoallv algorithm is used. " "Can be locked down to choice of: 0 ignore, " "1 basic linear, 2 pairwise.", false, false, 0, NULL); mca_base_param_lookup_int(mca_param_indices->algorithm_param_index, &(requested_alg)); if (requested_alg > max_alg) { if (0 == ompi_comm_rank( MPI_COMM_WORLD)) { opal_output(0, "Alltoallv algorithm #%d is not available (range [0..%d]). " "Switching back to ignore(0)\n", requested_alg, max_alg ); } mca_base_param_set_int(mca_param_indices->algorithm_param_index, 0); } return (MPI_SUCCESS); }
int ompi_coll_tuned_bcast_intra_check_forced_init (coll_tuned_force_algorithm_mca_param_indices_t *mca_param_indices) { int rc, max_alg = 6, requested_alg; ompi_coll_tuned_forced_max_algorithms[BCAST] = max_alg; rc = mca_base_param_reg_int (&mca_coll_tuned_component.super.collm_version, "bcast_algorithm_count", "Number of bcast algorithms available", false, true, max_alg, NULL); mca_param_indices->algorithm_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "bcast_algorithm", "Which bcast algorithm is used. Can be locked down to choice of: 0 ignore, 1 basic linear, 2 chain, 3: pipeline, 4: split binary tree, 5: binary tree, 6: binomial tree.", false, false, 0, NULL); if (mca_param_indices->algorithm_param_index < 0) { return mca_param_indices->algorithm_param_index; } mca_base_param_lookup_int(mca_param_indices->algorithm_param_index, &(requested_alg)); if( 0 > requested_alg || requested_alg > max_alg ) { if( 0 == ompi_comm_rank( MPI_COMM_WORLD ) ) { opal_output( 0, "Broadcast algorithm #%d is not available (range [0..%d]). Switching back to ignore(0)\n", requested_alg, max_alg ); } mca_base_param_set_int( mca_param_indices->algorithm_param_index, 0); } mca_param_indices->segsize_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "bcast_algorithm_segmentsize", "Segment size in bytes used by default for bcast algorithms. Only has meaning if algorithm is forced and supports segmenting. 0 bytes means no segmentation.", false, false, 0, NULL); mca_param_indices->tree_fanout_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "bcast_algorithm_tree_fanout", "Fanout for n-tree used for bcast algorithms. Only has meaning if algorithm is forced and supports n-tree topo based operation.", false, false, ompi_coll_tuned_init_tree_fanout, /* get system wide default */ NULL); mca_param_indices->chain_fanout_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "bcast_algorithm_chain_fanout", "Fanout for chains used for bcast algorithms. Only has meaning if algorithm is forced and supports chain topo based operation.", false, false, ompi_coll_tuned_init_chain_fanout, /* get system wide default */ NULL); return (MPI_SUCCESS); }
int ompi_coll_tuned_alltoall_intra_check_forced_init (coll_tuned_force_algorithm_mca_param_indices_t *mca_param_indices) { int rc, max_alg = 4, requested_alg; ompi_coll_tuned_forced_max_algorithms[ALLTOALL] = max_alg; rc = mca_base_param_reg_int (&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_count", "Number of alltoall algorithms available", false, true, max_alg, NULL); mca_param_indices->algorithm_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm", "Which alltoall algorithm is used. Can be locked down to choice of: 0 ignore, 1 basic linear, 2 pairwise, 3: modified bruck, 4: two proc only.", false, false, 0, NULL); mca_base_param_lookup_int(mca_param_indices->algorithm_param_index, &(requested_alg)); if( requested_alg > max_alg ) { if( 0 == ompi_comm_rank( MPI_COMM_WORLD ) ) { opal_output( 0, "Alltoall algorithm #%d is not available (range [0..%d]). Switching back to ignore(0)\n", requested_alg, max_alg ); } mca_base_param_set_int( mca_param_indices->algorithm_param_index, 0); } mca_param_indices->segsize_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_segmentsize", "Segment size in bytes used by default for alltoall algorithms. Only has meaning if algorithm is forced and supports segmenting. 0 bytes means no segmentation.", false, false, 0, NULL); mca_param_indices->tree_fanout_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_tree_fanout", "Fanout for n-tree used for alltoall algorithms. Only has meaning if algorithm is forced and supports n-tree topo based operation.", false, false, ompi_coll_tuned_init_tree_fanout, /* get system wide default */ NULL); mca_param_indices->chain_fanout_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_chain_fanout", "Fanout for chains used for alltoall algorithms. Only has meaning if algorithm is forced and supports chain topo based operation.", false, false, ompi_coll_tuned_init_chain_fanout, /* get system wide default */ NULL); return (MPI_SUCCESS); }
int orte_restart(orte_process_name_t *name, const char* uri) { int rc; orte_process_name_t* old_name; orte_process_name_t* new_name; if (ORTE_SUCCESS != (rc = orte_dss.copy((void**)&old_name, orte_process_info.my_name, ORTE_NAME))) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_dss.copy((void**)&new_name, name, ORTE_NAME))) { ORTE_ERROR_LOG(rc); return rc; } /* * Restart event library */ if (ORTE_SUCCESS != (rc = opal_event_restart())) { ORTE_ERROR_LOG(rc); return rc; } /* * Close selected components. */ orte_iof_base.iof_flush = false; if (ORTE_SUCCESS != (rc = orte_iof_base_close())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_smr_base_close())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_gpr_base_close())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_ns_base_close())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_rml_base_close())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_wait_finalize())) { ORTE_ERROR_LOG(rc); return rc; } /* * setup new global state */ orte_process_info.seed = false; /* if NULL, set ns_replica to old_name and set the corresponding uri parameter */ if (NULL == orte_process_info.ns_replica) { orte_process_info.ns_replica = old_name; orte_process_info.ns_replica_uri = strdup(uri); } /* if NULL, set gpr_replica to old_name and set the corresponding uri parameter */ if (NULL == orte_process_info.gpr_replica) { orte_process_info.gpr_replica = old_name; orte_process_info.gpr_replica_uri = strdup(uri); } /* ensure my_name is set to the new_name */ if (NULL != orte_process_info.my_name) { free(orte_process_info.my_name); } orte_process_info.my_name = new_name; #if 0 /* close the proc_info structure so it can be reinitialized */ if (ORTE_SUCCESS != (rc = orte_proc_info_finalize())) { ORTE_ERROR_LOG(rc); return rc; } /* set seed flag to false */ id = mca_base_param_register_int("seed", NULL, NULL, NULL, (int)false); if (ORTE_SUCCESS != (rc = mca_base_param_set_int(id, (int)false))) { ORTE_ERROR_LOG(rc); return rc; } /* call proc_info to reset the structure */ if (ORTE_SUCCESS != (rc = orte_proc_info())) { ORTE_ERROR_LOG(rc); return rc; } /* finalize the sys_info structure so it can be reinitialized */ if (ORTE_SUCCESS != (rc = orte_sys_info_finalize())) { ORTE_ERROR_LOG(rc); return rc; } /* call the sys_info function to load structure with any new info */ orte_system_info.init = false; if (ORTE_SUCCESS != (rc = orte_sys_info())) { ORTE_ERROR_LOG(rc); return rc; } /* establish the session directory structure for this process */ if (ORTE_SUCCESS != (rc = orte_ns.get_jobid_string(&jobid_str, orte_process_info.my_name))) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_ns.get_vpid_string(&procid_str, orte_process_info.my_name))) { ORTE_ERROR_LOG(rc); return rc; } if (orte_debug_flag) { opal_output(0, "[%lu,%lu,%lu] setting up session dir with", ORTE_NAME_ARGS(orte_process_info.my_name)); if (NULL != orte_process_info.tmpdir_base) { opal_output(0, "\ttmpdir %s", orte_process_info.tmpdir_base); } opal_output(0, "\tuniverse %s", orte_universe_info.name); opal_output(0, "\tuser %s", orte_system_info.user); opal_output(0, "\thost %s", orte_system_info.nodename); opal_output(0, "\tjobid %s", jobid_str); opal_output(0, "\tprocid %s", procid_str); } if (ORTE_SUCCESS != (rc = orte_session_dir(true, orte_process_info.tmpdir_base, orte_system_info.user, orte_system_info.nodename, NULL, orte_universe_info.name, jobid_str, procid_str))) { ORTE_ERROR_LOG(rc); if (jobid_str != NULL) free(jobid_str); if (procid_str != NULL) free(procid_str); return rc; } if (NULL != jobid_str) { free(jobid_str); } if (NULL != procid_str) { free(procid_str); } #endif /* * Re-open components. */ if (ORTE_SUCCESS != (rc = orte_wait_init())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_ns_base_open())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_rml_base_open())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_gpr_base_open())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_smr_base_open())) { ORTE_ERROR_LOG(rc); return rc; } /* * Select new modules. */ if (ORTE_SUCCESS != (rc = orte_rml_base_select())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_ns_base_select())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_gpr_base_select())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_smr_base_select())) { ORTE_ERROR_LOG(rc); return rc; } /* * Set contact info for the replicas */ if (ORTE_SUCCESS != (rc = orte_rml.set_uri(orte_process_info.ns_replica_uri))) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_rml.set_uri(orte_process_info.gpr_replica_uri))) { ORTE_ERROR_LOG(rc); return rc; } /* * Re-init selected modules. */ if (ORTE_SUCCESS != (rc = orte_rml.init())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_ns.init())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_gpr.init())) { ORTE_ERROR_LOG(rc); return rc; } /* * Complete restart */ if (ORTE_SUCCESS != (rc = orte_iof_base_open())) { ORTE_ERROR_LOG(rc); return rc; } if (ORTE_SUCCESS != (rc = orte_iof_base_select())) { ORTE_ERROR_LOG(rc); return rc; } return ORTE_SUCCESS; }
int ompi_coll_tuned_alltoall_intra_check_forced_init (coll_tuned_force_algorithm_mca_param_indices_t *mca_param_indices) { int max_alg = 5, requested_alg, max_requests; ompi_coll_tuned_forced_max_algorithms[ALLTOALL] = max_alg; mca_base_param_reg_int (&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_count", "Number of alltoall algorithms available", false, true, max_alg, NULL); mca_param_indices->algorithm_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm", "Which alltoall algorithm is used. Can be locked down to choice of: 0 ignore, 1 basic linear, 2 pairwise, 3: modified bruck, 4: linear with sync, 5:two proc only.", false, false, 0, NULL); if (mca_param_indices->algorithm_param_index < 0) { return mca_param_indices->algorithm_param_index; } mca_base_param_lookup_int(mca_param_indices->algorithm_param_index, &(requested_alg)); if( 0 > requested_alg || requested_alg > max_alg ) { if( 0 == ompi_comm_rank( MPI_COMM_WORLD ) ) { opal_output( 0, "Alltoall algorithm #%d is not available (range [0..%d]). Switching back to ignore(0)\n", requested_alg, max_alg ); } mca_base_param_set_int( mca_param_indices->algorithm_param_index, 0); } mca_param_indices->segsize_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_segmentsize", "Segment size in bytes used by default for alltoall algorithms. Only has meaning if algorithm is forced and supports segmenting. 0 bytes means no segmentation.", false, false, 0, NULL); mca_param_indices->tree_fanout_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_tree_fanout", "Fanout for n-tree used for alltoall algorithms. Only has meaning if algorithm is forced and supports n-tree topo based operation.", false, false, ompi_coll_tuned_init_tree_fanout, /* get system wide default */ NULL); mca_param_indices->chain_fanout_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_chain_fanout", "Fanout for chains used for alltoall algorithms. Only has meaning if algorithm is forced and supports chain topo based operation.", false, false, ompi_coll_tuned_init_chain_fanout, /* get system wide default */ NULL); mca_param_indices->max_requests_param_index = mca_base_param_reg_int(&mca_coll_tuned_component.super.collm_version, "alltoall_algorithm_max_requests", "Maximum number of outstanding send or recv requests. Only has meaning for synchronized algorithms.", false, false, ompi_coll_tuned_init_max_requests, /* get system wide default */ NULL); if (mca_param_indices->max_requests_param_index < 0) { return mca_param_indices->algorithm_param_index; } mca_base_param_lookup_int(mca_param_indices->max_requests_param_index, &(max_requests)); if( max_requests <= 1 ) { if( 0 == ompi_comm_rank( MPI_COMM_WORLD ) ) { opal_output( 0, "Maximum outstanding requests must be positive number greater than 1. Switching to system level default %d \n", ompi_coll_tuned_init_max_requests ); } mca_base_param_set_int( mca_param_indices->max_requests_param_index, ompi_coll_tuned_init_max_requests); } return (MPI_SUCCESS); }