From 63b382ec6c3eceab6882c8bed431d7a35f9554f0 Mon Sep 17 00:00:00 2001 From: George Bosilca Date: Wed, 8 Jun 2005 19:15:26 +0000 Subject: [PATCH] First step toward the new datatype engine. This commit was SVN r5994. --- src/mca/ptl/self/ptl_self.c | 26 ++++++++++-------- src/mca/ptl/sm/src/ptl_sm.c | 47 ++++++++++++++------------------ src/mca/ptl/sm/src/ptl_sm_send.c | 23 +++++++--------- 3 files changed, 44 insertions(+), 52 deletions(-) diff --git a/src/mca/ptl/self/ptl_self.c b/src/mca/ptl/self/ptl_self.c index c1489d2955..54e4da23a5 100644 --- a/src/mca/ptl/self/ptl_self.c +++ b/src/mca/ptl/self/ptl_self.c @@ -188,23 +188,25 @@ void mca_ptl_self_matched( mca_ptl_base_module_t* ptl, (char *)recvreq->req_recv.req_base.req_addr, (const char *)sendreq->req_ptl.req_send.req_addr ); } else { - ompi_convertor_t *pSendConvertor, *pRecvConvertor; + ompi_convertor_t *send_convertor, *recv_convertor; struct iovec iov[1]; - int completed, freeAfter, length; - uint32_t max_data, iov_count; + int32_t completed, freeAfter, length; + uint32_t iov_count; + size_t max_data; char* buf; /* We use a temporary buffer as it look to be faster on much architectures */ length = 64 * 1024; buf = (char *)malloc( length * sizeof(char) ); - ompi_convertor_init_for_recv( &frag->frag_base.frag_convertor, - 0, - recvreq->req_recv.req_base.req_datatype, - recvreq->req_recv.req_base.req_count, - recvreq->req_recv.req_base.req_addr, 0, NULL ); - pSendConvertor = &(sendreq->req_ptl.req_send.req_convertor); - pRecvConvertor = &(frag->frag_base.frag_convertor); + recv_convertor = &(frag->frag_base.frag_convertor); + send_convertor = &(sendreq->req_ptl.req_send.req_convertor); + ompi_convertor_copy_and_prepare_for_recv( send_convertor, + recvreq->req_recv.req_base.req_datatype, + recvreq->req_recv.req_base.req_count, + recvreq->req_recv.req_base.req_addr, + recv_convertor ); + completed = 0; freeAfter = 0; while( !completed ) { @@ -212,10 +214,10 @@ void mca_ptl_self_matched( mca_ptl_base_module_t* ptl, iov[0].iov_len = length; iov_count = 1; max_data = length; - completed |= ompi_convertor_pack( pSendConvertor, iov, &iov_count, + completed |= ompi_convertor_pack( send_convertor, iov, &iov_count, &max_data, &freeAfter ); assert( freeAfter == 0 ); - completed |= ompi_convertor_unpack( pRecvConvertor, iov, &iov_count, + completed |= ompi_convertor_unpack( recv_convertor, iov, &iov_count, &max_data, &freeAfter ); assert( freeAfter == 0 ); } diff --git a/src/mca/ptl/sm/src/ptl_sm.c b/src/mca/ptl/sm/src/ptl_sm.c index 7015d5c409..c5c592c3c9 100644 --- a/src/mca/ptl/sm/src/ptl_sm.c +++ b/src/mca/ptl/sm/src/ptl_sm.c @@ -790,27 +790,23 @@ int mca_ptl_sm_send( /* if needed, pack data in payload buffer */ if( 0 < size ) { ompi_convertor_t *convertor; - unsigned int iov_count, max_data; - int free_after=0; + uint32_t iov_count; + size_t max_data; + int32_t free_after = 0; struct iovec address; convertor = &sendreq->req_send.req_convertor; - ompi_convertor_init_for_send( convertor, 0, - sendreq->req_send.req_datatype, - sendreq->req_send.req_count, - sendreq->req_send.req_addr, - offset, NULL); - sm_data_ptr=sm_request->req_frag->buff; + sm_data_ptr = sm_request->req_frag->buff; /* set up the shared memory iovec */ - address.iov_base=sm_data_ptr; - address.iov_len= (size < send_frag->buff_length) ? size : send_frag->buff_length; + address.iov_base = sm_data_ptr; + address.iov_len = (size < send_frag->buff_length) ? size : send_frag->buff_length; - iov_count=1; - max_data=address.iov_len; - return_status=ompi_convertor_pack(convertor,&address,&iov_count, - &max_data, &free_after); + iov_count = 1; + max_data = address.iov_len; + return_status = ompi_convertor_pack( convertor,&address,&iov_count, + &max_data, &free_after ); if( 0 > return_status ) { return OMPI_ERROR; } @@ -913,7 +909,8 @@ int mca_ptl_sm_send_continue( mca_ptl_sm_second_frag_t *send_frag; ompi_convertor_t *convertor; struct iovec address; - unsigned int max_data,iov_count; + uint32_t iov_count; + size_t max_data; /* cast to shared memory send descriptor */ sm_request=(mca_ptl_sm_send_request_t *)sendreq; @@ -930,21 +927,17 @@ int mca_ptl_sm_send_continue( /* pack data in payload buffer */ convertor = &sendreq->req_send.req_convertor; - ompi_convertor_init_for_send( convertor, 0, - sendreq->req_send.req_datatype, - sendreq->req_send.req_count, - sendreq->req_send.req_addr, - offset, NULL); - sm_data_ptr=send_frag->buff; + ompi_convertor_prepare_for_send( convertor, 0, offset, NULL ); + sm_data_ptr = send_frag->buff; /* set up the shared memory iovec */ - address.iov_base=sm_data_ptr; - address.iov_len=(size < send_frag->buff_length) ? size : send_frag->buff_length; + address.iov_base = sm_data_ptr; + address.iov_len = (size < send_frag->buff_length) ? size : send_frag->buff_length; - iov_count=1; - max_data=address.iov_len; - return_status=ompi_convertor_pack(convertor,&address,&iov_count, - &max_data, &free_after); + iov_count = 1; + max_data = address.iov_len; + return_status = ompi_convertor_pack( convertor,&address,&iov_count, + &max_data, &free_after ); if( 0 > return_status ) { return OMPI_ERROR; } diff --git a/src/mca/ptl/sm/src/ptl_sm_send.c b/src/mca/ptl/sm/src/ptl_sm_send.c index 31bb86058a..30b5d5437e 100644 --- a/src/mca/ptl/sm/src/ptl_sm_send.c +++ b/src/mca/ptl/sm/src/ptl_sm_send.c @@ -42,7 +42,7 @@ #include "class/ompi_fifo.h" #include "class/ompi_free_list.h" #include "threads/mutex.h" -#include "datatype/datatype.h" +#include "datatype/convertor.h" /* @@ -73,7 +73,8 @@ void mca_ptl_sm_matched( ompi_convertor_t frag_convertor; ompi_proc_t *proc; int free_after,my_local_smp_rank,peer_local_smp_rank, return_status; - unsigned int iov_count, max_data; + uint32_t iov_count; + size_t max_data; ompi_fifo_t *send_fifo; /* copy data from shared memory buffer to user buffer */ @@ -95,17 +96,13 @@ void mca_ptl_sm_matched( proc = ompi_comm_peer_lookup(recv_desc->req_recv.req_base.req_comm, frag->frag_base.frag_header.hdr_match.hdr_src); /* write over converter set on the send side */ - ompi_convertor_copy(proc->proc_convertor, - &frag_convertor); - ompi_convertor_init_for_recv( - &frag_convertor, /* convertor */ - 0, /* flags */ - recv_desc->req_recv.req_base.req_datatype, /* datatype */ - recv_desc->req_recv.req_base.req_count, /* count elements */ - recv_desc->req_recv.req_base.req_addr, /* users buffer */ - sm_frag_desc->send_offset, /* offset in bytes into packed buffer */ - NULL ); /* dont allocate memory */ - + ompi_convertor_copy_and_prepare_for_recv( + proc->proc_convertor, + recv_desc->req_recv.req_base.req_datatype, /* datatype */ + recv_desc->req_recv.req_base.req_count, /* count elements */ + recv_desc->req_recv.req_base.req_addr, /* users buffer */ + &frag_convertor ); + ompi_convertor_set_position( &frag_convertor, &(sm_frag_desc->send_offset) ); /* convert address from sender's address space to my virtual * address space */ #ifdef SM_COMMON_BASE_ADDR