diff --git a/pkgs/mpich-fix-hwtopo.patch b/pkgs/mpich-fix-hwtopo.patch new file mode 100644 index 0000000..11146d5 --- /dev/null +++ b/pkgs/mpich-fix-hwtopo.patch @@ -0,0 +1,36 @@ +diff --git a/src/util/mpir_hwtopo.c b/src/util/mpir_hwtopo.c +index 33e88bc..ee3641c 100644 +--- a/src/util/mpir_hwtopo.c ++++ b/src/util/mpir_hwtopo.c +@@ -200,18 +200,6 @@ int MPII_hwtopo_init(void) + #ifdef HAVE_HWLOC + bindset = hwloc_bitmap_alloc(); + hwloc_topology_init(&hwloc_topology); +- char *xmlfile = MPIR_pmi_get_jobattr("PMI_hwloc_xmlfile"); +- if (xmlfile != NULL) { +- int rc; +- rc = hwloc_topology_set_xml(hwloc_topology, xmlfile); +- if (rc == 0) { +- /* To have hwloc still actually call OS-specific hooks, the +- * HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded +- * file is really the underlying system. */ +- hwloc_topology_set_flags(hwloc_topology, HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM); +- } +- MPL_free(xmlfile); +- } + + hwloc_topology_set_io_types_filter(hwloc_topology, HWLOC_TYPE_FILTER_KEEP_ALL); + if (!hwloc_topology_load(hwloc_topology)) + +--- a/src/mpi/init/local_proc_attrs.c ++++ b/src/mpi/init/local_proc_attrs.c +@@ -79,10 +79,6 @@ int MPII_init_local_proc_attrs(int *p_thread_required) + /* Set the number of tag bits. The device may override this value. */ + MPIR_Process.tag_bits = MPIR_TAG_BITS_DEFAULT; + +- char *requested_kinds = MPIR_pmi_get_jobattr("PMI_mpi_memory_alloc_kinds"); +- MPIR_get_supported_memory_kinds(requested_kinds, &MPIR_Process.memory_alloc_kinds); +- MPL_free(requested_kinds); +- + return mpi_errno; + } diff --git a/pkgs/overlay.nix b/pkgs/overlay.nix index e354fd8..a36961b 100644 --- a/pkgs/overlay.nix +++ b/pkgs/overlay.nix @@ -11,6 +11,10 @@ final: prev: paths = [ pmix.dev pmix.out ]; }; in prev.mpich.overrideAttrs (old: { + patches = [ + # See https://github.com/pmodels/mpich/issues/6946 + ./mpich-fix-hwtopo.patch + ]; buildInput = old.buildInputs ++ [ libfabric pmixAll