1
1

revert to an older (not previosly checked in) version to get around a

regression.

This commit was SVN r17663.
Этот коммит содержится в:
Rich Graham 2008-02-29 03:12:12 +00:00
родитель a585923de1
Коммит 1632d8b299

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

@ -202,8 +202,7 @@ int mca_coll_sm2_allreduce_intra_fanin_fanout(void *sbuf, void *rbuf, int count,
/* I am the root - so copy signal children, and then /* I am the root - so copy signal children, and then
* start reading * start reading
*/ */
/* don't need mb, as flag has just been set to tag after MB();
* MB()*/
my_ctl_pointer->flag=-tag; my_ctl_pointer->flag=-tag;
/* copy data to user supplied buffer */ /* copy data to user supplied buffer */
@ -214,8 +213,7 @@ int mca_coll_sm2_allreduce_intra_fanin_fanout(void *sbuf, void *rbuf, int count,
return OMPI_ERROR; return OMPI_ERROR;
} }
} } else {
} else if( LEAF_NODE == my_fanout_read_tree->my_node_type ) {
parent_base_temp_pointer=(char *) parent_base_temp_pointer=(char *)
((char *)sm_buffer+my_fanout_parent* ((char *)sm_buffer+my_fanout_parent*
sm_module->segement_size_per_process); sm_module->segement_size_per_process);
@ -240,6 +238,21 @@ int mca_coll_sm2_allreduce_intra_fanin_fanout(void *sbuf, void *rbuf, int count,
; ;
} }
/* copy the data to my shared buffer, for access by children */
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)my_data_pointer,(char *)parent_data_pointer);
if( 0 != rc ) {
return OMPI_ERROR;
}
/* set memory barriet to make sure data is in main memory before
* the completion flgas are set.
*/
MB();
/* signal children that they may read the result data */
my_ctl_pointer->flag=-tag;
/* copy data to user supplied buffer */ /* copy data to user supplied buffer */
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe, rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)rbuf+dt_extent*count_processed, (char *)rbuf+dt_extent*count_processed,
@ -248,53 +261,137 @@ int mca_coll_sm2_allreduce_intra_fanin_fanout(void *sbuf, void *rbuf, int count,
return OMPI_ERROR; return OMPI_ERROR;
} }
}
} else if( LEAF_NODE == my_fanout_read_tree->my_node_type ) {
if( 0 == my_fanout_read_tree->n_parents ) {
/* I am the root - so copy signal children, and then
* start reading
*/
MB();
my_ctl_pointer->flag=-tag;
/* copy data to user supplied buffer */
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)((char *)rbuf+dt_extent*count_processed),
(char *)my_data_pointer);
if( 0 != rc ) {
return OMPI_ERROR;
}
} else {
parent_base_temp_pointer=(char *)
((char *)sm_buffer+my_fanout_parent*
sm_module->segement_size_per_process);
parent_data_pointer=(volatile char *)
((char *)parent_base_temp_pointer+ctl_size);
parent_ctl_pointer=(volatile
mca_coll_sm2_nb_request_process_shared_mem_t *)
parent_base_temp_pointer;
child_ctl_pointer=
(volatile mca_coll_sm2_nb_request_process_shared_mem_t *)
parent_data_pointer;
/*
* wait on Parent to signal that data is ready
*/
while(!
( (parent_ctl_pointer->flag == -tag) &
(parent_ctl_pointer->index== stripe_number) ) ) {
/* Note: Actually need to make progress here */
;
}
/* copy the data to my shared buffer, for access by children */
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)my_data_pointer,(char *)parent_data_pointer);
if( 0 != rc ) {
return OMPI_ERROR;
}
/* set memory barriet to make sure data is in main memory before
* the completion flgas are set.
*/
MB();
/* signal children that they may read the result data */
my_ctl_pointer->flag=-tag;
/* copy data to user supplied buffer */
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)rbuf+dt_extent*count_processed,
(char *)my_data_pointer);
if( 0 != rc ) {
return OMPI_ERROR;
}
}
} else { } else {
/* interior nodes */ /* interior nodes */
parent_base_temp_pointer=(char *) if( 0 == my_fanout_read_tree->n_parents ) {
((char *)sm_buffer+my_fanout_parent* /* I am the root - so copy signal children, and then
sm_module->segement_size_per_process); * start reading
*/
parent_data_pointer=(volatile char *) MB();
((char *)parent_base_temp_pointer+ctl_size); my_ctl_pointer->flag=-tag;
parent_ctl_pointer=(volatile
mca_coll_sm2_nb_request_process_shared_mem_t *) /* copy data to user supplied buffer */
parent_base_temp_pointer; rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)((char *)rbuf+dt_extent*count_processed),
child_ctl_pointer= (char *)my_data_pointer);
(volatile mca_coll_sm2_nb_request_process_shared_mem_t *) if( 0 != rc ) {
parent_data_pointer; return OMPI_ERROR;
}
} else {
parent_base_temp_pointer=(char *)
((char *)sm_buffer+my_fanout_parent*
sm_module->segement_size_per_process);
/* parent_data_pointer=(volatile char *)
* wait on Parent to signal that data is ready ((char *)parent_base_temp_pointer+ctl_size);
*/ parent_ctl_pointer=(volatile
while(! mca_coll_sm2_nb_request_process_shared_mem_t *)
( (parent_ctl_pointer->flag == -tag) & parent_base_temp_pointer;
(parent_ctl_pointer->index== stripe_number) ) ) {
/* Note: Actually need to make progress here */ child_ctl_pointer=
; (volatile mca_coll_sm2_nb_request_process_shared_mem_t *)
} parent_data_pointer;
/* copy the data to my shared buffer, for access by children */ /*
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe, * wait on Parent to signal that data is ready
(char *)my_data_pointer,(char *)parent_data_pointer); */
if( 0 != rc ) { while(!
return OMPI_ERROR; ( (parent_ctl_pointer->flag == -tag) &
} (parent_ctl_pointer->index== stripe_number) ) ) {
/* Note: Actually need to make progress here */
/* set memory barriet to make sure data is in main memory before ;
* the completion flgas are set. }
*/
MB(); /* copy the data to my shared buffer, for access by children */
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
/* signal children that they may read the result data */ (char *)my_data_pointer,(char *)parent_data_pointer);
my_ctl_pointer->flag=-tag; if( 0 != rc ) {
return OMPI_ERROR;
/* copy data to user supplied buffer */ }
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)rbuf+dt_extent*count_processed, /* set memory barriet to make sure data is in main memory before
(char *)my_data_pointer); * the completion flgas are set.
if( 0 != rc ) { */
return OMPI_ERROR; MB();
/* signal children that they may read the result data */
my_ctl_pointer->flag=-tag;
/* copy data to user supplied buffer */
rc=ompi_ddt_copy_content_same_ddt(dtype, count_this_stripe,
(char *)rbuf+dt_extent*count_processed,
(char *)my_data_pointer);
if( 0 != rc ) {
return OMPI_ERROR;
}
} }
} }