1
1

Remove the last bad symbol from the GM PTL.

This commit was SVN r7422.
Этот коммит содержится в:
George Bosilca 2005-09-18 12:52:37 +00:00
родитель b5cb27c006
Коммит 97673b45d1

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

@ -7,14 +7,14 @@
* All rights reserved. * All rights reserved.
* Copyright (c) 2004 The Ohio State University. * Copyright (c) 2004 The Ohio State University.
* All rights reserved. * All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved. * University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California. * Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved. * All rights reserved.
* $COPYRIGHT$ * $COPYRIGHT$
* *
* Additional copyrights may follow * Additional copyrights may follow
* *
* $HEADER$ * $HEADER$
*/ */
#include "ompi_config.h" #include "ompi_config.h"
@ -113,7 +113,7 @@ int mca_ptl_gm_receiver_advance_pipeline( mca_ptl_gm_recv_frag_t* frag, int only
get_line = &(frag->pipeline.lines[frag->pipeline.pos_transfert]); get_line = &(frag->pipeline.lines[frag->pipeline.pos_transfert]);
if( (PTL_GM_PIPELINE_TRANSFERT & get_line->flags) == PTL_GM_PIPELINE_TRANSFERT ) { if( (PTL_GM_PIPELINE_TRANSFERT & get_line->flags) == PTL_GM_PIPELINE_TRANSFERT ) {
peer->get_started = true; peer->get_started = true;
gm_get( peer->peer_ptl->gm_port, get_line->remote_memory.lval, gm_get( peer->peer_ptl->gm_port, get_line->remote_memory.lval,
get_line->local_memory.pval, get_line->length, get_line->local_memory.pval, get_line->length,
GM_LOW_PRIORITY, peer->peer_addr.local_id, peer->peer_addr.port_id, GM_LOW_PRIORITY, peer->peer_addr.local_id, peer->peer_addr.port_id,
mca_ptl_gm_get_callback, frag ); mca_ptl_gm_get_callback, frag );
@ -194,11 +194,11 @@ int mca_ptl_gm_sender_advance_pipeline( mca_ptl_gm_send_frag_t* frag )
if( (send_line->flags & PTL_GM_PIPELINE_TRANSFERT) == PTL_GM_PIPELINE_TRANSFERT ) { if( (send_line->flags & PTL_GM_PIPELINE_TRANSFERT) == PTL_GM_PIPELINE_TRANSFERT ) {
opal_list_item_t* item; opal_list_item_t* item;
int32_t rc; int32_t rc;
OMPI_FREE_LIST_WAIT( &(peer->peer_ptl->gm_send_dma_frags), item, rc ); OMPI_FREE_LIST_WAIT( &(peer->peer_ptl->gm_send_dma_frags), item, rc );
opal_atomic_sub( &(peer->peer_ptl->num_send_tokens), 1 ); opal_atomic_sub( &(peer->peer_ptl->num_send_tokens), 1 );
hdr = (mca_ptl_gm_frag_header_t*)item; hdr = (mca_ptl_gm_frag_header_t*)item;
hdr->hdr_frag.hdr_common.hdr_type = MCA_PTL_HDR_TYPE_FRAG; hdr->hdr_frag.hdr_common.hdr_type = MCA_PTL_HDR_TYPE_FRAG;
hdr->hdr_frag.hdr_common.hdr_flags = send_line->hdr_flags | hdr->hdr_frag.hdr_common.hdr_flags = send_line->hdr_flags |
frag->frag_send.frag_base.frag_header.hdr_common.hdr_flags; frag->frag_send.frag_base.frag_header.hdr_common.hdr_flags;
@ -208,17 +208,17 @@ int mca_ptl_gm_sender_advance_pipeline( mca_ptl_gm_send_frag_t* frag )
hdr->hdr_frag.hdr_frag_offset = send_line->offset; hdr->hdr_frag.hdr_frag_offset = send_line->offset;
hdr->hdr_frag.hdr_frag_length = send_line->length; hdr->hdr_frag.hdr_frag_length = send_line->length;
hdr->registered_memory = send_line->local_memory; hdr->registered_memory = send_line->local_memory;
gm_send_with_callback( peer->peer_ptl->gm_port, hdr, gm_send_with_callback( peer->peer_ptl->gm_port, hdr,
GM_SIZE, sizeof(mca_ptl_gm_frag_header_t), GM_SIZE, sizeof(mca_ptl_gm_frag_header_t),
GM_HIGH_PRIORITY, peer->peer_addr.local_id, peer->peer_addr.port_id, GM_HIGH_PRIORITY, peer->peer_addr.local_id, peer->peer_addr.port_id,
mca_ptl_gm_basic_frag_callback, (void*)hdr ); mca_ptl_gm_basic_frag_callback, (void*)hdr );
send_line->flags ^= PTL_GM_PIPELINE_REMOTE; send_line->flags ^= PTL_GM_PIPELINE_REMOTE;
frag->pipeline.pos_transfert = (frag->pipeline.pos_transfert + 1) % GM_PIPELINE_DEPTH; frag->pipeline.pos_transfert = (frag->pipeline.pos_transfert + 1) % GM_PIPELINE_DEPTH;
DO_DEBUG( count += sprintf( buffer + count, " send new fragment %lld", send_line->length ); ) DO_DEBUG( count += sprintf( buffer + count, " send new fragment %lld", send_line->length ); )
} }
/* deregister previous segment */ /* deregister previous segment */
dereg_line = &(frag->pipeline.lines[frag->pipeline.pos_deregister]); dereg_line = &(frag->pipeline.lines[frag->pipeline.pos_deregister]);
if( dereg_line->flags & PTL_GM_PIPELINE_DEREGISTER ) { /* something usefull */ if( dereg_line->flags & PTL_GM_PIPELINE_DEREGISTER ) { /* something usefull */
@ -265,7 +265,7 @@ int mca_ptl_gm_sender_advance_pipeline( mca_ptl_gm_send_frag_t* frag )
reg_line->length, reg_line->offset ); ) reg_line->length, reg_line->offset ); )
} }
} }
DO_DEBUG( opal_output( 0, "sender %d %s", orte_process_info.my_name->vpid, buffer ); ) DO_DEBUG( opal_output( 0, "sender %d %s", orte_process_info.my_name->vpid, buffer ); )
return OMPI_SUCCESS; return OMPI_SUCCESS;
} }
@ -282,17 +282,17 @@ int mca_ptl_gm_send_internal_rndv_header( mca_ptl_gm_peer_t *ptl_peer,
size_t max_data; size_t max_data;
int32_t freeAfter; int32_t freeAfter;
ompi_convertor_t *convertor = &(fragment->frag_send.frag_base.frag_convertor); ompi_convertor_t *convertor = &(fragment->frag_send.frag_base.frag_convertor);
iov.iov_base = (char*)hdr + sizeof(mca_ptl_gm_frag_header_t); iov.iov_base = (char*)hdr + sizeof(mca_ptl_gm_frag_header_t);
iov.iov_len = fragment->frag_send.frag_base.frag_size - fragment->frag_bytes_processed; iov.iov_len = fragment->frag_send.frag_base.frag_size - fragment->frag_bytes_processed;
if( iov.iov_len > (mca_ptl_gm_component.gm_segment_size - sizeof(mca_ptl_gm_frag_header_t)) ) if( iov.iov_len > (mca_ptl_gm_component.gm_segment_size - sizeof(mca_ptl_gm_frag_header_t)) )
iov.iov_len = (mca_ptl_gm_component.gm_segment_size - sizeof(mca_ptl_gm_frag_header_t)); iov.iov_len = (mca_ptl_gm_component.gm_segment_size - sizeof(mca_ptl_gm_frag_header_t));
max_data = iov.iov_len; max_data = iov.iov_len;
in_size = 1; in_size = 1;
if( ompi_convertor_pack(convertor, &(iov), &in_size, &max_data, &freeAfter) < 0) if( ompi_convertor_pack(convertor, &(iov), &in_size, &max_data, &freeAfter) < 0)
return OMPI_ERROR; return OMPI_ERROR;
hdr->hdr_frag.hdr_common.hdr_type = MCA_PTL_HDR_TYPE_FRAG; hdr->hdr_frag.hdr_common.hdr_type = MCA_PTL_HDR_TYPE_FRAG;
hdr->hdr_frag.hdr_common.hdr_flags = flags; hdr->hdr_frag.hdr_common.hdr_flags = flags;
hdr->hdr_frag.hdr_src_ptr.lval = 0L; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */ hdr->hdr_frag.hdr_src_ptr.lval = 0L; /* for VALGRIND/PURIFY - REPLACE WITH MACRO */
@ -303,7 +303,7 @@ int mca_ptl_gm_send_internal_rndv_header( mca_ptl_gm_peer_t *ptl_peer,
fragment->frag_bytes_processed; fragment->frag_bytes_processed;
hdr->registered_memory.lval = 0L; hdr->registered_memory.lval = 0L;
hdr->registered_memory.pval = NULL; hdr->registered_memory.pval = NULL;
DO_DEBUG( opal_output( 0, "sender %d before send internal rndv header hdr_offset %lld hdr_length %lld max_data %u", DO_DEBUG( opal_output( 0, "sender %d before send internal rndv header hdr_offset %lld hdr_length %lld max_data %u",
orte_process_info.my_name->vpid, hdr->hdr_frag.hdr_frag_offset, hdr->hdr_frag.hdr_frag_length, max_data ); ); orte_process_info.my_name->vpid, hdr->hdr_frag.hdr_frag_offset, hdr->hdr_frag.hdr_frag_length, max_data ); );
gm_send_with_callback( ptl_peer->peer_ptl->gm_port, hdr, GM_SIZE, gm_send_with_callback( ptl_peer->peer_ptl->gm_port, hdr, GM_SIZE,
@ -376,10 +376,10 @@ int mca_ptl_gm_send_burst_data( mca_ptl_gm_peer_t *ptl_peer,
} }
int mca_ptl_gm_peer_send_continue( mca_ptl_gm_peer_t *ptl_peer, int mca_ptl_gm_peer_send_continue( mca_ptl_gm_peer_t *ptl_peer,
mca_ptl_gm_send_frag_t *fragment, mca_ptl_gm_send_frag_t *fragment,
struct mca_ptl_base_send_request_t *sendreq, struct mca_ptl_base_send_request_t *sendreq,
size_t offset, size_t offset,
size_t *size, size_t *size,
int flags ) int flags )
{ {
mca_ptl_gm_frag_header_t* hdr; mca_ptl_gm_frag_header_t* hdr;
@ -507,7 +507,7 @@ static void send_match_callback( struct gm_port* port, void* context, gm_status_
*/ */
int mca_ptl_gm_peer_send( struct mca_ptl_base_module_t* ptl, int mca_ptl_gm_peer_send( struct mca_ptl_base_module_t* ptl,
struct mca_ptl_base_peer_t* ptl_base_peer, struct mca_ptl_base_peer_t* ptl_base_peer,
struct mca_ptl_base_send_request_t *sendreq, struct mca_ptl_base_send_request_t *sendreq,
size_t offset, size_t offset,
size_t size, size_t size,
int flags ) int flags )
@ -542,11 +542,11 @@ int mca_ptl_gm_peer_send( struct mca_ptl_base_module_t* ptl,
* request. * request.
*/ */
if( (size + header_length) <= mca_ptl_gm_component.gm_segment_size ) if( (size + header_length) <= mca_ptl_gm_component.gm_segment_size )
iov.iov_len = size; iov.iov_len = size;
else else
iov.iov_len = mca_ptl_gm_component.gm_segment_size - header_length; iov.iov_len = mca_ptl_gm_component.gm_segment_size - header_length;
/* copy the data to the registered buffer */ /* copy the data to the registered buffer */
iov.iov_base = ((char*)hdr) + header_length; iov.iov_base = ((char*)hdr) + header_length;
max_data = iov.iov_len; max_data = iov.iov_len;
@ -564,7 +564,7 @@ int mca_ptl_gm_peer_send( struct mca_ptl_base_module_t* ptl,
GM_SIZE, max_data + header_length, GM_LOW_PRIORITY, GM_SIZE, max_data + header_length, GM_LOW_PRIORITY,
ptl_peer->peer_addr.local_id, ptl_peer->peer_addr.port_id, ptl_peer->peer_addr.local_id, ptl_peer->peer_addr.port_id,
send_match_callback, (void *)hdr ); send_match_callback, (void *)hdr );
if( !(flags & MCA_PTL_FLAGS_ACK) ) { if( !(flags & MCA_PTL_FLAGS_ACK) ) {
ptl->ptl_send_progress( ptl, sendreq, max_data ); ptl->ptl_send_progress( ptl, sendreq, max_data );
DO_DEBUG( opal_output( 0, "sender %d complete request %p w/o rndv with %d bytes", DO_DEBUG( opal_output( 0, "sender %d complete request %p w/o rndv with %d bytes",
@ -582,7 +582,7 @@ mca_ptl_gm_recv_frag_ctrl( struct mca_ptl_gm_module_t *ptl,
mca_ptl_base_header_t * header, uint32_t msg_len ) mca_ptl_base_header_t * header, uint32_t msg_len )
{ {
mca_ptl_base_send_request_t *req; mca_ptl_base_send_request_t *req;
assert( MCA_PTL_FLAGS_ACK & header->hdr_common.hdr_flags ); assert( MCA_PTL_FLAGS_ACK & header->hdr_common.hdr_flags );
req = (mca_ptl_base_send_request_t*)(header->hdr_ack.hdr_src_ptr.pval); req = (mca_ptl_base_send_request_t*)(header->hdr_ack.hdr_src_ptr.pval);
req->req_peer_match = header->hdr_ack.hdr_dst_match; req->req_peer_match = header->hdr_ack.hdr_dst_match;
@ -591,7 +591,7 @@ mca_ptl_gm_recv_frag_ctrl( struct mca_ptl_gm_module_t *ptl,
DO_DEBUG( opal_output( 0, "sender %d get back the rendez-vous for request %p", DO_DEBUG( opal_output( 0, "sender %d get back the rendez-vous for request %p",
orte_process_info.my_name->vpid, req ); ); orte_process_info.my_name->vpid, req ); );
ptl->super.ptl_send_progress( (mca_ptl_base_module_t*)ptl, req, req->req_offset ); ptl->super.ptl_send_progress( (mca_ptl_base_module_t*)ptl, req, req->req_offset );
return NULL; return NULL;
} }
@ -640,7 +640,7 @@ mca_ptl_gm_recv_frag_match( struct mca_ptl_gm_module_t *ptl,
recv_frag->frag_recv.frag_base.frag_addr = NULL; recv_frag->frag_recv.frag_base.frag_addr = NULL;
} }
recv_frag->matched = false; recv_frag->matched = false;
return recv_frag; return recv_frag;
} }
@ -766,7 +766,7 @@ mca_ptl_gm_recv_frag_frag( struct mca_ptl_gm_module_t* ptl,
ptl->super.ptl_recv_progress( (mca_ptl_base_module_t*)ptl, request, max_data, max_data ); ptl->super.ptl_recv_progress( (mca_ptl_base_module_t*)ptl, request, max_data, max_data );
return NULL; return NULL;
} }
} }
/* Update the status of the fragment depending on the amount of data converted so far */ /* Update the status of the fragment depending on the amount of data converted so far */
frag->frag_bytes_processed += max_data; frag->frag_bytes_processed += max_data;
@ -787,7 +787,7 @@ mca_ptl_gm_recv_frag_frag( struct mca_ptl_gm_module_t* ptl,
mca_ptl_gm_pipeline_line_t* pipeline; mca_ptl_gm_pipeline_line_t* pipeline;
/* There is a kind of rendez-vous protocol used internally by the GM driver. If the amount of data /* There is a kind of rendez-vous protocol used internally by the GM driver. If the amount of data
* to transfert is large enough, then the sender will start sending a frag message with the * to transfert is large enough, then the sender will start sending a frag message with the
* remote_memory set to NULL (but with the length set to the length of the first fragment). * remote_memory set to NULL (but with the length set to the length of the first fragment).
* It will allow the receiver to start to register it's own memory. Later when the receiver * It will allow the receiver to start to register it's own memory. Later when the receiver
* get a fragment with the remote_memory field not NULL it can start getting the data. * get a fragment with the remote_memory field not NULL it can start getting the data.
@ -865,34 +865,34 @@ void mca_ptl_gm_outstanding_recv( struct mca_ptl_gm_module_t *ptl )
{ {
mca_ptl_gm_recv_frag_t * frag = NULL; mca_ptl_gm_recv_frag_t * frag = NULL;
int size; int size;
bool matched; bool matched;
size = opal_list_get_size (&ptl->gm_recv_outstanding_queue); size = opal_list_get_size (&ptl->gm_recv_outstanding_queue);
if (size > 0) { if (size > 0) {
frag = (mca_ptl_gm_recv_frag_t *) frag = (mca_ptl_gm_recv_frag_t *)
opal_list_remove_first( (opal_list_t *)&(ptl->gm_recv_outstanding_queue) ); opal_list_remove_first( (opal_list_t *)&(ptl->gm_recv_outstanding_queue) );
matched = ptl->super.ptl_match( &(ptl->super), &(frag->frag_recv), matched = ptl->super.ptl_match( &(ptl->super), &(frag->frag_recv),
&(frag->frag_recv.frag_base.frag_header.hdr_match) ); &(frag->frag_recv.frag_base.frag_header.hdr_match) );
if(!matched) { if(!matched) {
opal_list_append((opal_list_t *)&(ptl->gm_recv_outstanding_queue), opal_list_append((opal_list_t *)&(ptl->gm_recv_outstanding_queue),
(opal_list_item_t *) frag); (opal_list_item_t *) frag);
} else { } else {
/* if allocated buffer, free the buffer */ /* if allocated buffer, free the buffer */
/* return the recv descriptor to the free list */ /* return the recv descriptor to the free list */
OMPI_FREE_LIST_RETURN(&(ptl->gm_recv_frags_free), (opal_list_item_t *)frag); OMPI_FREE_LIST_RETURN(&(ptl->gm_recv_frags_free), (opal_list_item_t *)frag);
} }
} }
} }
frag_management_fct_t* frag_management_fct[MCA_PTL_HDR_TYPE_MAX] = { mca_ptl_gm_frag_management_fct_t* mca_ptl_gm_frag_management_fct[MCA_PTL_HDR_TYPE_MAX] = {
NULL, /* empty no header type equal to zero */ NULL, /* empty no header type equal to zero */
NULL, /* mca_ptl_gm_recv_frag_match, */ NULL, /* mca_ptl_gm_recv_frag_match, */
mca_ptl_gm_recv_frag_match, mca_ptl_gm_recv_frag_match,
(frag_management_fct_t*)mca_ptl_gm_recv_frag_frag, /* force the conversion to remove a warning */ (mca_ptl_gm_frag_management_fct_t*)mca_ptl_gm_recv_frag_frag, /* force the conversion to remove a warning */
mca_ptl_gm_recv_frag_ctrl, mca_ptl_gm_recv_frag_ctrl,
NULL, NULL,
NULL, NULL,
@ -902,7 +902,7 @@ frag_management_fct_t* frag_management_fct[MCA_PTL_HDR_TYPE_MAX] = {
int mca_ptl_gm_analyze_recv_event( struct mca_ptl_gm_module_t* ptl, gm_recv_event_t* event ) int mca_ptl_gm_analyze_recv_event( struct mca_ptl_gm_module_t* ptl, gm_recv_event_t* event )
{ {
mca_ptl_base_header_t *header = NULL, *release_buf; mca_ptl_base_header_t *header = NULL, *release_buf;
frag_management_fct_t* function; mca_ptl_gm_frag_management_fct_t* function;
uint32_t priority = GM_HIGH_PRIORITY, msg_len; uint32_t priority = GM_HIGH_PRIORITY, msg_len;
release_buf = (mca_ptl_base_header_t*)gm_ntohp(event->recv.buffer); release_buf = (mca_ptl_base_header_t*)gm_ntohp(event->recv.buffer);
@ -930,7 +930,7 @@ int mca_ptl_gm_analyze_recv_event( struct mca_ptl_gm_module_t* ptl, gm_recv_even
} }
assert( header->hdr_common.hdr_type < MCA_PTL_HDR_TYPE_MAX ); assert( header->hdr_common.hdr_type < MCA_PTL_HDR_TYPE_MAX );
function = frag_management_fct[header->hdr_common.hdr_type]; function = mca_ptl_gm_frag_management_fct[header->hdr_common.hdr_type];
assert( NULL != function ); assert( NULL != function );
msg_len = gm_ntohl( event->recv.length ); msg_len = gm_ntohl( event->recv.length );