From c15cd5e4ab4e3b1df12a7686472ba896ae9cf3a2 Mon Sep 17 00:00:00 2001 From: George Bosilca Date: Thu, 12 Apr 2007 04:55:23 +0000 Subject: [PATCH] Unload all non necessary PLS. Once the selection process is done, we should release all unselected PLS. This decrease the footprint of all Open MPI based processes. This commit was SVN r14322. --- orte/mca/pls/base/pls_base_select.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/orte/mca/pls/base/pls_base_select.c b/orte/mca/pls/base/pls_base_select.c index 7cee524946..9c3c8c10c2 100644 --- a/orte/mca/pls/base/pls_base_select.c +++ b/orte/mca/pls/base/pls_base_select.c @@ -2,7 +2,7 @@ * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. - * Copyright (c) 2004-2005 The University of Tennessee and The University + * Copyright (c) 2004-2007 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, @@ -24,6 +24,7 @@ #include "opal/util/show_help.h" #include "opal/mca/mca.h" #include "opal/mca/base/base.h" +#include "opal/mca/base/mca_base_component_repository.h" #include "orte/util/proc_info.h" #include "orte/mca/errmgr/errmgr.h" @@ -82,8 +83,8 @@ int orte_pls_base_select(void) best_priority = priority; } else { opal_output_verbose(10, orte_pls_base.pls_output, - "orte:base:select: component %s does NOT want to be considered for selection", - component->pls_version.mca_component_name); + "orte:base:select: component %s does did not win the election", + component->pls_version.mca_component_name); if (NULL == module->finalize) { opal_output(orte_pls_base.pls_output, "It appears you are the victim of a stale library - please delete your installation lib directory and reinstall"); @@ -107,6 +108,24 @@ int orte_pls_base_select(void) orte_pls_base.selected_component = *best_component; orte_pls_base.selected = true; + /* unload all components that were not selected */ + item = opal_list_get_first(&orte_pls_base.available_components); + while(item != opal_list_get_end(&orte_pls_base.available_components)) { + opal_list_item_t* next = opal_list_get_next(item); + orte_pls_base_component_t* component; + cli = (mca_base_component_list_item_t *) item; + component = (orte_pls_base_component_t *) cli->cli_component; + if(component != best_component) { + opal_output_verbose(10, orte_pls_base.pls_output, + "orte_pls_base_select: module %s unloaded", + component->pls_version.mca_component_name); + mca_base_component_repository_release((mca_base_component_t *) component); + opal_list_remove_item(&orte_pls_base.available_components, item); + OBJ_RELEASE(item); + } + item = next; + } + /* if we are an HNP, then start our receive */ if (orte_process_info.seed) { if (ORTE_SUCCESS != (rc = orte_pls_base_comm_start())) {