This commit fixes trac:4662 - "Portals4/MTL hangs in c_get_accumulate test".
- Portals4/OSC was unable to acquire an exclusive lock due to an invalid local address in the atomic operation. This caused the reported hang. - After fixing the hang, the test continued to fail because ompi_datatype_is_contiguous_memory_layout() reports that MPI_EMPTY (the origin datatype) is noncontiguous and Portals4/OSC does not support noncontiguous datatypes at this time. However, in this case the origin count is zero so contiguous/noncontiguous is irrelevant. Now we skip the contiguous check if the count is zero. cmr=v1.8.3:reviewer=regrant:subject=Fix for "Portals4/MTL hangs in c_get_accumulate test" This commit was SVN r32295. The following Trac tickets were found above: Ticket 4662 --> https://svn.open-mpi.org/trac/ompi/ticket/4662
Этот коммит содержится в:
родитель
d4f83ab929
Коммит
42a871efd4
@ -845,9 +845,10 @@ ompi_osc_portals4_get_accumulate(void *origin_addr,
|
||||
|
||||
offset = get_displacement(module, target) * target_disp;
|
||||
|
||||
if (!ompi_datatype_is_contiguous_memory_layout(origin_dt, origin_count) ||
|
||||
!ompi_datatype_is_contiguous_memory_layout(result_dt, result_count) ||
|
||||
!ompi_datatype_is_contiguous_memory_layout(target_dt, target_count)) {
|
||||
/* we don't support non-contiguous buffers. but if the count is 0, we don't care if buffer is non-contiguous. */
|
||||
if ((origin_count > 0 && !ompi_datatype_is_contiguous_memory_layout(origin_dt, origin_count)) ||
|
||||
(result_count > 0 && !ompi_datatype_is_contiguous_memory_layout(result_dt, result_count)) ||
|
||||
(target_count > 0 && !ompi_datatype_is_contiguous_memory_layout(target_dt, target_count))) {
|
||||
opal_output(ompi_osc_base_framework.framework_output,
|
||||
"MPI_Get_accumulate: transfer of non-contiguous memory is not currently supported.\n");
|
||||
return OMPI_ERR_NOT_SUPPORTED;
|
||||
|
@ -52,7 +52,7 @@ lk_cas64(ompi_osc_portals4_module_t *module,
|
||||
ret = PtlSwap(result_md_h,
|
||||
(char*) result_val - (char*) result_base,
|
||||
write_md_h,
|
||||
(char*) write_val - (char*) write_base,
|
||||
(char*) &write_val - (char*) write_base,
|
||||
sizeof(int64_t),
|
||||
ompi_osc_portals4_get_peer(module, target),
|
||||
module->pt_idx,
|
||||
@ -122,7 +122,7 @@ lk_add64(ompi_osc_portals4_module_t *module,
|
||||
ompi_osc_portals4_get_md(&write_val, module->md_h, &write_md_h, &write_base);
|
||||
|
||||
ret = PtlFetchAtomic(result_md_h,
|
||||
(char*) &result_val - (char*) result_base,
|
||||
(char*) result_val - (char*) result_base,
|
||||
write_md_h,
|
||||
(char*) &write_val - (char*) write_base,
|
||||
sizeof(int64_t),
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user