1
1

Initialize the convertor on _START not on _INIT. This allow us to

set it up before the match when we know the peer, saving some
time on the critical path. If the receive is ANY_SOURCE then
we initialize the convertor on _MATCHED. Anyway, we will set it
up only once per receive.

This commit was SVN r12484.
Этот коммит содержится в:
George Bosilca 2006-11-08 05:42:29 +00:00
родитель ad5d5b95c8
Коммит 915d748d72

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

@ -102,22 +102,6 @@ do { \
tag, \ tag, \
comm, \ comm, \
persistent); \ persistent); \
(request)->req_bytes_delivered = 0; \
if( MPI_ANY_SOURCE != src ) { \
(request)->req_recv.req_base.req_proc = \
comm->c_pml_comm->procs[src].ompi_proc; \
if( (0 != (datatype)->size) && (0 != count) ) { \
ompi_convertor_copy_and_prepare_for_recv( \
(request)->req_recv.req_base.req_proc->proc_convertor, \
(request)->req_recv.req_base.req_datatype, \
(request)->req_recv.req_base.req_count, \
(request)->req_recv.req_base.req_addr, \
0, \
&(request)->req_recv.req_convertor ); \
ompi_convertor_get_unpacked_size( &(request)->req_recv.req_convertor, \
&(request)->req_bytes_delivered ); \
} \
} \
} while(0) } while(0)
/** /**
@ -216,8 +200,8 @@ void mca_pml_ob1_recv_request_match_specific(mca_pml_ob1_recv_request_t* request
do { \ do { \
/* init/re-init the request */ \ /* init/re-init the request */ \
(request)->req_lock = 0; \ (request)->req_lock = 0; \
(request)->req_pipeline_depth = 0; \ (request)->req_pipeline_depth = 0; \
(request)->req_bytes_received = 0; \ (request)->req_bytes_received = 0; \
(request)->req_bytes_delivered = 0; \ (request)->req_bytes_delivered = 0; \
/* What about req_rdma_cnt ? */ \ /* What about req_rdma_cnt ? */ \
(request)->req_rdma_idx = 0; \ (request)->req_rdma_idx = 0; \
@ -230,6 +214,21 @@ do {
if((request)->req_recv.req_base.req_peer == OMPI_ANY_SOURCE) { \ if((request)->req_recv.req_base.req_peer == OMPI_ANY_SOURCE) { \
mca_pml_ob1_recv_request_match_wild(request); \ mca_pml_ob1_recv_request_match_wild(request); \
} else { \ } else { \
(request)->req_recv.req_base.req_proc = \
(request)->req_recv.req_base.req_comm->c_pml_comm->procs \
[(request)->req_recv.req_base.req_peer].ompi_proc; \
if( (0 != (request)->req_recv.req_base.req_datatype->size) && \
(0 != (request)->req_recv.req_base.req_count) ) { \
ompi_convertor_copy_and_prepare_for_recv( \
(request)->req_recv.req_base.req_proc->proc_convertor, \
(request)->req_recv.req_base.req_datatype, \
(request)->req_recv.req_base.req_count, \
(request)->req_recv.req_base.req_addr, \
0, \
&(request)->req_recv.req_convertor ); \
ompi_convertor_get_unpacked_size( &(request)->req_recv.req_convertor, \
&(request)->req_bytes_delivered ); \
} \
mca_pml_ob1_recv_request_match_specific(request); \ mca_pml_ob1_recv_request_match_specific(request); \
} \ } \
} while (0) } while (0)
@ -248,8 +247,7 @@ do {
&((request)->req_recv.req_base), PERUSE_RECV ); \ &((request)->req_recv.req_base), PERUSE_RECV ); \
\ \
if((request)->req_recv.req_bytes_packed > 0) { \ if((request)->req_recv.req_bytes_packed > 0) { \
if( (MPI_ANY_SOURCE == (request)->req_recv.req_base.req_peer) || \ if( MPI_ANY_SOURCE == (request)->req_recv.req_base.req_peer ) { \
(0 == (request)->req_bytes_delivered) ) { \
ompi_convertor_copy_and_prepare_for_recv( \ ompi_convertor_copy_and_prepare_for_recv( \
(request)->req_recv.req_base.req_proc->proc_convertor, \ (request)->req_recv.req_base.req_proc->proc_convertor, \
(request)->req_recv.req_base.req_datatype, \ (request)->req_recv.req_base.req_datatype, \