1
1
todos. turn the debug messages  into ompi ignorables and inot do some ops in ompi_bug mode

This commit was SVN r8036.
Этот коммит содержится в:
Graham Fagg 2005-11-08 04:43:17 +00:00
родитель 833b558046
Коммит 5b3ba944a8
2 изменённых файлов: 88 добавлений и 37 удалений

Просмотреть файл

@ -617,9 +617,9 @@ struct mca_coll_base_comm_t {
ompi_coll_chain_t *cached_pipeline;
int cached_pipeline_root;
/* extra data required by the decision functions */
ompi_coll_alg_rule_t *all_base_rules; /* stored only on MCW, all other coms ref it */
ompi_coll_com_rule_t *com_rules[COLLCOUNT]; /* the communicator rules for each MPI collective for ONLY my comsize */
/* extra data required by the decision functions */
ompi_coll_alg_rule_t *all_base_rules; /* stored only on MCW, all other coms ref it */
ompi_coll_com_rule_t *com_rules[COLLCOUNT]; /* the communicator rules for each MPI collective for ONLY my comsize */
};
#if defined(c_plusplus) || defined(__cplusplus)

Просмотреть файл

@ -28,6 +28,8 @@
#include "mca/coll/base/base.h"
#include "coll_tuned.h"
#include "coll_tuned_topo.h"
#include "coll_tuned_dynamic_rules.h"
#include "coll_tuned_dynamic_file.h"
/*
@ -291,6 +293,8 @@ mca_coll_tuned_module_init(struct ompi_communicator_t *comm)
struct mca_coll_base_comm_t *data;
/* fanout parameters */
int pre_allocate = 1;
int rc=0;
int i;
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init called."));
@ -315,40 +319,6 @@ mca_coll_tuned_module_init(struct ompi_communicator_t *comm)
size = ompi_comm_size(comm);
}
/*
* If using dynamic and you are MPI_COMM_WORLD and you want to use a parameter file..
* then this effects how much storage space you need
* (This is a basic version of what will go into V2)
*
*/
rank = ompi_comm_rank(comm); /* find rank as only MCW:0 opens any tuned conf files */
if (!rank) {
if (&ompi_mpi_comm_world==comm) {
if (mca_coll_tuned_use_dynamic_rules) {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init MCW & Dynamic"));
if (mca_coll_tuned_dynamic_rules_filename) {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init Opening [%s]",
mca_coll_tuned_dynamic_rules_filename));
}
}
else {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init MCW & NOT Dynamic"));
}
}
else {
if (mca_coll_tuned_use_dynamic_rules) {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init NOT MCW & Dynamic"));
}
else {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init NOT MCW & NOT Dynamic"));
}
}
}
/*
* we still malloc data as it is used by the TUNED modules
@ -383,6 +353,77 @@ mca_coll_tuned_module_init(struct ompi_communicator_t *comm)
data->mcct_num_reqs = 0;
}
/*
* If using dynamic and you are MPI_COMM_WORLD and you want to use a parameter file..
* then this effects how much storage space you need
* (This is a basic version of what will go into V2)
*
*/
size = ompi_comm_size(comm); /* find size so we can (A) decide if to access the file directly */
/* (B) so we can get our very own customised ompi_coll_com_rule_t ptr */
/* which only has rules in it for our com size */
rank = ompi_comm_rank(comm); /* find rank as only MCW:0 opens any tuned conf files */
/* actually if they are below a threadhold, they all open it */
/* have to build a collective in here.. but just for MCW.. */
/* but we have to make sure we have the same rules everywhere :( */
/* if using dynamic rules make sure all overrides are NULL before we start override anything accidently */
if (mca_coll_tuned_use_dynamic_rules) {
/* base rules */
data->all_base_rules = (ompi_coll_alg_rule_t*) NULL;
/* each collective rule for my com size */
for (i=0;i<COLLCOUNT;i++) {
data->com_rules[i] = (ompi_coll_com_rule_t*) NULL;
}
}
if (&ompi_mpi_comm_world==comm) {
if (mca_coll_tuned_use_dynamic_rules) {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init MCW & Dynamic"));
if (mca_coll_tuned_dynamic_rules_filename) {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init Opening [%s]",
mca_coll_tuned_dynamic_rules_filename));
rc = coll_tuned_read_rules_config_file (mca_coll_tuned_dynamic_rules_filename,
&(data->all_base_rules), COLLCOUNT);
if (rc>=0) {
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init Read %d valid rules\n", rc));
}
else { /* failed to read config file, thus make sure its a NULL... */
data->all_base_rules = (ompi_coll_alg_rule_t*) NULL;
}
} /* end if a config filename exists */
} /* end if dynamic_rules */
} /* end if MCW */
/* ok, if using dynamic rules and we are just any rank and a base set of rules exist.. ref them */
if ((mca_coll_tuned_use_dynamic_rules)&&((ompi_mpi_comm_world.c_coll_selected_data)->all_base_rules)) {
if (!(&ompi_mpi_comm_world==comm)) { /* not if we are MCW.. that would be wrong */
OPAL_OUTPUT((mca_coll_tuned_stream,"coll:tuned:module_init NOT MCW & Dynamic"));
/* this will, erm fail if MCW doesn't exist which it should! */
data->all_base_rules = (ompi_mpi_comm_world.c_coll_selected_data)->all_base_rules;
}
/* at this point we all have a base set of rules if they exist atall */
/* now we can get our customized communicator sized rule set, for each collective */
for (i=0;i<COLLCOUNT;i++) {
data->com_rules[i] = coll_tuned_get_com_rule_ptr (data->all_base_rules, i, size);
}
}
/*
* now for the cached topo functions
* guess the initial topologies to use rank 0 as root
@ -460,6 +501,16 @@ int mca_coll_tuned_module_finalize(struct ompi_communicator_t *comm)
ompi_coll_tuned_topo_destroy_chain (&comm->c_coll_selected_data->cached_pipeline);
}
/* if any algorithm rules are cached on the communicator, only free them if its MCW */
/* as this is the only place they are allocated by reading the decision configure file */
if ((mca_coll_tuned_use_dynamic_rules)&&(&ompi_mpi_comm_world==comm)) {
if (comm->c_coll_selected_data->all_base_rules) {
coll_tuned_free_all_rules (comm->c_coll_selected_data->all_base_rules, COLLCOUNT);
}
}
/* if allocated memory free it */
if (comm->c_coll_selected_data) {