1
1

Correctly handle the length and offset (uint64_t).

Correctly compute the size of the registration for medium messages (size less than the minimum RDMA fragment).

This commit was SVN r3984.
Этот коммит содержится в:
George Bosilca 2005-01-13 09:10:02 +00:00
родитель e8562569d3
Коммит 75ceb0a326
3 изменённых файлов: 9 добавлений и 7 удалений

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

@ -115,7 +115,7 @@ mca_ptl_gm_component_open(void)
mca_ptl_gm_param_register_int ("max_frag_size", 256 * 1024 * 1024);
/* Parameters setting the message limits. */
mca_ptl_gm_component.gm_eager_limit =
mca_ptl_gm_param_register_int( "eager_limit", 32 * mca_ptl_gm_component.gm_segment_size );
mca_ptl_gm_param_register_int( "eager_limit", 2 * mca_ptl_gm_component.gm_segment_size );
mca_ptl_gm_component.gm_rdma_frag_size =
mca_ptl_gm_param_register_int ("rdma_frag_size", 512 * 1024);

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

@ -91,7 +91,7 @@ int mca_ptl_gm_receiver_advance_pipeline( mca_ptl_gm_recv_frag_t* frag, int only
mca_ptl_gm_peer_t* peer;
gm_status_t status;
mca_ptl_gm_pipeline_line_t *get_line, *reg_line, *dereg_line;
size_t length;
uint64_t length;
DO_DEBUG( int count;
char buffer[128]; )
@ -113,8 +113,8 @@ int mca_ptl_gm_receiver_advance_pipeline( mca_ptl_gm_recv_frag_t* frag, int only
reg_line = &(frag->pipeline.lines[frag->pipeline.pos_register]);
length = frag->frag_recv.frag_base.frag_size - frag->frag_bytes_processed;
if( (0 != length) && !(reg_line->flags & PTL_GM_PIPELINE_REGISTER) ) {
reg_line->length = length;
reg_line->hdr_flags = get_line->hdr_flags;
reg_line->length = length;
if( reg_line->length > mca_ptl_gm_component.gm_rdma_frag_size )
reg_line->length = mca_ptl_gm_component.gm_rdma_frag_size;
reg_line->offset = get_line->offset + get_line->length;
@ -239,7 +239,7 @@ int mca_ptl_gm_sender_advance_pipeline( mca_ptl_gm_send_frag_t* frag )
status = gm_register_memory( peer->peer_ptl->gm_port, reg_line->local_memory.pval,
reg_line->length );
if( GM_SUCCESS != status ) {
ompi_output( 0, "Cannot register receiver memory (%p, %ld) bytes offset %ld\n",
ompi_output( 0, "Cannot register sender memory (%p, %ld) bytes offset %ld\n",
reg_line->local_memory.pval, reg_line->length, reg_line->offset );
return OMPI_ERROR;
}
@ -358,7 +358,8 @@ int mca_ptl_gm_peer_send_continue( mca_ptl_gm_peer_t *ptl_peer,
if( 0 == pipeline->length )
pipeline->length = mca_ptl_gm_component.gm_rdma_frag_size;
else
pipeline->length = (mca_ptl_gm_component.gm_rdma_frag_size >> 1);
if( fragment->frag_send.frag_base.frag_size > mca_ptl_gm_component.gm_rdma_frag_size )
pipeline->length = (mca_ptl_gm_component.gm_rdma_frag_size >> 1);
}
pipeline->offset = fragment->frag_offset;
pipeline->hdr_flags = fragment->frag_send.frag_base.frag_header.hdr_common.hdr_flags;
@ -718,7 +719,8 @@ mca_ptl_gm_recv_frag_frag( struct mca_ptl_gm_module_t* ptl,
if( 0 == pipeline->length )
pipeline->length = mca_ptl_gm_component.gm_rdma_frag_size;
else
pipeline->length = (mca_ptl_gm_component.gm_rdma_frag_size >> 1);
if( frag->frag_recv.frag_base.frag_size > mca_ptl_gm_component.gm_rdma_frag_size )
pipeline->length = (mca_ptl_gm_component.gm_rdma_frag_size >> 1);
}
pipeline->local_memory.lval = 0L;
pipeline->local_memory.pval = (char*)request->req_base.req_addr + hdr->hdr_frag.hdr_frag_offset;

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

@ -57,7 +57,7 @@ extern "C" {
struct mca_ptl_gm_pipeline_line_t {
uint16_t flags;
uint16_t hdr_flags;
uint32_t length;
uint64_t length;
uint64_t offset;
ompi_ptr_t local_memory;
ompi_ptr_t remote_memory;