Keep the fast path as short as possible.
This commit was SVN r12476.
Этот коммит содержится в:
родитель
a3be8261fb
Коммит
f3de2e1a82
@ -32,31 +32,24 @@ ompi_mtl_datatype_pack(struct ompi_convertor_t *convertor,
|
|||||||
{
|
{
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
uint32_t iov_count = 1;
|
uint32_t iov_count = 1;
|
||||||
size_t max_data;
|
|
||||||
|
|
||||||
ompi_convertor_get_packed_size(convertor, &max_data);
|
ompi_convertor_get_packed_size(convertor, buffer_len);
|
||||||
if( 0 == max_data ) {
|
*freeAfter = false;
|
||||||
*freeAfter = false;
|
if( 0 == *buffer_len ) {
|
||||||
*buffer = NULL;
|
*buffer = NULL;
|
||||||
*buffer_len = 0;
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
iov.iov_len = max_data;
|
iov.iov_len = *buffer_len;
|
||||||
|
iov.iov_base = NULL;
|
||||||
if (ompi_convertor_need_buffers(convertor)) {
|
if (ompi_convertor_need_buffers(convertor)) {
|
||||||
iov.iov_base = malloc(max_data);
|
iov.iov_base = malloc(*buffer_len);
|
||||||
if (NULL == iov.iov_base) return OMPI_ERR_OUT_OF_RESOURCE;
|
if (NULL == iov.iov_base) return OMPI_ERR_OUT_OF_RESOURCE;
|
||||||
*freeAfter = true;
|
*freeAfter = true;
|
||||||
|
|
||||||
} else {
|
|
||||||
iov.iov_base = NULL;
|
|
||||||
*freeAfter = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ompi_convertor_pack( convertor, &iov, &iov_count, &max_data );
|
ompi_convertor_pack( convertor, &iov, &iov_count, buffer_len );
|
||||||
|
|
||||||
*buffer = iov.iov_base;
|
*buffer = iov.iov_base;
|
||||||
*buffer_len = iov.iov_len;
|
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -68,28 +61,22 @@ ompi_mtl_datatype_recv_buf(struct ompi_convertor_t *convertor,
|
|||||||
size_t *buffer_len,
|
size_t *buffer_len,
|
||||||
bool *free_on_error)
|
bool *free_on_error)
|
||||||
{
|
{
|
||||||
size_t max_data;
|
|
||||||
ptrdiff_t lb;
|
ptrdiff_t lb;
|
||||||
|
|
||||||
ompi_convertor_get_packed_size(convertor, &max_data);
|
ompi_convertor_get_packed_size(convertor, buffer_len);
|
||||||
|
*free_on_error = false;
|
||||||
if( 0 == max_data ) {
|
if( 0 == *buffer_len ) {
|
||||||
*buffer = NULL;
|
*buffer = NULL;
|
||||||
*free_on_error = false;
|
|
||||||
*buffer_len = 0;
|
*buffer_len = 0;
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
if (ompi_convertor_need_buffers(convertor)) {
|
if (ompi_convertor_need_buffers(convertor)) {
|
||||||
*buffer = malloc(max_data);
|
*buffer = malloc(*buffer_len);
|
||||||
*free_on_error = true;
|
*free_on_error = true;
|
||||||
} else {
|
} else {
|
||||||
ompi_ddt_type_lb(convertor->pDesc, &lb);
|
ompi_ddt_type_lb(convertor->pDesc, &lb);
|
||||||
*buffer = convertor->pBaseBuf + lb;
|
*buffer = convertor->pBaseBuf + lb;
|
||||||
*free_on_error = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*buffer_len = max_data;
|
|
||||||
|
|
||||||
return OMPI_SUCCESS;
|
return OMPI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,14 +88,12 @@ ompi_mtl_datatype_unpack(struct ompi_convertor_t *convertor,
|
|||||||
{
|
{
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
uint32_t iov_count = 1;
|
uint32_t iov_count = 1;
|
||||||
size_t max_data;
|
|
||||||
|
|
||||||
iov.iov_len = buffer_len;
|
if (buffer_len > 0 && ompi_convertor_need_buffers(convertor)) {
|
||||||
iov.iov_base = buffer;
|
iov.iov_len = buffer_len;
|
||||||
max_data = iov.iov_len;
|
iov.iov_base = buffer;
|
||||||
|
|
||||||
if (max_data > 0 && ompi_convertor_need_buffers(convertor)) {
|
ompi_convertor_unpack(convertor, &iov, &iov_count, &buffer_len );
|
||||||
ompi_convertor_unpack(convertor, &iov, &iov_count, &max_data );
|
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user