1
1

Optimize the group creation. Don't create a new group if there is

already one containing the same nodes (useful for MPI_Comm_dup).

This commit was SVN r15896.
Этот коммит содержится в:
George Bosilca 2007-08-17 02:19:34 +00:00
родитель 7efffdb1da
Коммит 2086b7b445

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

@ -100,7 +100,8 @@
* The internal debugging interface. * The internal debugging interface.
*/ */
#define VERBOSE_GENERAL 1 #define VERBOSE_GENERAL 1
#define VERBOSE_COMM 50 #define VERBOSE_GROUP 50
#define VERBOSE_COMM 10
#define VERBOSE_LISTS 10 #define VERBOSE_LISTS 10
#define VERBOSE_REQ 20 #define VERBOSE_REQ 20
@ -359,6 +360,8 @@ static group_t * find_or_create_group (mqs_process *proc,
g = comm->group; g = comm->group;
if (g && g->table_base == table) { if (g && g->table_base == table) {
g->ref_count++; /* Someone else is interested */ g->ref_count++; /* Someone else is interested */
DEBUG(VERBOSE_GROUP, ("Increase refcount for group 0x%p to %d\n",
(void*)g, g->ref_count) );
return g; return g;
} }
} }
@ -368,6 +371,9 @@ static group_t * find_or_create_group (mqs_process *proc,
tr = (int *)mqs_malloc (np*sizeof(int)); tr = (int *)mqs_malloc (np*sizeof(int));
trbuffer = (char *)mqs_malloc (np*intsize); trbuffer = (char *)mqs_malloc (np*intsize);
g->local_to_global = tr; g->local_to_global = tr;
g->table_base = table;
DEBUG(VERBOSE_GROUP, ("Create a new group 0x%p with %d members\n",
(void*)g, np) );
if (mqs_ok != mqs_fetch_data (proc, table, np*intsize, trbuffer) ) { if (mqs_ok != mqs_fetch_data (proc, table, np*intsize, trbuffer) ) {
mqs_free (g); mqs_free (g);
@ -794,7 +800,11 @@ static int communicators_changed (mqs_process *proc)
(number_free != p_info->comm_number_free) ) { (number_free != p_info->comm_number_free) ) {
p_info->comm_lowest_free = lowest_free; p_info->comm_lowest_free = lowest_free;
p_info->comm_number_free = number_free; p_info->comm_number_free = number_free;
DEBUG(VERBOSE_COMM, ("Recreate the communicator list\n") ); DEBUG(VERBOSE_COMM, ("Recreate the communicator list\n"
" lowest_free [current] %d != [stored] %d\n"
" number_free [current] %d != [stored] %d\n",
(int)lowest_free, (int)p_info->comm_lowest_free,
(int)number_free, (int)p_info->comm_number_free) );
return 1; return 1;
} }
DEBUG(VERBOSE_COMM, ("Communicator list not modified\n") ); DEBUG(VERBOSE_COMM, ("Communicator list not modified\n") );