1
1

First step toward the new datatype engine.

This commit was SVN r5994.
Этот коммит содержится в:
George Bosilca 2005-06-08 19:15:26 +00:00
родитель b615be73d4
Коммит 63b382ec6c
3 изменённых файлов: 44 добавлений и 52 удалений

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

@ -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 );
}

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

@ -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;
}

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

@ -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