1
1

Merge pull request #5175 from hoopoepg/topic/reset-stack-on-unordered

PML/UCX: reset converter stack on unordered messages
Этот коммит содержится в:
Yossi Itigin 2018-05-21 20:41:18 +03:00 коммит произвёл GitHub
родитель 22bfdb194d 5ec26914a6
Коммит 385d91bbd2
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 22 добавлений и 2 удалений

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

@ -40,6 +40,7 @@ static void* pml_ucx_generic_datatype_start_unpack(void *context, void *buffer,
OMPI_DATATYPE_RETAIN(datatype);
convertor->datatype = datatype;
convertor->offset = 0;
opal_convertor_copy_and_prepare_for_recv(ompi_proc_local_proc->super.proc_convertor,
&datatype->super, count, buffer, 0,
&convertor->opal_conv);
@ -80,13 +81,31 @@ static ucs_status_t pml_ucx_generic_datatype_unpack(void *state, size_t offset,
uint32_t iov_count;
struct iovec iov;
opal_convertor_t conv;
iov_count = 1;
iov.iov_base = (void*)src;
iov.iov_len = length;
opal_convertor_set_position(&convertor->opal_conv, &offset);
/* in case if unordered message arrived - create separate convertor to
* unpack data. */
if (offset != convertor->offset) {
OBJ_CONSTRUCT(&conv, opal_convertor_t);
opal_convertor_copy_and_prepare_for_recv(ompi_proc_local_proc->super.proc_convertor,
&convertor->datatype->super,
convertor->opal_conv.count,
convertor->opal_conv.pBaseBuf, 0,
&conv);
opal_convertor_set_position(&conv, &offset);
opal_convertor_unpack(&conv, &iov, &iov_count, &length);
opal_convertor_cleanup(&conv);
OBJ_DESTRUCT(&conv);
/* permanently switch to un-ordered mode */
convertor->offset = 0;
} else {
opal_convertor_unpack(&convertor->opal_conv, &iov, &iov_count, &length);
convertor->offset += length;
}
return UCS_OK;
}

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

@ -17,6 +17,7 @@ struct pml_ucx_convertor {
opal_free_list_item_t super;
ompi_datatype_t *datatype;
opal_convertor_t opal_conv;
size_t offset;
};