Skip to content
Snippets Groups Projects
Commit 87dae579 authored by Thomas Jahns's avatar Thomas Jahns :cartwheel:
Browse files

Add capability to download and patch OpenMPI sources for complex work-around.

parent 58fe5670
No related branches found
No related tags found
No related merge requests found
......@@ -68,6 +68,8 @@ EXTRA_DIST = util/sunf95preproc-wrapper \
config/checksrc/mpich_3.4_yaksa_hindexed.c \
config/checkdoc/mpich_3.4_yaksa_hindexed.txt \
config/checkpatch/mpich_3.4_yaksa_hindexed.patch \
config/checkpatch/openmpi_datatype.opal_datatype_add.c.patch \
config/checkpatch/openmpi_datatype.opal_datatype_optimize.c.patch \
config/checksrc/mpich_unweighted_topo_comm_dup.c \
config/checkdoc/mpich_unweighted_topo_comm_dup.txt \
config/checkpatch/mpich_3.x_unweighted.patch \
......
--- a/opal/datatype/opal_datatype_add.c 2022-05-27 00:56:50.100156032 +0200
+++ b/opal/datatype/opal_datatype_add.c 2020-02-24 09:28:54.006709568 +0100
@@ -3,7 +3,7 @@
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
- * Copyright (c) 2004-2016 The University of Tennessee and The University
+ * Copyright (c) 2004-2009 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2006 High Performance Computing Center Stuttgart,
@@ -278,14 +278,27 @@
*/
if( (pdtAdd->flags & (OPAL_DATATYPE_FLAG_PREDEFINED | OPAL_DATATYPE_FLAG_DATA)) == (OPAL_DATATYPE_FLAG_PREDEFINED | OPAL_DATATYPE_FLAG_DATA) ) {
pdtBase->btypes[pdtAdd->id] += count;
- pLast->elem.common.type = pdtAdd->id;
- pLast->elem.count = count;
- pLast->elem.disp = disp;
- pLast->elem.extent = extent;
- pdtBase->desc.used++;
- pLast->elem.common.flags = pdtAdd->flags & ~(OPAL_DATATYPE_FLAG_COMMITTED);
if( (extent != (OPAL_PTRDIFF_TYPE)pdtAdd->size) && (count > 1) ) { /* gaps around the datatype */
- pLast->elem.common.flags &= ~(OPAL_DATATYPE_FLAG_CONTIGUOUS | OPAL_DATATYPE_FLAG_NO_GAPS);
+ localFlags = pdtAdd->flags & ~(OPAL_DATATYPE_FLAG_COMMITTED | OPAL_DATATYPE_FLAG_CONTIGUOUS | OPAL_DATATYPE_FLAG_NO_GAPS);
+ CREATE_LOOP_START( pLast, count, 2, extent, localFlags );
+ pLast++;
+ pLast->elem.common.type = pdtAdd->id;
+ pLast->elem.count = 1;
+ pLast->elem.disp = disp;
+ pLast->elem.extent = pdtAdd->size;
+ pLast->elem.common.flags = localFlags | OPAL_DATATYPE_FLAG_CONTIGUOUS;
+ pLast++;
+ CREATE_LOOP_END( pLast, 2, disp, pdtAdd->size, localFlags );
+ pdtBase->desc.used += 3;
+ pdtBase->btypes[OPAL_DATATYPE_LOOP] = 1;
+ pdtBase->btypes[OPAL_DATATYPE_END_LOOP] = 1;
+ } else {
+ pLast->elem.common.type = pdtAdd->id;
+ pLast->elem.count = count;
+ pLast->elem.disp = disp;
+ pLast->elem.extent = extent;
+ pdtBase->desc.used++;
+ pLast->elem.common.flags = pdtAdd->flags & ~(OPAL_DATATYPE_FLAG_COMMITTED);
}
} else {
/* keep trace of the total number of basic datatypes in the datatype definition */
diff --git a/opal/datatype/opal_datatype_optimize.c b/opal/datatype/opal_datatype_optimize.c
index 882e3a8..2ab02db 100644
--- a/opal/datatype/opal_datatype_optimize.c
+++ b/opal/datatype/opal_datatype_optimize.c
@@ -210,7 +210,8 @@ opal_datatype_optimize_short( opal_datatype_t* pData,
continuity = ((last_disp + (ptrdiff_t)last_length * (ptrdiff_t)opal_datatype_basicDatatypes[last_type]->size)
== (total_disp + pData->desc.desc[pos_desc].elem.disp));
- if( (pData->desc.desc[pos_desc].elem.common.flags & OPAL_DATATYPE_FLAG_CONTIGUOUS) && continuity &&
+ if( ((pData->desc.desc[pos_desc].elem.common.flags & OPAL_DATATYPE_FLAG_CONTIGUOUS) && continuity) &&
+ ((0 == last_length) || (last_extent == (int32_t)opal_datatype_basicDatatypes[last_type]->size)) &&
(pData->desc.desc[pos_desc].elem.extent == (int32_t)opal_datatype_basicDatatypes[type]->size) ) {
if( type == last_type ) {
last_length += pData->desc.desc[pos_desc].elem.count;
......@@ -141,19 +141,48 @@ s/^ *//;s/ *$//'`])
dnl corresponding to Open MPI version
AS_CASE([$OMPI_MAJOR_VERSION],
[2],
[acx_opal_datatype_add_workaround="$ac_pwd/m4_default([$5],[config/workarounds/openmpi])/v$acx_ompi_version/opal_datatype_add.c"],
[acx_opal_datatype_add_workaround=opal_datatype_add.c],
[3|4],
[acx_opal_datatype_add_workaround="$ac_pwd/m4_default([$5],[config/workarounds/openmpi])/v$acx_ompi_version/opal_datatype_optimize.c"])
test -r "$acx_opal_datatype_add_workaround" || \
acx_opal_datatype_add_workaround=`echo "$acx_opal_datatype_add_workaround"\
| sed -e 's@^'"$ac_pwd"'@'"$srcdir"'@'`
cp "$acx_opal_datatype_add_workaround" conftest.c \
|| { is_affected_ompi=false ; break ; }
[acx_opal_datatype_add_workaround=opal_datatype_optimize.c])
acx_temp="m4_default([$5],[config/workarounds/openmpi])/v$acx_ompi_version"
AS_IF([test -r "$ac_pwd/$acx_temp/$acx_opal_datatype_add_workaround"],
[acx_opal_datatype_add_workaround="$ac_pwd/$acx_temp/$acx_opal_datatype_add_workaround"
cp "$acx_opal_datatype_add_workaround" conftest.c \
|| { is_affected_ompi=false ; break ; }],
[test -r "$srcdir/$acx_temp/$acx_opal_datatype_add_workaround"],
[acx_opal_datatype_add_workaround="$srcdir/$acx_temp/$acx_opal_datatype_add_workaround"
cp "$acx_opal_datatype_add_workaround" conftest.c \
|| { is_affected_ompi=false ; break ; }],
[dnl patched source not availabe, download and patch
AC_CHECK_PROGS([DL_CMD], [wget curl],[/bin/false])
AS_CASE([`$DL_CMD --version`],
[*curl\ *],
[DL_CMD="$DL_CMD -O -C -"],
[*GNU\ Wget*],
[DL_CMD="$DL_CMD -q -c"],
[is_affected_ompi=false ; break])
{ $MKDIR_P "$ac_pwd/$acx_temp/stage" && \
cd "$ac_pwd/$acx_temp/stage" && \
$DL_CMD \
"https://raw.githubusercontent.com/open-mpi/ompi/v$acx_ompi_version/opal/datatype/$acx_opal_datatype_add_workaround" && \
cd "$ac_pwd" && \
patch -p3 -d "$acx_temp/stage" -o "$ac_pwd/conftest.c" \
<"$srcdir/config/checkpatch/openmpi_datatype.$acx_opal_datatype_add_workaround.patch" ; } \
|| { cd "$ac_pwd" ; is_affected_ompi=false ; break ; }
acx_opal_datatype_add_workaround="$ac_pwd/$acx_temp/stage/$acx_opal_datatype_add_workaround"])
as_dir=src as_fn_mkdir_p
AC_COMPILE_IFELSE(,
[ACX_MV_OBJ([conftest],[ompi_workaround])],
[ACX_MV_OBJ([conftest],[ompi_workaround])
AS_CASE([$acx_opal_datatype_add_workaround],
["$ac_pwd/$acx_temp/stage/"*],
[acx_temp=`echo "$acx_opal_datatype_add_workaround" | sed -e 's/\/stage\(\/@<:@^/@:>@*\)$/\\1/'`
mv conftest.c "$acx_temp"
acx_opal_datatype_add_workaround=$acx_temp])],
[is_affected_ompi=false
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
AS_CASE([$acx_opal_datatype_add_workaround],
["$acx_temp/stage"*],
[rm -f "$acx_opal_datatype_add_workaround"])
break])
dnl 4. verify listed tests now succeed
CPPFLAGS=$acx_saved_CPPFLAGS
......
......@@ -11,6 +11,8 @@
^config/checkdoc/.*\.txt$
^config/checkpatch/mpich_3.4_yaksa_hindexed.patch$
^config/checkpatch/mpich_3.x_unweighted.patch$
^config/checkpatch/openmpi_datatype.opal_datatype_add.c.patch$
^config/checkpatch/openmpi_datatype.opal_datatype_optimize.c.patch$
^config/checksrc/mpich_3.4_yaksa_hindexed.c$
^config/checksrc/pe5228_iv32584.c$
^contrib/00nagfor-libtool-patch/nagfor-libtool.*\.patch$
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment