commits
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
January 2014
- 1 participants
- 49 discussions
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-191-g058c8bf
by noreply@mpich.org 29 Jan '14
by noreply@mpich.org 29 Jan '14
29 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 058c8bf0faa313029f396459adde878786f1c41f (commit)
from a6652e0fd719a7ecb6fbe0b593b20d6e493f8368 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/058c8bf0faa313029f396459adde87878…
commit 058c8bf0faa313029f396459adde878786f1c41f
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Wed Jan 29 12:48:41 2014 -0600
Move communicator destruction to after progress checks.
During finalize, we were destroying the COMM_WORLD, COMM_SELF and
COMM_IWORLD communicator objects, and all other associated resources
internally, before waiting for the final progress checks for incoming
messages finished. This resulted in the following sequence of cleanup:
1. COMM_WORLD got cleaned up. Internally, there is a check to see if
a group object has been allocated for COMM_WORLD. If there is one, it
is freed up.
2. We waited for other messages to arrive. We noticed a failure at
this time, so we try to create a failed process group. This uses the
COMM_WORLD group internally, causing it to be created again, but with
a reference count of 2, since the code assumes that the first
reference count is always for the original COMM_WORLD.
3. When we try to free the world group, we notice that the reference
count is 2, so we decrement the reference count and not actually free
the object.
Moving the check for incoming messages to happen before the
communicator free fixes this problem.
See #1996
Signed-off-by: Wesley Bland <wbland(a)mcs.anl.gov>
diff --git a/src/mpid/ch3/src/mpid_finalize.c b/src/mpid/ch3/src/mpid_finalize.c
index 1a1ad98..a959339 100644
--- a/src/mpid/ch3/src/mpid_finalize.c
+++ b/src/mpid/ch3/src/mpid_finalize.c
@@ -93,17 +93,6 @@ int MPID_Finalize(void)
* cancel it, in which case an error shouldn't be generated.
*/
-#ifdef MPID_NEEDS_ICOMM_WORLD
- mpi_errno = MPIR_Comm_release_always(MPIR_Process.icomm_world, 0);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-#endif
-
- mpi_errno = MPIR_Comm_release_always(MPIR_Process.comm_self, 0);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
- mpi_errno = MPIR_Comm_release_always(MPIR_Process.comm_world, 0);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-
/* Re-enabling the close step because many tests are failing
* without it, particularly under gforker */
#if 1
@@ -130,6 +119,17 @@ int MPID_Finalize(void)
mpi_errno = MPIDI_PG_Finalize();
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
+#ifdef MPID_NEEDS_ICOMM_WORLD
+ mpi_errno = MPIR_Comm_release_always(MPIR_Process.icomm_world, 0);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+#endif
+
+ mpi_errno = MPIR_Comm_release_always(MPIR_Process.comm_self, 0);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+
+ mpi_errno = MPIR_Comm_release_always(MPIR_Process.comm_world, 0);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+
#ifndef MPIDI_CH3_HAS_NO_DYNAMIC_PROCESS
MPIDI_CH3_FreeParentPort();
#endif
-----------------------------------------------------------------------
Summary of changes:
src/mpid/ch3/src/mpid_finalize.c | 22 +++++++++++-----------
1 files changed, 11 insertions(+), 11 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-190-ga6652e0
by noreply@mpich.org 29 Jan '14
by noreply@mpich.org 29 Jan '14
29 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via a6652e0fd719a7ecb6fbe0b593b20d6e493f8368 (commit)
from 3457b353765078d5a37be8b043811fc7e547bcd6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/a6652e0fd719a7ecb6fbe0b593b20d6e4…
commit a6652e0fd719a7ecb6fbe0b593b20d6e493f8368
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Wed Jan 29 11:13:29 2014 -0600
mark cas_type_check test as xfail
No reviewer.
diff --git a/test/mpi/errors/rma/testlist b/test/mpi/errors/rma/testlist
index 772e11c..07a59ca 100644
--- a/test/mpi/errors/rma/testlist
+++ b/test/mpi/errors/rma/testlist
@@ -1,6 +1,6 @@
winerr 2
winerr2 2
-cas_type_check 2 mpiversion=3.0
+cas_type_check 2 mpiversion=3.0 xfail=ticket1906
win_sync_unlock 2
win_sync_free_pt 2
win_sync_free_at 2
-----------------------------------------------------------------------
Summary of changes:
test/mpi/errors/rma/testlist | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-189-g3457b35
by noreply@mpich.org 27 Jan '14
by noreply@mpich.org 27 Jan '14
27 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 3457b353765078d5a37be8b043811fc7e547bcd6 (commit)
via 774b7c814855a8766c0e9980b94199ab3bf4f796 (commit)
from 201b0dbfbcad7b1399eb64df6c0db3eb909ad787 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/3457b353765078d5a37be8b043811fc7e…
commit 3457b353765078d5a37be8b043811fc7e547bcd6
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Mon Jan 27 14:00:42 2014 -0600
add manual test for process affinity
Add a number of synthetic topologies and reference binding bitmaps to
the implementation specific tests directory. Running the proc_binding.sh
script will show any errors in hydra's binding logic.
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/test/mpi/.gitignore b/test/mpi/.gitignore
index 4a81675..64552b0 100644
--- a/test/mpi/.gitignore
+++ b/test/mpi/.gitignore
@@ -1004,5 +1004,7 @@
/topo/graphcr
/topo/graphcr2
/topo/neighb_coll
+/impls/hydra/dummy
+/impls/hydra/proc_binding.sh
/impls/mpich/testlist
/impls/testlist
diff --git a/test/mpi/configure.ac b/test/mpi/configure.ac
index abb2c28..ea519d1 100644
--- a/test/mpi/configure.ac
+++ b/test/mpi/configure.ac
@@ -1443,6 +1443,7 @@ fi
AC_OUTPUT_COMMANDS([chmod a+x maint/testmerge])
AC_OUTPUT_COMMANDS([chmod a+x runtests checktests])
AC_OUTPUT_COMMANDS([chmod a+x manual/manyconnect])
+AC_OUTPUT_COMMANDS([chmod a+x impls/hydra/proc_binding.sh])
dnl Note that this format for AC_OUTPUT can cause problems for autoconf
dnl run under cygwin
AC_OUTPUT(maint/testmerge \
@@ -1575,6 +1576,8 @@ AC_OUTPUT(maint/testmerge \
errors/f90/testlist \
impls/testlist \
impls/Makefile \
+ impls/hydra/Makefile \
+ impls/hydra/proc_binding.sh \
impls/mpich/Makefile \
impls/mpich/testlist \
impls/mpich/mpi_t/Makefile \
diff --git a/test/mpi/impls/Makefile.am b/test/mpi/impls/Makefile.am
index fbe2c38..f74f9fc 100644
--- a/test/mpi/impls/Makefile.am
+++ b/test/mpi/impls/Makefile.am
@@ -11,4 +11,4 @@ EXTRA_DIST = testlist.in
static_subdirs =
SUBDIRS = $(static_subdirs) $(impldir)
-DIST_SUBDIRS = $(static_subdirs) mpich
+DIST_SUBDIRS = $(static_subdirs) mpich hydra
diff --git a/test/mpi/impls/hydra/Makefile.am b/test/mpi/impls/hydra/Makefile.am
new file mode 100644
index 0000000..6d3ff4d
--- /dev/null
+++ b/test/mpi/impls/hydra/Makefile.am
@@ -0,0 +1,13 @@
+# -*- Mode: Makefile; -*-
+# vim: set ft=automake :
+#
+# (C) 2011 by Argonne National Laboratory.
+# See COPYRIGHT in top-level directory.
+#
+
+testing: dummy
+ $(builddir)/proc_binding.sh
+
+noinst_PROGRAMS = dummy
+
+CLEANFILES = actual.*
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:2.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:4.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out
new file mode 100644
index 0000000..f235420
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 1 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 1 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 1 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 1 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:8.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.board.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:2.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread.out
new file mode 100644
index 0000000..4f28c56
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 1 1 1 1 0 0
+process 4 binding: 0 0 0 0 1 1 1 1
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 1 1 1 1 0 0
+process 12 binding: 0 0 0 0 1 1 1 1
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:2.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:8.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.numa.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.socket.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:2.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:4.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:2.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:4.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:8.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.board.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:2.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:4.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread.out
new file mode 100644
index 0000000..dca323c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:8.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.numa.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.socket.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.board.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:2.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread.out
new file mode 100644
index 0000000..bbf9f7f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:2.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:8.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.numa.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.socket.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:2.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:4.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:2.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:4.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:8.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out
new file mode 100644
index 0000000..6a170f2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out
new file mode 100644
index 0000000..4fcd88e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out
new file mode 100644
index 0000000..4fcd88e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:2.out
new file mode 100644
index 0000000..15bd9ef
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:4.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out
new file mode 100644
index 0000000..9d46f9e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:2.out
new file mode 100644
index 0000000..4fcd88e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:4.out
new file mode 100644
index 0000000..15bd9ef
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:8.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.board.out
new file mode 100644
index 0000000..0feba67
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core.out
new file mode 100644
index 0000000..1897bb9
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:2.out
new file mode 100644
index 0000000..0feba67
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:4.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread.out
new file mode 100644
index 0000000..cf8fb69
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 2 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 3 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 4 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 7 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 8 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 11 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 12 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 13 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 14 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:2.out
new file mode 100644
index 0000000..1897bb9
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:4.out
new file mode 100644
index 0000000..0feba67
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:8.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.numa.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.socket.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.board.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core.out
new file mode 100644
index 0000000..b4a0141
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:2.out
new file mode 100644
index 0000000..e9efd88
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:4.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread.out
new file mode 100644
index 0000000..7b2c5aa
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 3 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 4 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 7 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 11 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 12 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 13 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 14 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:2.out
new file mode 100644
index 0000000..b4a0141
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:4.out
new file mode 100644
index 0000000..e9efd88
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:8.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.numa.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.socket.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out
new file mode 100644
index 0000000..ed56af8
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out
new file mode 100644
index 0000000..69996c1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 8 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:2.out
new file mode 100644
index 0000000..32e9bd0
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 4 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 8 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 12 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:4.out
new file mode 100644
index 0000000..7d2e6e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out
new file mode 100644
index 0000000..ed56af8
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:2.out
new file mode 100644
index 0000000..69996c1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 8 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:4.out
new file mode 100644
index 0000000..32e9bd0
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 4 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 8 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 12 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:8.out
new file mode 100644
index 0000000..7d2e6e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out
new file mode 100644
index 0000000..7d2e6e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out
new file mode 100644
index 0000000..7d2e6e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+process 2 binding: 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
+process 6 binding: 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
+process 8 binding: 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
+process 10 binding: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
+process 14 binding: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.board.out
new file mode 100644
index 0000000..4fcd88e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core.out
new file mode 100644
index 0000000..4fcd88e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:2.out
new file mode 100644
index 0000000..15bd9ef
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:4.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread.out
new file mode 100644
index 0000000..baebe8d
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
+process 8 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 9 binding: 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 13 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 15 binding: 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:2.out
new file mode 100644
index 0000000..4fcd88e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:4.out
new file mode 100644
index 0000000..15bd9ef
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:8.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.numa.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.socket.out
new file mode 100644
index 0000000..349c36c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.board.out
new file mode 100644
index 0000000..0feba67
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core.out
new file mode 100644
index 0000000..1897bb9
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:2.out
new file mode 100644
index 0000000..0feba67
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:4.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread.out
new file mode 100644
index 0000000..5078c16
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 2 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 3 binding: 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0
+process 4 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 5 binding: 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 7 binding: 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0
+process 8 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 9 binding: 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0
+process 12 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 13 binding: 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1
+process 14 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 15 binding: 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:2.out
new file mode 100644
index 0000000..1897bb9
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:4.out
new file mode 100644
index 0000000..0feba67
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:8.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.numa.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.socket.out
new file mode 100644
index 0000000..4bb862b
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.board.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core.out
new file mode 100644
index 0000000..b4a0141
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:2.out
new file mode 100644
index 0000000..e9efd88
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:4.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread.out
new file mode 100644
index 0000000..0d50a3a
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 3 binding: 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0
+process 4 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 5 binding: 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0
+process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 9 binding: 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1
+process 12 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 13 binding: 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1 1
+process 14 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 15 binding: 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:2.out
new file mode 100644
index 0000000..b4a0141
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:4.out
new file mode 100644
index 0000000..e9efd88
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:8.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.numa.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.socket.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out
new file mode 100644
index 0000000..1c74e8f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:2.out
new file mode 100644
index 0000000..8529a43
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:4.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out
new file mode 100644
index 0000000..e8714ef
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:2.out
new file mode 100644
index 0000000..1c74e8f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:4.out
new file mode 100644
index 0000000..8529a43
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:8.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out
new file mode 100644
index 0000000..1c74e8f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:2.out
new file mode 100644
index 0000000..8529a43
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:4.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out
new file mode 100644
index 0000000..e8714ef
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 8 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:2.out
new file mode 100644
index 0000000..1c74e8f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:4.out
new file mode 100644
index 0000000..8529a43
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:8.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out
new file mode 100644
index 0000000..5ecae3c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:2.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:4.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:2.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:4.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:8.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.board.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core.out
new file mode 100644
index 0000000..dca323c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread.out
new file mode 100644
index 0000000..dca323c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:8.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.numa.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.socket.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.board.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core.out
new file mode 100644
index 0000000..bbf9f7f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:2.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread.out
new file mode 100644
index 0000000..bbf9f7f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:2.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:8.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.numa.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.socket.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:2.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:4.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:2.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:4.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:8.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.board.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core.out
new file mode 100644
index 0000000..dca323c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread.out
new file mode 100644
index 0000000..dca323c
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 1 1 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 1 1 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 0 1 1 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 1 1 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 1 1 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 0 1 1 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:8.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.numa.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.socket.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.board.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core.out
new file mode 100644
index 0000000..bbf9f7f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:2.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread.out
new file mode 100644
index 0000000..bbf9f7f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 1 1 1 1 0 0 0
+process 2 binding: 0 0 1 1 1 1 0 0
+process 3 binding: 0 0 0 1 1 1 1 0
+process 4 binding: 0 0 0 0 1 1 1 1
+process 5 binding: 1 0 0 0 0 1 1 1
+process 6 binding: 1 1 0 0 0 0 1 1
+process 7 binding: 1 1 1 0 0 0 0 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 1 1 1 1 0 0 0
+process 10 binding: 0 0 1 1 1 1 0 0
+process 11 binding: 0 0 0 1 1 1 1 0
+process 12 binding: 0 0 0 0 1 1 1 1
+process 13 binding: 1 0 0 0 0 1 1 1
+process 14 binding: 1 1 0 0 0 0 1 1
+process 15 binding: 1 1 1 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:2.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:4.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:8.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.numa.out
new file mode 100644
index 0000000..222e431
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 1 1
+process 2 binding: 1 1 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 1 1 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 1 1
+process 6 binding: 1 1 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 1 1 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 1 1
+process 10 binding: 1 1 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 1 1 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 1 1
+process 14 binding: 1 1 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.socket.out
new file mode 100644
index 0000000..791332f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 0 0 0 0
+process 1 binding: 0 0 1 1 1 1 0 0
+process 2 binding: 0 0 0 0 1 1 1 1
+process 3 binding: 1 1 0 0 0 0 1 1
+process 4 binding: 1 1 1 1 0 0 0 0
+process 5 binding: 0 0 1 1 1 1 0 0
+process 6 binding: 0 0 0 0 1 1 1 1
+process 7 binding: 1 1 0 0 0 0 1 1
+process 8 binding: 1 1 1 1 0 0 0 0
+process 9 binding: 0 0 1 1 1 1 0 0
+process 10 binding: 0 0 0 0 1 1 1 1
+process 11 binding: 1 1 0 0 0 0 1 1
+process 12 binding: 1 1 1 1 0 0 0 0
+process 13 binding: 0 0 1 1 1 1 0 0
+process 14 binding: 0 0 0 0 1 1 1 1
+process 15 binding: 1 1 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out
new file mode 100644
index 0000000..f235420
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 1 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 1 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 1 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 1 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out
new file mode 100644
index 0000000..f235420
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 1 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 1 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 1 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 1
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 1 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 1 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 1 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 1
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:2.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:4.out
new file mode 100644
index 0000000..1e3810e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 1 0 0
+process 2 binding: 0 0 1 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 1 0 0
+process 6 binding: 0 0 1 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 1 0 0
+process 10 binding: 0 0 1 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 1 0 0
+process 14 binding: 0 0 1 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:8.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out
new file mode 100644
index 0000000..f5876e1
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 0 0 0 0 0 0
+process 1 binding: 0 0 1 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 1 0 0
+process 3 binding: 0 0 0 0 0 0 1 1
+process 4 binding: 1 1 0 0 0 0 0 0
+process 5 binding: 0 0 1 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 1 0 0
+process 7 binding: 0 0 0 0 0 0 1 1
+process 8 binding: 1 1 0 0 0 0 0 0
+process 9 binding: 0 0 1 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 1 0 0
+process 11 binding: 0 0 0 0 0 0 1 1
+process 12 binding: 1 1 0 0 0 0 0 0
+process 13 binding: 0 0 1 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 1 0 0
+process 15 binding: 0 0 0 0 0 0 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:2.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:4.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:2.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:4.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:8.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.board.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core.out
new file mode 100644
index 0000000..03e44c6
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 1 0 1 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 1 0 0 0 0 1 0
+process 4 binding: 0 1 0 1 0 0 0 0
+process 5 binding: 0 0 0 1 0 1 0 0
+process 6 binding: 0 0 0 0 0 1 0 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 1 0 1 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 1 0 0 0 0 1 0
+process 12 binding: 0 1 0 1 0 0 0 0
+process 13 binding: 0 0 0 1 0 1 0 0
+process 14 binding: 0 0 0 0 0 1 0 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:2.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:4.out
new file mode 100644
index 0000000..08a3c94
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 1 0 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 1 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 0 1 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 1 0 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 1 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 0 1 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread.out
new file mode 100644
index 0000000..03e44c6
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 1 0 1 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 1 0 0 0 0 1 0
+process 4 binding: 0 1 0 1 0 0 0 0
+process 5 binding: 0 0 0 1 0 1 0 0
+process 6 binding: 0 0 0 0 0 1 0 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 1 0 1 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 1 0 0 0 0 1 0
+process 12 binding: 0 1 0 1 0 0 0 0
+process 13 binding: 0 0 0 1 0 1 0 0
+process 14 binding: 0 0 0 0 0 1 0 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:2.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:4.out
new file mode 100644
index 0000000..08a3c94
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 1 0 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 1 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 0 1 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 1 0 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 1 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 0 1 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:8.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.numa.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.socket.out
new file mode 100644
index 0000000..08a3c94
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 1 0 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 1 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 0 1 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 1 0 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 1 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 0 1 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.board.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core.out
new file mode 100644
index 0000000..04289b2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 1 0 1 0 1 0
+process 2 binding: 0 1 0 1 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 1 0
+process 4 binding: 0 1 0 1 0 1 0 1
+process 5 binding: 1 0 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 0 1 0 1
+process 7 binding: 1 0 1 0 1 0 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 1 0 1 0 1 0
+process 10 binding: 0 1 0 1 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 1 0
+process 12 binding: 0 1 0 1 0 1 0 1
+process 13 binding: 1 0 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 0 1 0 1
+process 15 binding: 1 0 1 0 1 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:2.out
new file mode 100644
index 0000000..338dd81
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 1 0 1 0
+process 2 binding: 0 1 0 1 0 1 0 1
+process 3 binding: 1 0 1 0 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 1 0 1 0
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 1 0 1 0 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 1 0 1 0
+process 10 binding: 0 1 0 1 0 1 0 1
+process 11 binding: 1 0 1 0 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 1 0 1 0
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 1 0 1 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:4.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread.out
new file mode 100644
index 0000000..04289b2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 1 0 1 0 1 0
+process 2 binding: 0 1 0 1 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 1 0
+process 4 binding: 0 1 0 1 0 1 0 1
+process 5 binding: 1 0 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 0 1 0 1
+process 7 binding: 1 0 1 0 1 0 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 1 0 1 0 1 0
+process 10 binding: 0 1 0 1 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 1 0
+process 12 binding: 0 1 0 1 0 1 0 1
+process 13 binding: 1 0 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 0 1 0 1
+process 15 binding: 1 0 1 0 1 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:2.out
new file mode 100644
index 0000000..338dd81
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 1 0 1 0
+process 2 binding: 0 1 0 1 0 1 0 1
+process 3 binding: 1 0 1 0 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 1 0 1 0
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 1 0 1 0 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 1 0 1 0
+process 10 binding: 0 1 0 1 0 1 0 1
+process 11 binding: 1 0 1 0 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 1 0 1 0
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 1 0 1 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:4.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:8.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.numa.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.socket.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:2.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:4.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:2.out
new file mode 100644
index 0000000..6ab904f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 0 0
+process 2 binding: 0 1 0 0 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 0
+process 4 binding: 0 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 0 0 1 0
+process 6 binding: 0 0 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 0 0
+process 10 binding: 0 1 0 0 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 0
+process 12 binding: 0 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 0 0 1 0
+process 14 binding: 0 0 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:4.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:8.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out
new file mode 100644
index 0000000..f9ac915
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 0 1 0 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 0 0
+process 3 binding: 0 0 0 0 0 0 1 0
+process 4 binding: 0 1 0 0 0 0 0 0
+process 5 binding: 0 0 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 0 1 0 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 0 1 0 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 0 0
+process 11 binding: 0 0 0 0 0 0 1 0
+process 12 binding: 0 1 0 0 0 0 0 0
+process 13 binding: 0 0 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 0 1 0 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out
new file mode 100644
index 0000000..8212b98
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 0 0 0 0 0 0
+process 1 binding: 0 1 0 0 0 0 0 0
+process 2 binding: 0 0 1 0 0 0 0 0
+process 3 binding: 0 0 0 1 0 0 0 0
+process 4 binding: 0 0 0 0 1 0 0 0
+process 5 binding: 0 0 0 0 0 1 0 0
+process 6 binding: 0 0 0 0 0 0 1 0
+process 7 binding: 0 0 0 0 0 0 0 1
+process 8 binding: 1 0 0 0 0 0 0 0
+process 9 binding: 0 1 0 0 0 0 0 0
+process 10 binding: 0 0 1 0 0 0 0 0
+process 11 binding: 0 0 0 1 0 0 0 0
+process 12 binding: 0 0 0 0 1 0 0 0
+process 13 binding: 0 0 0 0 0 1 0 0
+process 14 binding: 0 0 0 0 0 0 1 0
+process 15 binding: 0 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.board.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core.out
new file mode 100644
index 0000000..03e44c6
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 1 0 1 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 1 0 0 0 0 1 0
+process 4 binding: 0 1 0 1 0 0 0 0
+process 5 binding: 0 0 0 1 0 1 0 0
+process 6 binding: 0 0 0 0 0 1 0 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 1 0 1 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 1 0 0 0 0 1 0
+process 12 binding: 0 1 0 1 0 0 0 0
+process 13 binding: 0 0 0 1 0 1 0 0
+process 14 binding: 0 0 0 0 0 1 0 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:2.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:4.out
new file mode 100644
index 0000000..08a3c94
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 1 0 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 1 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 0 1 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 1 0 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 1 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 0 1 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread.out
new file mode 100644
index 0000000..03e44c6
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 1 0 1 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 1 0 0 0 0 1 0
+process 4 binding: 0 1 0 1 0 0 0 0
+process 5 binding: 0 0 0 1 0 1 0 0
+process 6 binding: 0 0 0 0 0 1 0 1
+process 7 binding: 1 0 0 0 0 0 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 1 0 1 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 1 0 0 0 0 1 0
+process 12 binding: 0 1 0 1 0 0 0 0
+process 13 binding: 0 0 0 1 0 1 0 0
+process 14 binding: 0 0 0 0 0 1 0 1
+process 15 binding: 1 0 0 0 0 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:2.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:4.out
new file mode 100644
index 0000000..08a3c94
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 1 0 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 1 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 0 1 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 1 0 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 1 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 0 1 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:8.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.numa.out
new file mode 100644
index 0000000..a6bf2e4
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 0 0 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 0 0 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 0 0 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 0 0 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 0 0 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 0 0 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 0 0 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 0 0 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.socket.out
new file mode 100644
index 0000000..08a3c94
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 0 0 0 0
+process 1 binding: 0 1 0 1 0 0 0 0
+process 2 binding: 0 0 0 0 1 0 1 0
+process 3 binding: 0 0 0 0 0 1 0 1
+process 4 binding: 1 0 1 0 0 0 0 0
+process 5 binding: 0 1 0 1 0 0 0 0
+process 6 binding: 0 0 0 0 1 0 1 0
+process 7 binding: 0 0 0 0 0 1 0 1
+process 8 binding: 1 0 1 0 0 0 0 0
+process 9 binding: 0 1 0 1 0 0 0 0
+process 10 binding: 0 0 0 0 1 0 1 0
+process 11 binding: 0 0 0 0 0 1 0 1
+process 12 binding: 1 0 1 0 0 0 0 0
+process 13 binding: 0 1 0 1 0 0 0 0
+process 14 binding: 0 0 0 0 1 0 1 0
+process 15 binding: 0 0 0 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.board.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core.out
new file mode 100644
index 0000000..04289b2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 1 0 1 0 1 0
+process 2 binding: 0 1 0 1 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 1 0
+process 4 binding: 0 1 0 1 0 1 0 1
+process 5 binding: 1 0 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 0 1 0 1
+process 7 binding: 1 0 1 0 1 0 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 1 0 1 0 1 0
+process 10 binding: 0 1 0 1 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 1 0
+process 12 binding: 0 1 0 1 0 1 0 1
+process 13 binding: 1 0 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 0 1 0 1
+process 15 binding: 1 0 1 0 1 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:2.out
new file mode 100644
index 0000000..338dd81
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 1 0 1 0
+process 2 binding: 0 1 0 1 0 1 0 1
+process 3 binding: 1 0 1 0 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 1 0 1 0
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 1 0 1 0 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 1 0 1 0
+process 10 binding: 0 1 0 1 0 1 0 1
+process 11 binding: 1 0 1 0 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 1 0 1 0
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 1 0 1 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:4.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread.out
new file mode 100644
index 0000000..04289b2
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 1 0 1 0 1 0
+process 2 binding: 0 1 0 1 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 1 0
+process 4 binding: 0 1 0 1 0 1 0 1
+process 5 binding: 1 0 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 0 1 0 1
+process 7 binding: 1 0 1 0 1 0 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 1 0 1 0 1 0
+process 10 binding: 0 1 0 1 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 1 0
+process 12 binding: 0 1 0 1 0 1 0 1
+process 13 binding: 1 0 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 0 1 0 1
+process 15 binding: 1 0 1 0 1 0 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:2.out
new file mode 100644
index 0000000..338dd81
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 1 0 1 0
+process 2 binding: 0 1 0 1 0 1 0 1
+process 3 binding: 1 0 1 0 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 1 0 1 0
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 1 0 1 0 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 1 0 1 0
+process 10 binding: 0 1 0 1 0 1 0 1
+process 11 binding: 1 0 1 0 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 1 0 1 0
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 1 0 1 0 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:4.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:8.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.numa.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.socket.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:2.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:4.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:8.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out
new file mode 100644
index 0000000..6fbbe47
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 1 1 1 1 1 1 1
+process 1 binding: 1 1 1 1 1 1 1 1
+process 2 binding: 1 1 1 1 1 1 1 1
+process 3 binding: 1 1 1 1 1 1 1 1
+process 4 binding: 1 1 1 1 1 1 1 1
+process 5 binding: 1 1 1 1 1 1 1 1
+process 6 binding: 1 1 1 1 1 1 1 1
+process 7 binding: 1 1 1 1 1 1 1 1
+process 8 binding: 1 1 1 1 1 1 1 1
+process 9 binding: 1 1 1 1 1 1 1 1
+process 10 binding: 1 1 1 1 1 1 1 1
+process 11 binding: 1 1 1 1 1 1 1 1
+process 12 binding: 1 1 1 1 1 1 1 1
+process 13 binding: 1 1 1 1 1 1 1 1
+process 14 binding: 1 1 1 1 1 1 1 1
+process 15 binding: 1 1 1 1 1 1 1 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out
new file mode 100644
index 0000000..9f36647
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 1 0 1 0 1 0 1 0
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 1 0 1 0 1 0 1 0
+process 4 binding: 0 1 0 1 0 1 0 1
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 1 0 1 0 1 0 1 0
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 1 0 1 0 1 0 1 0
+process 12 binding: 0 1 0 1 0 1 0 1
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:2.out
new file mode 100644
index 0000000..793a69e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 1 0 1 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 1 0 1
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 1 0 1 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 1 0 1 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 1 0 1
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 1 0 1 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:4.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out
new file mode 100644
index 0000000..9f36647
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 1 0 1 0 1 0 1 0
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 1 0 1 0 1 0 1 0
+process 4 binding: 0 1 0 1 0 1 0 1
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 1 0 1 0 1 0 1 0
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 1 0 1 0 1 0 1 0
+process 12 binding: 0 1 0 1 0 1 0 1
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:2.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:2.out
new file mode 100644
index 0000000..793a69e
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:2.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 1 0 1 0 1 0 1 0
+process 2 binding: 0 1 0 1 0 1 0 1
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 1 0 1 0 1 0 1 0
+process 6 binding: 0 1 0 1 0 1 0 1
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 1 0 1 0 1 0 1 0
+process 10 binding: 0 1 0 1 0 1 0 1
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 1 0 1 0 1 0 1 0
+process 14 binding: 0 1 0 1 0 1 0 1
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:4.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:4.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:4.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:8.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:8.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:8.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out
new file mode 100644
index 0000000..c97689f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out
@@ -0,0 +1,16 @@
+process 0 binding: 1 0 1 0 1 0 1 0
+process 1 binding: 0 1 0 1 0 1 0 1
+process 2 binding: 1 0 1 0 1 0 1 0
+process 3 binding: 0 1 0 1 0 1 0 1
+process 4 binding: 1 0 1 0 1 0 1 0
+process 5 binding: 0 1 0 1 0 1 0 1
+process 6 binding: 1 0 1 0 1 0 1 0
+process 7 binding: 0 1 0 1 0 1 0 1
+process 8 binding: 1 0 1 0 1 0 1 0
+process 9 binding: 0 1 0 1 0 1 0 1
+process 10 binding: 1 0 1 0 1 0 1 0
+process 11 binding: 0 1 0 1 0 1 0 1
+process 12 binding: 1 0 1 0 1 0 1 0
+process 13 binding: 0 1 0 1 0 1 0 1
+process 14 binding: 1 0 1 0 1 0 1 0
+process 15 binding: 0 1 0 1 0 1 0 1
diff --git a/test/mpi/impls/hydra/binding_reference/topo1.xml b/test/mpi/impls/hydra/binding_reference/topo1.xml
new file mode 100644
index 0000000..82a4402
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/topo1.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x000000ff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <info name="CPUModel" value="Intel(R) Core(TM) i7-4960HQ CPU @ 2.60GHz"/>
+ <info name="Backend" value="Darwin"/>
+ <info name="OSName" value="Darwin"/>
+ <info name="OSRelease" value="13.0.2"/>
+ <info name="OSVersion" value="Darwin Kernel Version 13.0.2: Sun Sep 29 19:38:57 PDT 2013; root:xnu-2422.75.4~1/RELEASE_X86_64"/>
+ <info name="HostName" value="snowflake.local"/>
+ <info name="Architecture" value="x86_64"/>
+ <info name="Backend" value="x86"/>
+ <object type="NUMANode" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="17179869184">
+ <page_type size="4096" count="0"/>
+ <object type="Cache" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="6291456" depth="3" cache_linesize="64" cache_associativity="0" cache_type="0">
+ <object type="Cache" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
+ <object type="Cache" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="1">
+ <object type="Cache" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="2">
+ <object type="Core" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
+ <object type="Cache" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="1">
+ <object type="Cache" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="2">
+ <object type="Core" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
+ <object type="Cache" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="1">
+ <object type="Cache" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="2">
+ <object type="Core" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8" cache_type="0">
+ <object type="Cache" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="1">
+ <object type="Cache" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="0" cache_type="2">
+ <object type="Core" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
diff --git a/test/mpi/impls/hydra/binding_reference/topo2.xml b/test/mpi/impls/hydra/binding_reference/topo2.xml
new file mode 100644
index 0000000..c61aff8
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/topo2.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003">
+ <page_type size="4096" count="0"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="X8DTU"/>
+ <info name="DMIProductVersion" value="1234567890"/>
+ <info name="DMIBoardVendor" value="Supermicro"/>
+ <info name="DMIBoardName" value="X8DTU"/>
+ <info name="DMIBoardVersion" value="1234567890"/>
+ <info name="DMIBoardAssetTag" value="To Be Filled By O.E.M."/>
+ <info name="DMIChassisVendor" value="Supermicro"/>
+ <info name="DMIChassisType" value="17"/>
+ <info name="DMIChassisVersion" value="1234567890"/>
+ <info name="DMIChassisAssetTag" value="To Be Filled By O.E.M."/>
+ <info name="DMIBIOSVendor" value="American Megatrends Inc."/>
+ <info name="DMIBIOSVersion" value="1.1 "/>
+ <info name="DMIBIOSDate" value="10/05/2009"/>
+ <info name="DMISysVendor" value="Supermicro"/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="3.5.0-30-generic"/>
+ <info name="OSVersion" value="#51~precise1-Ubuntu SMP Wed May 15 08:48:19 UTC 2013"/>
+ <info name="HostName" value="stomp"/>
+ <info name="Architecture" value="x86_64"/>
+ <distances nbobjs="2" relative_depth="1" latency_base="10.000000">
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ </distances>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00000f0f" complete_cpuset="0x00000f0f" online_cpuset="0x00000f0f" allowed_cpuset="0x00000f0f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="12875501568">
+ <page_type size="4096" count="3143433"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000f0f" complete_cpuset="0x00000f0f" online_cpuset="0x00000f0f" allowed_cpuset="0x00000f0f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" cpuset="0x00000f0f" complete_cpuset="0x00000f0f" online_cpuset="0x00000f0f" allowed_cpuset="0x00000f0f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-07]">
+ <object type="Bridge" os_level="-1" os_index="16" name="Intel Corporation 5520/5500/X58 I/O Hub PCI Express Root Port 1" bridge_type="1-1" depth="0" bridge_pci="0000:[01-01]" pci_busid="0000:00:01.0" pci_type="0604 [8086:3408] [0000:0000] 13" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="5520/5500/X58 I/O Hub PCI Express Root Port 1"/>
+ <object type="PCIDev" os_level="-1" os_index="4096" name="Intel Corporation 82576 Gigabit Network Connection" pci_busid="0000:01:00.0" pci_type="0200 [8086:10c9] [00d9:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82576 Gigabit Network Connection"/>
+ <object type="OSDev" os_level="-1" name="eth0" osdev_type="2">
+ <info name="Address" value="00:30:48:df:bc:42"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="4097" name="Intel Corporation 82576 Gigabit Network Connection" pci_busid="0000:01:00.1" pci_type="0200 [8086:10c9] [00d9:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82576 Gigabit Network Connection"/>
+ <object type="OSDev" os_level="-1" name="eth1" osdev_type="2">
+ <info name="Address" value="00:30:48:df:bc:43"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="480" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="0" bridge_pci="0000:[07-07]" pci_busid="0000:00:1e.0" pci_type="0604 [8086:244e] [0000:0000] 90" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="PCIDev" os_level="-1" os_index="28688" name="Matrox Electronics Systems Ltd. MGA G200eW WPCM450" pci_busid="0000:07:01.0" pci_type="0300 [102b:0532] [00d9:0000] 0a" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Matrox Electronics Systems Ltd."/>
+ <info name="PCIDevice" value="MGA G200eW WPCM450"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="498" name="Intel Corporation 82801JI (ICH10 Family) 4 port SATA IDE Controller #1" pci_busid="0000:00:1f.2" pci_type="0101 [8086:3a20] [00d9:0000] 00" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801JI (ICH10 Family) 4 port SATA IDE Controller #1"/>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="501" name="Intel Corporation 82801JI (ICH10 Family) 2 port SATA IDE Controller #2" pci_busid="0000:00:1f.5" pci_type="0101 [8086:3a26] [00d9:0000] 00" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801JI (ICH10 Family) 2 port SATA IDE Controller #2"/>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="1" cpuset="0x0000f0f0" complete_cpuset="0x0000f0f0" online_cpuset="0x0000f0f0" allowed_cpuset="0x0000f0f0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="12884901888">
+ <page_type size="4096" count="3145728"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x0000f0f0" complete_cpuset="0x0000f0f0" online_cpuset="0x0000f0f0" allowed_cpuset="0x0000f0f0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" cpuset="0x0000f0f0" complete_cpuset="0x0000f0f0" online_cpuset="0x0000f0f0" allowed_cpuset="0x0000f0f0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
diff --git a/test/mpi/impls/hydra/binding_reference/topo3.xml b/test/mpi/impls/hydra/binding_reference/topo3.xml
new file mode 100644
index 0000000..8792484
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/topo3.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" local_memory="8467828736">
+ <page_type size="4096" count="2067341"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="H8QM8"/>
+ <info name="DMIProductVersion" value="1234567890"/>
+ <info name="DMIBoardVendor" value="Supermicro"/>
+ <info name="DMIBoardName" value="H8QM8"/>
+ <info name="DMIBoardVersion" value="1234567890"/>
+ <info name="DMIBoardAssetTag" value="To Be Filled By O.E.M."/>
+ <info name="DMIChassisVendor" value="To Be Filled By O.E.M."/>
+ <info name="DMIChassisType" value="3"/>
+ <info name="DMIChassisVersion" value="To Be Filled By O.E.M."/>
+ <info name="DMIChassisAssetTag" value="To Be Filled By O.E.M."/>
+ <info name="DMIBIOSVendor" value="American Megatrends Inc."/>
+ <info name="DMIBIOSVersion" value="080014 "/>
+ <info name="DMIBIOSDate" value="08/21/2006"/>
+ <info name="DMISysVendor" value="Supermicro"/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="3.2.0-31-generic-pae"/>
+ <info name="OSVersion" value="#50-Ubuntu SMP Fri Sep 7 16:39:45 UTC 2012"/>
+ <info name="HostName" value="octopus"/>
+ <info name="Architecture" value="i686"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c">
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030">
+ <object type="Cache" os_level="-1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020">
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0">
+ <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080">
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-07]">
+ <object type="PCIDev" os_level="-1" os_index="64" name="NVIDIA Corporation MCP55 IDE" pci_busid="0000:00:04.0" pci_type="0101 [10de:036e] [00de:0084] a1" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="NVIDIA Corporation"/>
+ <info name="PCIDevice" value="MCP55 IDE"/>
+ <object type="OSDev" os_level="-1" name="sr0" osdev_type="0"/>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="80" name="NVIDIA Corporation MCP55 SATA Controller" pci_busid="0000:00:05.0" pci_type="0101 [10de:037f] [00de:0084] a3" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="NVIDIA Corporation"/>
+ <info name="PCIDevice" value="MCP55 SATA Controller"/>
+ <object type="OSDev" os_level="-1" name="sda" osdev_type="0"/>
+ <object type="OSDev" os_level="-1" name="sdb" osdev_type="0"/>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="81" name="NVIDIA Corporation MCP55 SATA Controller" pci_busid="0000:00:05.1" pci_type="0101 [10de:037f] [00de:0084] a3" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="NVIDIA Corporation"/>
+ <info name="PCIDevice" value="MCP55 SATA Controller"/>
+ <object type="OSDev" os_level="-1" name="sdc" osdev_type="0"/>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="82" name="NVIDIA Corporation MCP55 SATA Controller" pci_busid="0000:00:05.2" pci_type="0101 [10de:037f] [00de:0084] a3" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="NVIDIA Corporation"/>
+ <info name="PCIDevice" value="MCP55 SATA Controller"/>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="96" name="NVIDIA Corporation MCP55 PCI bridge" bridge_type="1-1" depth="1" bridge_pci="0000:[01-01]" pci_busid="0000:00:06.0" pci_type="0604 [10de:0370] [0000:0000] a2" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="NVIDIA Corporation"/>
+ <info name="PCIDevice" value="MCP55 PCI bridge"/>
+ <object type="PCIDev" os_level="-1" os_index="4112" name="Advanced Micro Devices, Inc. [AMD/ATI] ES1000" pci_busid="0000:01:01.0" pci_type="0300 [1002:515e] [0002:005e] 02" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD/ATI]"/>
+ <info name="PCIDevice" value="ES1000"/>
+ <object type="OSDev" os_level="-1" name="controlD64" osdev_type="1"/>
+ <object type="OSDev" os_level="-1" name="card0" osdev_type="1"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="1" bridge_type="0-1" depth="0" bridge_pci="0000:[08-0a]">
+ <object type="Bridge" os_level="-1" os_index="32800" name="Advanced Micro Devices, Inc. [AMD] AMD-8132 PCI-X Bridge" bridge_type="1-1" depth="1" bridge_pci="0000:[0a-0a]" pci_busid="0000:08:02.0" pci_type="0604 [1022:7458] [0000:0000] 12" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD]"/>
+ <info name="PCIDevice" value="AMD-8132 PCI-X Bridge"/>
+ <object type="PCIDev" os_level="-1" os_index="41008" name="Intel Corporation 82546GB Gigabit Ethernet Controller" pci_busid="0000:0a:03.0" pci_type="0200 [8086:1079] [00d9:007a] 03" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82546GB Gigabit Ethernet Controller"/>
+ <object type="OSDev" os_level="-1" name="eth0" osdev_type="2">
+ <info name="Address" value="00:30:48:57:8f:26"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="41009" name="Intel Corporation 82546GB Gigabit Ethernet Controller" pci_busid="0000:0a:03.1" pci_type="0200 [8086:1079] [00d9:007a] 03" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82546GB Gigabit Ethernet Controller"/>
+ <object type="OSDev" os_level="-1" name="eth1" osdev_type="2">
+ <info name="Address" value="00:30:48:57:8f:27"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
diff --git a/test/mpi/impls/hydra/binding_reference/topo4.xml b/test/mpi/impls/hydra/binding_reference/topo4.xml
new file mode 100644
index 0000000..c1ef17f
--- /dev/null
+++ b/test/mpi/impls/hydra/binding_reference/topo4.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" local_memory="33740599296">
+ <page_type size="4096" count="8237451"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="X7DBU"/>
+ <info name="DMIProductVersion" value="0123456789"/>
+ <info name="DMIBoardVendor" value="Supermicro"/>
+ <info name="DMIBoardName" value="X7DBU"/>
+ <info name="DMIBoardVersion" value="PCB Version"/>
+ <info name="DMIBoardAssetTag" value=" "/>
+ <info name="DMIChassisVendor" value="Supermicro"/>
+ <info name="DMIChassisType" value="1"/>
+ <info name="DMIChassisVersion" value="0123456789"/>
+ <info name="DMIChassisAssetTag" value=" "/>
+ <info name="DMIBIOSVendor" value="Phoenix Technologies LTD"/>
+ <info name="DMIBIOSVersion" value="2.1a"/>
+ <info name="DMIBIOSDate" value="12/20/2008"/>
+ <info name="DMISysVendor" value="Supermicro"/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="3.2.0-31-generic"/>
+ <info name="OSVersion" value="#50-Ubuntu SMP Fri Sep 7 16:16:45 UTC 2012"/>
+ <info name="HostName" value="crush"/>
+ <info name="Architecture" value="x86_64"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000055" complete_cpuset="0x00000055" online_cpuset="0x00000055" allowed_cpuset="0x00000055">
+ <object type="Cache" os_level="-1" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" cache_size="6291456" depth="2" cache_linesize="64" cache_associativity="24">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000050" complete_cpuset="0x00000050" online_cpuset="0x00000050" allowed_cpuset="0x00000050" cache_size="6291456" depth="2" cache_linesize="64" cache_associativity="24">
+ <object type="Cache" os_level="-1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x000000aa" complete_cpuset="0x000000aa" online_cpuset="0x000000aa" allowed_cpuset="0x000000aa">
+ <object type="Cache" os_level="-1" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" cache_size="6291456" depth="2" cache_linesize="64" cache_associativity="24">
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x000000a0" complete_cpuset="0x000000a0" online_cpuset="0x000000a0" allowed_cpuset="0x000000a0" cache_size="6291456" depth="2" cache_linesize="64" cache_associativity="24">
+ <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020">
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080">
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-08]">
+ <object type="Bridge" os_level="-1" os_index="32" name="Intel Corporation 5000 Series Chipset PCI Express x8 Port 2-3" bridge_type="1-1" depth="1" bridge_pci="0000:[01-05]" pci_busid="0000:00:02.0" pci_type="0604 [8086:25f7] [0000:0000] b1" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="5000 Series Chipset PCI Express x8 Port 2-3"/>
+ <object type="Bridge" os_level="-1" os_index="4096" name="Intel Corporation 6311ESB/6321ESB PCI Express Upstream Port" bridge_type="1-1" depth="2" bridge_pci="0000:[02-04]" pci_busid="0000:01:00.0" pci_type="0604 [8086:3500] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="6311ESB/6321ESB PCI Express Upstream Port"/>
+ <object type="Bridge" os_level="-1" os_index="8224" name="Intel Corporation 6311ESB/6321ESB PCI Express Downstream Port E3" bridge_type="1-1" depth="3" bridge_pci="0000:[04-04]" pci_busid="0000:02:02.0" pci_type="0604 [8086:3518] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="6311ESB/6321ESB PCI Express Downstream Port E3"/>
+ <object type="PCIDev" os_level="-1" os_index="16384" name="Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper)" pci_busid="0000:04:00.0" pci_type="0200 [8086:1096] [00d9:0096] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="80003ES2LAN Gigabit Ethernet Controller (Copper)"/>
+ <object type="OSDev" os_level="-1" name="eth0" osdev_type="2">
+ <info name="Address" value="00:30:48:c8:29:7e"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="16385" name="Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper)" pci_busid="0000:04:00.1" pci_type="0200 [8086:1096] [00d9:0096] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="80003ES2LAN Gigabit Ethernet Controller (Copper)"/>
+ <object type="OSDev" os_level="-1" name="eth1" osdev_type="2">
+ <info name="Address" value="00:30:48:c8:29:7f"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="480" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="1" bridge_pci="0000:[08-08]" pci_busid="0000:00:1e.0" pci_type="0604 [8086:244e] [0000:0000] d9" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="PCIDev" os_level="-1" os_index="32784" name="Advanced Micro Devices, Inc. [AMD/ATI] ES1000" pci_busid="0000:08:01.0" pci_type="0300 [1002:515e] [00d9:0080] 02" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Advanced Micro Devices, Inc. [AMD/ATI]"/>
+ <info name="PCIDevice" value="ES1000"/>
+ <object type="OSDev" os_level="-1" name="controlD64" osdev_type="1"/>
+ <object type="OSDev" os_level="-1" name="card0" osdev_type="1"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="497" name="Intel Corporation 631xESB/632xESB IDE Controller" pci_busid="0000:00:1f.1" pci_type="0101 [8086:269e] [00d9:0080] 09" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="631xESB/632xESB IDE Controller"/>
+ <object type="OSDev" os_level="-1" name="sr0" osdev_type="0"/>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="498" name="Intel Corporation 631xESB/632xESB SATA AHCI Controller" pci_busid="0000:00:1f.2" pci_type="0106 [8086:2681] [00d9:0080] 09" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="631xESB/632xESB SATA AHCI Controller"/>
+ <object type="OSDev" os_level="-1" name="sda" osdev_type="0"/>
+ </object>
+ </object>
+ </object>
+</topology>
diff --git a/test/mpi/impls/hydra/dummy.c b/test/mpi/impls/hydra/dummy.c
new file mode 100644
index 0000000..7eeb76f
--- /dev/null
+++ b/test/mpi/impls/hydra/dummy.c
@@ -0,0 +1,11 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ * (C) 2013 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+/* */
+
+int main( int argc, char *argv[] )
+{
+ return 0;
+}
diff --git a/test/mpi/impls/hydra/proc_binding.sh.in b/test/mpi/impls/hydra/proc_binding.sh.in
new file mode 100755
index 0000000..ee512bd
--- /dev/null
+++ b/test/mpi/impls/hydra/proc_binding.sh.in
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+HYDRA_TOPO_DEBUG=1
+export HYDRA_TOPO_DEBUG
+
+if test -f dummy; then
+ errors=0
+
+ for topo in topo1 topo2 topo3 topo4 ; do
+ export HWLOC_XMLFILE=@top_srcdir@/impls/hydra/binding_reference/$topo.xml
+ for bind in hwthread hwthread:2 hwthread:4 hwthread:8 core core:2 core:4 socket numa board ; do
+ for map in hwthread hwthread:2 hwthread:4 hwthread:8 core core:2 core:4 socket numa board ; do
+ @MPIEXEC@ -bind-to $bind -map-by $map -n 16 ./dummy | sort -k2n > actual.${topo}.${bind}.${map}.out
+ diff @top_srcdir@/impls/hydra/binding_reference/expected.${topo}.${bind}.${map}.out \
+ actual.${topo}.${bind}.${map}.out
+ if test "$?" != "0" ; then
+ echo "ERROR $topo $bind $map"
+ errors=1
+ else
+ rm actual.${topo}.${bind}.${map}.out
+ fi
+ done
+ done
+ done
+
+ if test "$errors" = "0"; then
+ echo " No Errors"
+ exit 0
+ fi
+else
+ echo "run make to build required dummy executable"
+ exit 1
+fi
http://git.mpich.org/mpich.git/commitdiff/774b7c814855a8766c0e9980b94199ab3…
commit 774b7c814855a8766c0e9980b94199ab3bf4f796
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Mon Jan 27 13:58:34 2014 -0600
make topology debugging output more reliable
Output processor affinity info as a single string. This should prevent
mangled lines in the debugging output in most cases.
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
index be8978f..6e8bd58 100644
--- a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
+++ b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
@@ -10,6 +10,7 @@
#include "topo_hwloc.h"
#define MAP_LENGTH (5)
+#define DBG_STR_LENGTH (128)
struct HYDT_topo_hwloc_info HYDT_topo_hwloc_info = { 0 };
@@ -456,15 +457,17 @@ HYD_status HYDT_topo_hwloc_bind(int idx)
/* For debugging, print the binding bitmaps but don't actually bind. */
if (HYDT_topo_info.debug) {
- int i;
+ int i, cur;
+ char binding[DBG_STR_LENGTH];
- HYDU_dump_noprefix(stdout, "process %d binding: ", idx);
+ cur = HYDU_snprintf(binding, DBG_STR_LENGTH, "process %d binding: ", idx);
for (i = 0; i < HYDT_topo_hwloc_info.total_num_pus; i++)
- HYDU_dump_noprefix(stdout, "%d ",
- hwloc_bitmap_isset(HYDT_topo_hwloc_info.bitmap[id], i));
+ cur += HYDU_snprintf(&binding[cur], DBG_STR_LENGTH - cur + 1, "%d ",
+ hwloc_bitmap_isset(HYDT_topo_hwloc_info.bitmap[id], i));
- HYDU_dump_noprefix(stdout, "\n");
+ HYDU_snprintf(&binding[cur], DBG_STR_LENGTH - cur + 1, "\n");
+ HYDU_dump_noprefix(stdout, "%s", binding);
}
else {
hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
-----------------------------------------------------------------------
Summary of changes:
src/pm/hydra/tools/topo/hwloc/topo_hwloc.c | 13 +-
test/mpi/.gitignore | 2 +
test/mpi/configure.ac | 3 +
test/mpi/impls/Makefile.am | 2 +-
test/mpi/impls/hydra/Makefile.am | 13 ++
.../expected.topo1.board.board.out | 16 ++
.../expected.topo1.board.core.out | 16 ++
.../expected.topo1.board.core:2.out | 16 ++
.../expected.topo1.board.core:4.out | 16 ++
.../expected.topo1.board.hwthread.out | 16 ++
.../expected.topo1.board.hwthread:2.out | 16 ++
.../expected.topo1.board.hwthread:4.out | 16 ++
.../expected.topo1.board.hwthread:8.out | 16 ++
.../expected.topo1.board.numa.out | 16 ++
.../expected.topo1.board.socket.out | 16 ++
.../expected.topo1.core.board.out | 16 ++
.../binding_reference/expected.topo1.core.core.out | 16 ++
.../expected.topo1.core.core:2.out | 16 ++
.../expected.topo1.core.core:4.out | 16 ++
.../expected.topo1.core.hwthread.out | 16 ++
.../expected.topo1.core.hwthread:2.out | 16 ++
.../expected.topo1.core.hwthread:4.out | 16 ++
.../expected.topo1.core.hwthread:8.out | 16 ++
.../binding_reference/expected.topo1.core.numa.out | 16 ++
.../expected.topo1.core.socket.out | 16 ++
.../expected.topo1.core:2.board.out | 16 ++
.../expected.topo1.core:2.core.out | 16 ++
.../expected.topo1.core:2.core:2.out | 16 ++
.../expected.topo1.core:2.core:4.out | 16 ++
.../expected.topo1.core:2.hwthread.out | 16 ++
.../expected.topo1.core:2.hwthread:2.out | 16 ++
.../expected.topo1.core:2.hwthread:4.out | 16 ++
.../expected.topo1.core:2.hwthread:8.out | 16 ++
.../expected.topo1.core:2.numa.out | 16 ++
.../expected.topo1.core:2.socket.out | 16 ++
.../expected.topo1.core:4.board.out | 16 ++
.../expected.topo1.core:4.core.out | 16 ++
.../expected.topo1.core:4.core:2.out | 16 ++
.../expected.topo1.core:4.core:4.out | 16 ++
.../expected.topo1.core:4.hwthread.out | 16 ++
.../expected.topo1.core:4.hwthread:2.out | 16 ++
.../expected.topo1.core:4.hwthread:4.out | 16 ++
.../expected.topo1.core:4.hwthread:8.out | 16 ++
.../expected.topo1.core:4.numa.out | 16 ++
.../expected.topo1.core:4.socket.out | 16 ++
.../expected.topo1.hwthread.board.out | 16 ++
.../expected.topo1.hwthread.core.out | 16 ++
.../expected.topo1.hwthread.core:2.out | 16 ++
.../expected.topo1.hwthread.core:4.out | 16 ++
.../expected.topo1.hwthread.hwthread.out | 16 ++
.../expected.topo1.hwthread.hwthread:2.out | 16 ++
.../expected.topo1.hwthread.hwthread:4.out | 16 ++
.../expected.topo1.hwthread.hwthread:8.out | 16 ++
.../expected.topo1.hwthread.numa.out | 16 ++
.../expected.topo1.hwthread.socket.out | 16 ++
.../expected.topo1.hwthread:2.board.out | 16 ++
.../expected.topo1.hwthread:2.core.out | 16 ++
.../expected.topo1.hwthread:2.core:2.out | 16 ++
.../expected.topo1.hwthread:2.core:4.out | 16 ++
.../expected.topo1.hwthread:2.hwthread.out | 16 ++
.../expected.topo1.hwthread:2.hwthread:2.out | 16 ++
.../expected.topo1.hwthread:2.hwthread:4.out | 16 ++
.../expected.topo1.hwthread:2.hwthread:8.out | 16 ++
.../expected.topo1.hwthread:2.numa.out | 16 ++
.../expected.topo1.hwthread:2.socket.out | 16 ++
.../expected.topo1.hwthread:4.board.out | 16 ++
.../expected.topo1.hwthread:4.core.out | 16 ++
.../expected.topo1.hwthread:4.core:2.out | 16 ++
.../expected.topo1.hwthread:4.core:4.out | 16 ++
.../expected.topo1.hwthread:4.hwthread.out | 16 ++
.../expected.topo1.hwthread:4.hwthread:2.out | 16 ++
.../expected.topo1.hwthread:4.hwthread:4.out | 16 ++
.../expected.topo1.hwthread:4.hwthread:8.out | 16 ++
.../expected.topo1.hwthread:4.numa.out | 16 ++
.../expected.topo1.hwthread:4.socket.out | 16 ++
.../expected.topo1.hwthread:8.board.out | 16 ++
.../expected.topo1.hwthread:8.core.out | 16 ++
.../expected.topo1.hwthread:8.core:2.out | 16 ++
.../expected.topo1.hwthread:8.core:4.out | 16 ++
.../expected.topo1.hwthread:8.hwthread.out | 16 ++
.../expected.topo1.hwthread:8.hwthread:2.out | 16 ++
.../expected.topo1.hwthread:8.hwthread:4.out | 16 ++
.../expected.topo1.hwthread:8.hwthread:8.out | 16 ++
.../expected.topo1.hwthread:8.numa.out | 16 ++
.../expected.topo1.hwthread:8.socket.out | 16 ++
.../expected.topo1.numa.board.out | 16 ++
.../binding_reference/expected.topo1.numa.core.out | 16 ++
.../expected.topo1.numa.core:2.out | 16 ++
.../expected.topo1.numa.core:4.out | 16 ++
.../expected.topo1.numa.hwthread.out | 16 ++
.../expected.topo1.numa.hwthread:2.out | 16 ++
.../expected.topo1.numa.hwthread:4.out | 16 ++
.../expected.topo1.numa.hwthread:8.out | 16 ++
.../binding_reference/expected.topo1.numa.numa.out | 16 ++
.../expected.topo1.numa.socket.out | 16 ++
.../expected.topo1.socket.board.out | 16 ++
.../expected.topo1.socket.core.out | 16 ++
.../expected.topo1.socket.core:2.out | 16 ++
.../expected.topo1.socket.core:4.out | 16 ++
.../expected.topo1.socket.hwthread.out | 16 ++
.../expected.topo1.socket.hwthread:2.out | 16 ++
.../expected.topo1.socket.hwthread:4.out | 16 ++
.../expected.topo1.socket.hwthread:8.out | 16 ++
.../expected.topo1.socket.numa.out | 16 ++
.../expected.topo1.socket.socket.out | 16 ++
.../expected.topo2.board.board.out | 16 ++
.../expected.topo2.board.core.out | 16 ++
.../expected.topo2.board.core:2.out | 16 ++
.../expected.topo2.board.core:4.out | 16 ++
.../expected.topo2.board.hwthread.out | 16 ++
.../expected.topo2.board.hwthread:2.out | 16 ++
.../expected.topo2.board.hwthread:4.out | 16 ++
.../expected.topo2.board.hwthread:8.out | 16 ++
.../expected.topo2.board.numa.out | 16 ++
.../expected.topo2.board.socket.out | 16 ++
.../expected.topo2.core.board.out | 16 ++
.../binding_reference/expected.topo2.core.core.out | 16 ++
.../expected.topo2.core.core:2.out | 16 ++
.../expected.topo2.core.core:4.out | 16 ++
.../expected.topo2.core.hwthread.out | 16 ++
.../expected.topo2.core.hwthread:2.out | 16 ++
.../expected.topo2.core.hwthread:4.out | 16 ++
.../expected.topo2.core.hwthread:8.out | 16 ++
.../binding_reference/expected.topo2.core.numa.out | 16 ++
.../expected.topo2.core.socket.out | 16 ++
.../expected.topo2.core:2.board.out | 16 ++
.../expected.topo2.core:2.core.out | 16 ++
.../expected.topo2.core:2.core:2.out | 16 ++
.../expected.topo2.core:2.core:4.out | 16 ++
.../expected.topo2.core:2.hwthread.out | 16 ++
.../expected.topo2.core:2.hwthread:2.out | 16 ++
.../expected.topo2.core:2.hwthread:4.out | 16 ++
.../expected.topo2.core:2.hwthread:8.out | 16 ++
.../expected.topo2.core:2.numa.out | 16 ++
.../expected.topo2.core:2.socket.out | 16 ++
.../expected.topo2.core:4.board.out | 16 ++
.../expected.topo2.core:4.core.out | 16 ++
.../expected.topo2.core:4.core:2.out | 16 ++
.../expected.topo2.core:4.core:4.out | 16 ++
.../expected.topo2.core:4.hwthread.out | 16 ++
.../expected.topo2.core:4.hwthread:2.out | 16 ++
.../expected.topo2.core:4.hwthread:4.out | 16 ++
.../expected.topo2.core:4.hwthread:8.out | 16 ++
.../expected.topo2.core:4.numa.out | 16 ++
.../expected.topo2.core:4.socket.out | 16 ++
.../expected.topo2.hwthread.board.out | 16 ++
.../expected.topo2.hwthread.core.out | 16 ++
.../expected.topo2.hwthread.core:2.out | 16 ++
.../expected.topo2.hwthread.core:4.out | 16 ++
.../expected.topo2.hwthread.hwthread.out | 16 ++
.../expected.topo2.hwthread.hwthread:2.out | 16 ++
.../expected.topo2.hwthread.hwthread:4.out | 16 ++
.../expected.topo2.hwthread.hwthread:8.out | 16 ++
.../expected.topo2.hwthread.numa.out | 16 ++
.../expected.topo2.hwthread.socket.out | 16 ++
.../expected.topo2.hwthread:2.board.out | 16 ++
.../expected.topo2.hwthread:2.core.out | 16 ++
.../expected.topo2.hwthread:2.core:2.out | 16 ++
.../expected.topo2.hwthread:2.core:4.out | 16 ++
.../expected.topo2.hwthread:2.hwthread.out | 16 ++
.../expected.topo2.hwthread:2.hwthread:2.out | 16 ++
.../expected.topo2.hwthread:2.hwthread:4.out | 16 ++
.../expected.topo2.hwthread:2.hwthread:8.out | 16 ++
.../expected.topo2.hwthread:2.numa.out | 16 ++
.../expected.topo2.hwthread:2.socket.out | 16 ++
.../expected.topo2.hwthread:4.board.out | 16 ++
.../expected.topo2.hwthread:4.core.out | 16 ++
.../expected.topo2.hwthread:4.core:2.out | 16 ++
.../expected.topo2.hwthread:4.core:4.out | 16 ++
.../expected.topo2.hwthread:4.hwthread.out | 16 ++
.../expected.topo2.hwthread:4.hwthread:2.out | 16 ++
.../expected.topo2.hwthread:4.hwthread:4.out | 16 ++
.../expected.topo2.hwthread:4.hwthread:8.out | 16 ++
.../expected.topo2.hwthread:4.numa.out | 16 ++
.../expected.topo2.hwthread:4.socket.out | 16 ++
.../expected.topo2.hwthread:8.board.out | 16 ++
.../expected.topo2.hwthread:8.core.out | 16 ++
.../expected.topo2.hwthread:8.core:2.out | 16 ++
.../expected.topo2.hwthread:8.core:4.out | 16 ++
.../expected.topo2.hwthread:8.hwthread.out | 16 ++
.../expected.topo2.hwthread:8.hwthread:2.out | 16 ++
.../expected.topo2.hwthread:8.hwthread:4.out | 16 ++
.../expected.topo2.hwthread:8.hwthread:8.out | 16 ++
.../expected.topo2.hwthread:8.numa.out | 16 ++
.../expected.topo2.hwthread:8.socket.out | 16 ++
.../expected.topo2.numa.board.out | 16 ++
.../binding_reference/expected.topo2.numa.core.out | 16 ++
.../expected.topo2.numa.core:2.out | 16 ++
.../expected.topo2.numa.core:4.out | 16 ++
.../expected.topo2.numa.hwthread.out | 16 ++
.../expected.topo2.numa.hwthread:2.out | 16 ++
.../expected.topo2.numa.hwthread:4.out | 16 ++
.../expected.topo2.numa.hwthread:8.out | 16 ++
.../binding_reference/expected.topo2.numa.numa.out | 16 ++
.../expected.topo2.numa.socket.out | 16 ++
.../expected.topo2.socket.board.out | 16 ++
.../expected.topo2.socket.core.out | 16 ++
.../expected.topo2.socket.core:2.out | 16 ++
.../expected.topo2.socket.core:4.out | 16 ++
.../expected.topo2.socket.hwthread.out | 16 ++
.../expected.topo2.socket.hwthread:2.out | 16 ++
.../expected.topo2.socket.hwthread:4.out | 16 ++
.../expected.topo2.socket.hwthread:8.out | 16 ++
.../expected.topo2.socket.numa.out | 16 ++
.../expected.topo2.socket.socket.out | 16 ++
.../expected.topo3.board.board.out | 16 ++
.../expected.topo3.board.core.out | 16 ++
.../expected.topo3.board.core:2.out | 16 ++
.../expected.topo3.board.core:4.out | 16 ++
.../expected.topo3.board.hwthread.out | 16 ++
.../expected.topo3.board.hwthread:2.out | 16 ++
.../expected.topo3.board.hwthread:4.out | 16 ++
.../expected.topo3.board.hwthread:8.out | 16 ++
.../expected.topo3.board.numa.out | 16 ++
.../expected.topo3.board.socket.out | 16 ++
.../expected.topo3.core.board.out | 16 ++
.../binding_reference/expected.topo3.core.core.out | 16 ++
.../expected.topo3.core.core:2.out | 16 ++
.../expected.topo3.core.core:4.out | 16 ++
.../expected.topo3.core.hwthread.out | 16 ++
.../expected.topo3.core.hwthread:2.out | 16 ++
.../expected.topo3.core.hwthread:4.out | 16 ++
.../expected.topo3.core.hwthread:8.out | 16 ++
.../binding_reference/expected.topo3.core.numa.out | 16 ++
.../expected.topo3.core.socket.out | 16 ++
.../expected.topo3.core:2.board.out | 16 ++
.../expected.topo3.core:2.core.out | 16 ++
.../expected.topo3.core:2.core:2.out | 16 ++
.../expected.topo3.core:2.core:4.out | 16 ++
.../expected.topo3.core:2.hwthread.out | 16 ++
.../expected.topo3.core:2.hwthread:2.out | 16 ++
.../expected.topo3.core:2.hwthread:4.out | 16 ++
.../expected.topo3.core:2.hwthread:8.out | 16 ++
.../expected.topo3.core:2.numa.out | 16 ++
.../expected.topo3.core:2.socket.out | 16 ++
.../expected.topo3.core:4.board.out | 16 ++
.../expected.topo3.core:4.core.out | 16 ++
.../expected.topo3.core:4.core:2.out | 16 ++
.../expected.topo3.core:4.core:4.out | 16 ++
.../expected.topo3.core:4.hwthread.out | 16 ++
.../expected.topo3.core:4.hwthread:2.out | 16 ++
.../expected.topo3.core:4.hwthread:4.out | 16 ++
.../expected.topo3.core:4.hwthread:8.out | 16 ++
.../expected.topo3.core:4.numa.out | 16 ++
.../expected.topo3.core:4.socket.out | 16 ++
.../expected.topo3.hwthread.board.out | 16 ++
.../expected.topo3.hwthread.core.out | 16 ++
.../expected.topo3.hwthread.core:2.out | 16 ++
.../expected.topo3.hwthread.core:4.out | 16 ++
.../expected.topo3.hwthread.hwthread.out | 16 ++
.../expected.topo3.hwthread.hwthread:2.out | 16 ++
.../expected.topo3.hwthread.hwthread:4.out | 16 ++
.../expected.topo3.hwthread.hwthread:8.out | 16 ++
.../expected.topo3.hwthread.numa.out | 16 ++
.../expected.topo3.hwthread.socket.out | 16 ++
.../expected.topo3.hwthread:2.board.out | 16 ++
.../expected.topo3.hwthread:2.core.out | 16 ++
.../expected.topo3.hwthread:2.core:2.out | 16 ++
.../expected.topo3.hwthread:2.core:4.out | 16 ++
.../expected.topo3.hwthread:2.hwthread.out | 16 ++
.../expected.topo3.hwthread:2.hwthread:2.out | 16 ++
.../expected.topo3.hwthread:2.hwthread:4.out | 16 ++
.../expected.topo3.hwthread:2.hwthread:8.out | 16 ++
.../expected.topo3.hwthread:2.numa.out | 16 ++
.../expected.topo3.hwthread:2.socket.out | 16 ++
.../expected.topo3.hwthread:4.board.out | 16 ++
.../expected.topo3.hwthread:4.core.out | 16 ++
.../expected.topo3.hwthread:4.core:2.out | 16 ++
.../expected.topo3.hwthread:4.core:4.out | 16 ++
.../expected.topo3.hwthread:4.hwthread.out | 16 ++
.../expected.topo3.hwthread:4.hwthread:2.out | 16 ++
.../expected.topo3.hwthread:4.hwthread:4.out | 16 ++
.../expected.topo3.hwthread:4.hwthread:8.out | 16 ++
.../expected.topo3.hwthread:4.numa.out | 16 ++
.../expected.topo3.hwthread:4.socket.out | 16 ++
.../expected.topo3.hwthread:8.board.out | 16 ++
.../expected.topo3.hwthread:8.core.out | 16 ++
.../expected.topo3.hwthread:8.core:2.out | 16 ++
.../expected.topo3.hwthread:8.core:4.out | 16 ++
.../expected.topo3.hwthread:8.hwthread.out | 16 ++
.../expected.topo3.hwthread:8.hwthread:2.out | 16 ++
.../expected.topo3.hwthread:8.hwthread:4.out | 16 ++
.../expected.topo3.hwthread:8.hwthread:8.out | 16 ++
.../expected.topo3.hwthread:8.numa.out | 16 ++
.../expected.topo3.hwthread:8.socket.out | 16 ++
.../expected.topo3.numa.board.out | 16 ++
.../binding_reference/expected.topo3.numa.core.out | 16 ++
.../expected.topo3.numa.core:2.out | 16 ++
.../expected.topo3.numa.core:4.out | 16 ++
.../expected.topo3.numa.hwthread.out | 16 ++
.../expected.topo3.numa.hwthread:2.out | 16 ++
.../expected.topo3.numa.hwthread:4.out | 16 ++
.../expected.topo3.numa.hwthread:8.out | 16 ++
.../binding_reference/expected.topo3.numa.numa.out | 16 ++
.../expected.topo3.numa.socket.out | 16 ++
.../expected.topo3.socket.board.out | 16 ++
.../expected.topo3.socket.core.out | 16 ++
.../expected.topo3.socket.core:2.out | 16 ++
.../expected.topo3.socket.core:4.out | 16 ++
.../expected.topo3.socket.hwthread.out | 16 ++
.../expected.topo3.socket.hwthread:2.out | 16 ++
.../expected.topo3.socket.hwthread:4.out | 16 ++
.../expected.topo3.socket.hwthread:8.out | 16 ++
.../expected.topo3.socket.numa.out | 16 ++
.../expected.topo3.socket.socket.out | 16 ++
.../expected.topo4.board.board.out | 16 ++
.../expected.topo4.board.core.out | 16 ++
.../expected.topo4.board.core:2.out | 16 ++
.../expected.topo4.board.core:4.out | 16 ++
.../expected.topo4.board.hwthread.out | 16 ++
.../expected.topo4.board.hwthread:2.out | 16 ++
.../expected.topo4.board.hwthread:4.out | 16 ++
.../expected.topo4.board.hwthread:8.out | 16 ++
.../expected.topo4.board.numa.out | 16 ++
.../expected.topo4.board.socket.out | 16 ++
.../expected.topo4.core.board.out | 16 ++
.../binding_reference/expected.topo4.core.core.out | 16 ++
.../expected.topo4.core.core:2.out | 16 ++
.../expected.topo4.core.core:4.out | 16 ++
.../expected.topo4.core.hwthread.out | 16 ++
.../expected.topo4.core.hwthread:2.out | 16 ++
.../expected.topo4.core.hwthread:4.out | 16 ++
.../expected.topo4.core.hwthread:8.out | 16 ++
.../binding_reference/expected.topo4.core.numa.out | 16 ++
.../expected.topo4.core.socket.out | 16 ++
.../expected.topo4.core:2.board.out | 16 ++
.../expected.topo4.core:2.core.out | 16 ++
.../expected.topo4.core:2.core:2.out | 16 ++
.../expected.topo4.core:2.core:4.out | 16 ++
.../expected.topo4.core:2.hwthread.out | 16 ++
.../expected.topo4.core:2.hwthread:2.out | 16 ++
.../expected.topo4.core:2.hwthread:4.out | 16 ++
.../expected.topo4.core:2.hwthread:8.out | 16 ++
.../expected.topo4.core:2.numa.out | 16 ++
.../expected.topo4.core:2.socket.out | 16 ++
.../expected.topo4.core:4.board.out | 16 ++
.../expected.topo4.core:4.core.out | 16 ++
.../expected.topo4.core:4.core:2.out | 16 ++
.../expected.topo4.core:4.core:4.out | 16 ++
.../expected.topo4.core:4.hwthread.out | 16 ++
.../expected.topo4.core:4.hwthread:2.out | 16 ++
.../expected.topo4.core:4.hwthread:4.out | 16 ++
.../expected.topo4.core:4.hwthread:8.out | 16 ++
.../expected.topo4.core:4.numa.out | 16 ++
.../expected.topo4.core:4.socket.out | 16 ++
.../expected.topo4.hwthread.board.out | 16 ++
.../expected.topo4.hwthread.core.out | 16 ++
.../expected.topo4.hwthread.core:2.out | 16 ++
.../expected.topo4.hwthread.core:4.out | 16 ++
.../expected.topo4.hwthread.hwthread.out | 16 ++
.../expected.topo4.hwthread.hwthread:2.out | 16 ++
.../expected.topo4.hwthread.hwthread:4.out | 16 ++
.../expected.topo4.hwthread.hwthread:8.out | 16 ++
.../expected.topo4.hwthread.numa.out | 16 ++
.../expected.topo4.hwthread.socket.out | 16 ++
.../expected.topo4.hwthread:2.board.out | 16 ++
.../expected.topo4.hwthread:2.core.out | 16 ++
.../expected.topo4.hwthread:2.core:2.out | 16 ++
.../expected.topo4.hwthread:2.core:4.out | 16 ++
.../expected.topo4.hwthread:2.hwthread.out | 16 ++
.../expected.topo4.hwthread:2.hwthread:2.out | 16 ++
.../expected.topo4.hwthread:2.hwthread:4.out | 16 ++
.../expected.topo4.hwthread:2.hwthread:8.out | 16 ++
.../expected.topo4.hwthread:2.numa.out | 16 ++
.../expected.topo4.hwthread:2.socket.out | 16 ++
.../expected.topo4.hwthread:4.board.out | 16 ++
.../expected.topo4.hwthread:4.core.out | 16 ++
.../expected.topo4.hwthread:4.core:2.out | 16 ++
.../expected.topo4.hwthread:4.core:4.out | 16 ++
.../expected.topo4.hwthread:4.hwthread.out | 16 ++
.../expected.topo4.hwthread:4.hwthread:2.out | 16 ++
.../expected.topo4.hwthread:4.hwthread:4.out | 16 ++
.../expected.topo4.hwthread:4.hwthread:8.out | 16 ++
.../expected.topo4.hwthread:4.numa.out | 16 ++
.../expected.topo4.hwthread:4.socket.out | 16 ++
.../expected.topo4.hwthread:8.board.out | 16 ++
.../expected.topo4.hwthread:8.core.out | 16 ++
.../expected.topo4.hwthread:8.core:2.out | 16 ++
.../expected.topo4.hwthread:8.core:4.out | 16 ++
.../expected.topo4.hwthread:8.hwthread.out | 16 ++
.../expected.topo4.hwthread:8.hwthread:2.out | 16 ++
.../expected.topo4.hwthread:8.hwthread:4.out | 16 ++
.../expected.topo4.hwthread:8.hwthread:8.out | 16 ++
.../expected.topo4.hwthread:8.numa.out | 16 ++
.../expected.topo4.hwthread:8.socket.out | 16 ++
.../expected.topo4.numa.board.out | 16 ++
.../binding_reference/expected.topo4.numa.core.out | 16 ++
.../expected.topo4.numa.core:2.out | 16 ++
.../expected.topo4.numa.core:4.out | 16 ++
.../expected.topo4.numa.hwthread.out | 16 ++
.../expected.topo4.numa.hwthread:2.out | 16 ++
.../expected.topo4.numa.hwthread:4.out | 16 ++
.../expected.topo4.numa.hwthread:8.out | 16 ++
.../binding_reference/expected.topo4.numa.numa.out | 16 ++
.../expected.topo4.numa.socket.out | 16 ++
.../expected.topo4.socket.board.out | 16 ++
.../expected.topo4.socket.core.out | 16 ++
.../expected.topo4.socket.core:2.out | 16 ++
.../expected.topo4.socket.core:4.out | 16 ++
.../expected.topo4.socket.hwthread.out | 16 ++
.../expected.topo4.socket.hwthread:2.out | 16 ++
.../expected.topo4.socket.hwthread:4.out | 16 ++
.../expected.topo4.socket.hwthread:8.out | 16 ++
.../expected.topo4.socket.numa.out | 16 ++
.../expected.topo4.socket.socket.out | 16 ++
test/mpi/impls/hydra/binding_reference/topo1.xml | 59 ++++++++
test/mpi/impls/hydra/binding_reference/topo2.xml | 150 ++++++++++++++++++++
test/mpi/impls/hydra/binding_reference/topo3.xml | 144 +++++++++++++++++++
test/mpi/impls/hydra/binding_reference/topo4.xml | 128 +++++++++++++++++
test/mpi/impls/hydra/dummy.c | 11 ++
test/mpi/impls/hydra/proc_binding.sh.in | 33 +++++
411 files changed, 6952 insertions(+), 6 deletions(-)
create mode 100644 test/mpi/impls/hydra/Makefile.am
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.board.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.core:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.hwthread:8.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.numa.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo1.socket.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.board.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.core:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.hwthread:8.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.numa.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo2.socket.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.board.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.core:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.hwthread:8.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.numa.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo3.socket.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.board.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.core:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:2.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:4.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.hwthread:8.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.numa.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.board.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.core:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:2.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:4.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.hwthread:8.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.numa.out
create mode 100644 test/mpi/impls/hydra/binding_reference/expected.topo4.socket.socket.out
create mode 100644 test/mpi/impls/hydra/binding_reference/topo1.xml
create mode 100644 test/mpi/impls/hydra/binding_reference/topo2.xml
create mode 100644 test/mpi/impls/hydra/binding_reference/topo3.xml
create mode 100644 test/mpi/impls/hydra/binding_reference/topo4.xml
create mode 100644 test/mpi/impls/hydra/dummy.c
create mode 100755 test/mpi/impls/hydra/proc_binding.sh.in
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-187-g201b0db
by noreply@mpich.org 27 Jan '14
by noreply@mpich.org 27 Jan '14
27 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 201b0dbfbcad7b1399eb64df6c0db3eb909ad787 (commit)
from bb755b5c68362cc472a13a1af4aab1ada720664f (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/201b0dbfbcad7b1399eb64df6c0db3eb9…
commit 201b0dbfbcad7b1399eb64df6c0db3eb909ad787
Author: Wesley Bland <wbland(a)mcs.anl.gov>
Date: Mon Jan 27 17:50:28 2014 -0600
Remove a comment that doesn't apply anymore.
No reviewer
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 786cdd8..4dc4c6e 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -116,13 +116,6 @@ typedef union {
* upper level code may then modify this value after MPID_Init and before the
* end of MPIR_Init_thread. Don't use this value directly, always check the
* runtime global value. */
-/* The first bit of the tag space is reserved for error propagation. We are
- * still well over the required tag size and this allows us to retain the
- * matching semantics while piggybacking the notification. If the message is
- * propagating an error, the data being transmitted is probably garbage. The
- * macros to set/access this bit are in src/include/mpiimpl.h. If the
- * location of this bit changes, those macros also need to be adjusted.
- */
#define MPIDI_TAG_UB (0x7fffffff)
/* Provides MPIDI_CH3_Pkt_t. Must come after MPIDI_Message_match definition. */
-----------------------------------------------------------------------
Summary of changes:
src/mpid/ch3/include/mpidpre.h | 7 -------
1 files changed, 0 insertions(+), 7 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-186-gbb755b5
by noreply@mpich.org 27 Jan '14
by noreply@mpich.org 27 Jan '14
27 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via bb755b5c68362cc472a13a1af4aab1ada720664f (commit)
from ca2d0bca0ac10a7ac411bdd6ad128ad6a2f2bd65 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/bb755b5c68362cc472a13a1af4aab1ada…
commit bb755b5c68362cc472a13a1af4aab1ada720664f
Author: Wesley Bland <wbland(a)mcs.anl.gov>
Date: Mon Jan 27 14:11:33 2014 -0600
Moves the tag reservation to MPI layer
Resets MPIDI_TAG_UB back to 0x7fffffff. This value was changed a while back,
but the change should have happened at the MPI layer instead of the CH3 layer.
This resets the value to allow CH3 to use the tag space.
Instead, the value is now set in the MPI layer during initthread. This means
that it will be safe regardless of the device being used. This prevents a
collision that was occurring on the pamid device where the values for
MPIR_TAG_ERROR_BIT and the MPIR_Process.attr.tagged_coll_mask values were the
same.
Fixes #2008
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/mpi/init/initthread.c b/src/mpi/init/initthread.c
index 231e214..413043c 100644
--- a/src/mpi/init/initthread.c
+++ b/src/mpi/init/initthread.c
@@ -469,8 +469,10 @@ int MPIR_Init_thread(int * argc, char ***argv, int required, int * provided)
/* Assert: tag_ub should be a power of 2 minus 1 */
MPIU_Assert(((unsigned)MPIR_Process.attrs.tag_ub & ((unsigned)MPIR_Process.attrs.tag_ub + 1)) == 0);
- /* Set aside tag space for tagged collectives */
- MPIR_Process.attrs.tag_ub >>= 1;
+ /* Set aside tag space for tagged collectives and failure notification */
+ MPIR_Process.attrs.tag_ub >>= 2;
+ /* The bit for error checking is set in a macro in mpiimpl.h for
+ * performance reasons. */
MPIR_Process.tagged_coll_mask = MPIR_Process.attrs.tag_ub + 1;
/* Assert: tag_ub is at least the minimum asked for in the MPI spec */
diff --git a/src/mpid/ch3/include/mpidpre.h b/src/mpid/ch3/include/mpidpre.h
index 4d93ae4..786cdd8 100644
--- a/src/mpid/ch3/include/mpidpre.h
+++ b/src/mpid/ch3/include/mpidpre.h
@@ -123,7 +123,7 @@ typedef union {
* macros to set/access this bit are in src/include/mpiimpl.h. If the
* location of this bit changes, those macros also need to be adjusted.
*/
-#define MPIDI_TAG_UB (0x3fffffff)
+#define MPIDI_TAG_UB (0x7fffffff)
/* Provides MPIDI_CH3_Pkt_t. Must come after MPIDI_Message_match definition. */
#include "mpidpkt.h"
-----------------------------------------------------------------------
Summary of changes:
src/mpi/init/initthread.c | 6 ++++--
src/mpid/ch3/include/mpidpre.h | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-185-gca2d0bc
by noreply@mpich.org 26 Jan '14
by noreply@mpich.org 26 Jan '14
26 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via ca2d0bca0ac10a7ac411bdd6ad128ad6a2f2bd65 (commit)
via 45cf8b90b10de7f3b0ef6278e3abc29b41295ef4 (commit)
via 486fb25941e6a615b60e6d70281cc6a28decd69b (commit)
via e35ab750b9cd0b0093e2aaad60cd44410f6911c8 (commit)
via 15aec608d167138bbe92b977e8b3f00fd342395f (commit)
via bec02c2a6a4c050875502a77bd1ed3bd040c286e (commit)
from b65699f50df5edc76f65514105e4f3e9df43acd2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/ca2d0bca0ac10a7ac411bdd6ad128ad6a…
commit ca2d0bca0ac10a7ac411bdd6ad128ad6a2f2bd65
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Tue Jan 21 14:31:57 2014 -0600
add debugging for process affinity options
Users can specify the envvar HYDRA_TOPO_DEBUG such that hydra will
print out the cpu bindings for an MPI job, then run without actually
binding the processes. This is useful for debugging with hwloc's
arbitrary topology loading functionality.
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
index 5645fa5..be8978f 100644
--- a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
+++ b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
@@ -6,6 +6,7 @@
*/
#include "hydra.h"
+#include "topo.h"
#include "topo_hwloc.h"
#define MAP_LENGTH (5)
@@ -165,8 +166,8 @@ static int parse_cache_string(const char *str)
static HYD_status handle_bitmap_binding(const char *binding, const char *mapping)
{
int i, j, k, bind_count, map_count, cache_depth = 0, bind_depth = 0, map_depth = 0;
- int total_num_pus, total_map_objs, total_bind_objs, num_pus_in_map_domain,
- num_pus_in_bind_domain, total_map_domains;
+ int total_map_objs, total_bind_objs, num_pus_in_map_domain, num_pus_in_bind_domain,
+ total_map_domains;
hwloc_obj_t map_obj, bind_obj, *start_pu;
hwloc_cpuset_t *map_domains;
char *bind_str, *map_str;
@@ -251,12 +252,11 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
*/
/* calculate the number of map domains */
- total_num_pus = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
-
total_map_objs = hwloc_get_nbobjs_by_depth(topology, map_depth);
- num_pus_in_map_domain = (total_num_pus / total_map_objs) * map_count;
- HYDU_ERR_CHKANDJUMP(status, num_pus_in_map_domain > total_num_pus, HYD_INTERNAL_ERROR,
- "mapping option \"%s\" larger than total system size\n", mapping);
+ num_pus_in_map_domain = (HYDT_topo_hwloc_info.total_num_pus / total_map_objs) * map_count;
+ HYDU_ERR_CHKANDJUMP(status, num_pus_in_map_domain > HYDT_topo_hwloc_info.total_num_pus,
+ HYD_INTERNAL_ERROR, "mapping option \"%s\" larger than total system size\n",
+ mapping);
/* The number of total_map_domains should be large enough to
* contain all contiguous map object collections of length
@@ -307,11 +307,12 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
/* calculate the number of possible bindings and allocate bitmaps for them */
total_bind_objs = hwloc_get_nbobjs_by_depth(topology, bind_depth);
- num_pus_in_bind_domain = (total_num_pus / total_bind_objs) * bind_count;
+ num_pus_in_bind_domain = (HYDT_topo_hwloc_info.total_num_pus / total_bind_objs) * bind_count;
if (num_pus_in_bind_domain < num_pus_in_map_domain) {
for (i = 1; (i * num_pus_in_map_domain) % num_pus_in_bind_domain; i++);
- HYDT_topo_hwloc_info.num_bitmaps = (i * num_pus_in_map_domain * total_map_domains) / num_pus_in_bind_domain;
+ HYDT_topo_hwloc_info.num_bitmaps =
+ (i * num_pus_in_map_domain * total_map_domains) / num_pus_in_bind_domain;
}
else {
HYDT_topo_hwloc_info.num_bitmaps = total_map_domains;
@@ -393,6 +394,8 @@ HYD_status HYDT_topo_hwloc_init(const char *binding, const char *mapping, const
hwloc_topology_init(&topology);
hwloc_topology_load(topology);
+ HYDT_topo_hwloc_info.total_num_pus = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
+
hwloc_initialized = 1;
/* bindings that don't require mapping */
@@ -450,9 +453,24 @@ HYD_status HYDT_topo_hwloc_bind(int idx)
/* For processes where the user did not specify a binding unit, no binding is needed. */
if (!HYDT_topo_hwloc_info.user_binding || (idx < HYDT_topo_hwloc_info.num_bitmaps)) {
id = idx % HYDT_topo_hwloc_info.num_bitmaps;
- hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
- hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id], HYDT_topo_hwloc_info.membind,
- 0);
+
+ /* For debugging, print the binding bitmaps but don't actually bind. */
+ if (HYDT_topo_info.debug) {
+ int i;
+
+ HYDU_dump_noprefix(stdout, "process %d binding: ", idx);
+
+ for (i = 0; i < HYDT_topo_hwloc_info.total_num_pus; i++)
+ HYDU_dump_noprefix(stdout, "%d ",
+ hwloc_bitmap_isset(HYDT_topo_hwloc_info.bitmap[id], i));
+
+ HYDU_dump_noprefix(stdout, "\n");
+ }
+ else {
+ hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
+ hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id],
+ HYDT_topo_hwloc_info.membind, 0);
+ }
}
HYDU_FUNC_EXIT();
diff --git a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h
index 5147ad9..ecef20c 100644
--- a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h
+++ b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h
@@ -19,6 +19,7 @@ struct HYDT_topo_hwloc_info {
hwloc_bitmap_t *bitmap;
hwloc_membind_policy_t membind;
int user_binding;
+ int total_num_pus;
};
extern struct HYDT_topo_hwloc_info HYDT_topo_hwloc_info;
diff --git a/src/pm/hydra/tools/topo/topo.c b/src/pm/hydra/tools/topo/topo.c
index 384dadb..72a26de 100644
--- a/src/pm/hydra/tools/topo/topo.c
+++ b/src/pm/hydra/tools/topo/topo.c
@@ -47,6 +47,8 @@ HYD_status HYDT_topo_init(char *user_topolib, char *user_binding, char *user_map
else if (MPL_env2str("HYDRA_MEMBIND", &membind) == 0)
membind = NULL;
+ if (MPL_env2bool("HYDRA_TOPO_DEBUG", &HYDT_topo_info.debug) == 0)
+ HYDT_topo_info.debug = 0;
if (!binding || !strcmp(binding, "none")) {
ignore_binding = 1;
diff --git a/src/pm/hydra/tools/topo/topo.h b/src/pm/hydra/tools/topo/topo.h
index 7436ded..deeff79 100644
--- a/src/pm/hydra/tools/topo/topo.h
+++ b/src/pm/hydra/tools/topo/topo.h
@@ -24,6 +24,8 @@
struct HYDT_topo_info {
/** \brief Topology library to use */
char *topolib;
+ /** \brief Enable debugging output */
+ int debug;
};
/*! \cond */
http://git.mpich.org/mpich.git/commitdiff/45cf8b90b10de7f3b0ef6278e3abc29b4…
commit 45cf8b90b10de7f3b0ef6278e3abc29b41295ef4
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Fri Jan 17 14:00:38 2014 -0600
remove help text for unsupported mapping option
Hydra does not currently support user-defined process mapping strings.
Remove the help text for now.
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/pm/hydra/ui/mpich/utils.c b/src/pm/hydra/ui/mpich/utils.c
index cf6c797..7941673 100644
--- a/src/pm/hydra/ui/mpich/utils.c
+++ b/src/pm/hydra/ui/mpich/utils.c
@@ -926,8 +926,6 @@ static void bind_to_help_fn(void)
printf(" l1cache -- map to L1 cache domain\n");
printf(" l2cache -- map to L2 cache domain\n");
printf(" l3cache -- map to L3 cache domain\n");
- printf(" TCSNB -- map in order of T, C, S, N, B\n");
- printf(" CTSNB -- map in order of C, T, S, N, B\n");
printf("\n\n");
http://git.mpich.org/mpich.git/commitdiff/486fb25941e6a615b60e6d70281cc6a28…
commit 486fb25941e6a615b60e6d70281cc6a28decd69b
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Thu Jan 23 18:35:36 2014 -0600
White space cleanup.
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/pm/hydra/examples/binding.c b/src/pm/hydra/examples/binding.c
index 85884b3..53880d7 100644
--- a/src/pm/hydra/examples/binding.c
+++ b/src/pm/hydra/examples/binding.c
@@ -27,8 +27,7 @@ int main(int argc, char **argv)
num_cpus = atoi(argv[1]);
argv += 2;
}
- else if (!strcmp(argv[0], "--help") || !strcmp(argv[0], "-help") ||
- !strcmp(argv[0], "-h")) {
+ else if (!strcmp(argv[0], "--help") || !strcmp(argv[0], "-help") || !strcmp(argv[0], "-h")) {
fprintf(stderr, "Usage: ./binding {--num-cpus [CPUs]}\n");
MPI_Abort(MPI_COMM_WORLD, -1);
}
diff --git a/src/pm/hydra/examples/print_cpus_allowed.c b/src/pm/hydra/examples/print_cpus_allowed.c
index 4035b9b..9e5b6f2 100644
--- a/src/pm/hydra/examples/print_cpus_allowed.c
+++ b/src/pm/hydra/examples/print_cpus_allowed.c
@@ -13,12 +13,12 @@ int main(int argc, char **argv)
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Get_processor_name(processor_name,&namelen);
+ MPI_Get_processor_name(processor_name, &namelen);
fp = popen("grep Cpus_allowed_list /proc/$$/status", "r");
while (fgets(path, PATH_MAX, fp) != NULL) {
- printf("%s[%d]: %s", processor_name, rank, path);
+ printf("%s[%d]: %s", processor_name, rank, path);
}
pclose(fp);
http://git.mpich.org/mpich.git/commitdiff/e35ab750b9cd0b0093e2aaad60cd44410…
commit e35ab750b9cd0b0093e2aaad60cd44410f6911c8
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Thu Jan 16 23:33:12 2014 -0600
hydra process binding/mapping overhaul
Significant rework of the process binding/mapping features in hydra.
There were a number of bugs in the existing code. This commit addresses
them and simplifies the binding/mapping logic.
It also makes binding/mapping options more permissive. If a user
specifies a system element that does not exist in the process affinity
options, use the next largest element in the topology. This makes
things safer for systems in which hwloc does not report certain
elements, e.g., as an Haswell-based MBP that shows no sockets, but
does have a NUMA node.
Other comments:
1. User-defined mapping strings (e.g. TCSNB) are no longer supported.
Support may be added back at a later time, depending on user feedback.
2. Properly support cache-level binding/mapping. To accomodate all levels
of processor cache, we define objects by their absolute depth in the
topology.
3. Allocate the correct number of binding/mapping combinations given
the user-provided options, and populate them accordingly.
Refs #1858
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
index 4af224e..5645fa5 100644
--- a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
+++ b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
@@ -69,8 +69,7 @@ static HYD_status handle_user_binding(const char *binding)
hwloc_bitmap_zero(HYDT_topo_hwloc_info.bitmap[i]);
bindstr = strtok(bind_entries[i], "+");
while (bindstr) {
- hwloc_bitmap_set(HYDT_topo_hwloc_info.bitmap[i],
- atoi(bindstr));
+ hwloc_bitmap_set(HYDT_topo_hwloc_info.bitmap[i], atoi(bindstr));
bindstr = strtok(NULL, "+");
}
}
@@ -78,6 +77,13 @@ static HYD_status handle_user_binding(const char *binding)
HYDT_topo_hwloc_info.num_bitmaps = num_bind_entries;
HYDT_topo_hwloc_info.user_binding = 1;
+ /* free temporary memory */
+ for (i = 0; i < num_bind_entries; i++) {
+ HYDU_FREE(bind_entries[i]);
+ }
+ HYDU_FREE(bind_entries);
+ HYDU_FREE(bind_entry_lengths);
+
fn_exit:
HYDU_FUNC_EXIT();
return status;
@@ -114,93 +120,6 @@ static HYD_status handle_rr_binding(void)
goto fn_exit;
}
-static hwloc_obj_t find_obj_containing_pu(hwloc_obj_type_t type, int idx, int cache_depth)
-{
- int i;
- hwloc_obj_t obj;
-
- obj = hwloc_get_root_obj(topology);
- if (!obj || !hwloc_bitmap_isset(obj->cpuset, idx))
- return NULL;
-
- while (obj) {
- if (obj->type == type)
- if (type != HWLOC_OBJ_CACHE || obj->attr->cache.depth == cache_depth)
- break;
- for (i = 0; i < obj->arity; i++) {
- if (hwloc_bitmap_isset(obj->children[i]->cpuset, idx)) {
- obj = obj->children[i];
- break;
- }
- }
- }
-
- return obj;
-}
-
-static HYD_status get_nbobjs_by_type(hwloc_obj_type_t type, int *nbobjs, int *nbobjs_per_parent)
-{
- int x, nb;
- hwloc_obj_type_t parent, t;
- HYD_status status = HYD_SUCCESS;
-
- HYDU_FUNC_ENTER();
-
- parent = HWLOC_OBJ_SYSTEM;
-
- if (type == HWLOC_OBJ_PU)
- parent = HWLOC_OBJ_CORE;
- else if (type == HWLOC_OBJ_CORE)
- parent = HWLOC_OBJ_SOCKET;
- else if (type == HWLOC_OBJ_SOCKET)
- parent = HWLOC_OBJ_NODE;
- else if (type == HWLOC_OBJ_NODE)
- parent = HWLOC_OBJ_MACHINE;
- else if (type == HWLOC_OBJ_MACHINE)
- parent = HWLOC_OBJ_MACHINE;
-
- HYDU_ASSERT(parent != HWLOC_OBJ_SYSTEM, status);
-
- nb = 0;
- t = type;
- while (1) {
- nb = hwloc_get_nbobjs_by_type(topology, t);
- if (nb)
- break;
- if (t == HWLOC_OBJ_SYSTEM)
- break;
- while (--t == HWLOC_OBJ_CACHE);
- }
- HYDU_ASSERT(nb, status);
- if (nbobjs)
- *nbobjs = nb;
-
- if (nbobjs_per_parent == NULL)
- goto fn_exit;
-
- x = 0;
- t = parent;
- while (1) {
- x = hwloc_get_nbobjs_by_type(topology, t);
- if (x)
- break;
- while (--t == HWLOC_OBJ_CACHE);
- if (t == HWLOC_OBJ_SYSTEM)
- break;
- }
- HYDU_ASSERT(x, status);
- HYDU_ASSERT(nb % x == 0, status);
-
- *nbobjs_per_parent = (nb / x);
-
- fn_exit:
- HYDU_FUNC_EXIT();
- return status;
-
- fn_fail:
- goto fn_exit;
-}
-
static HYD_status split_count_field(const char *str, char **split_str, int *count)
{
char *full_str = HYDU_strdup(str), *count_str;
@@ -243,118 +162,13 @@ static int parse_cache_string(const char *str)
return atoi(t1);
}
-static HYD_status cache_to_cpu_type(int cache_depth, hwloc_obj_type_t * cpu_type)
-{
- hwloc_obj_t cache_obj, cpu_obj;
- HYD_status status = HYD_SUCCESS;
-
- HYDU_FUNC_ENTER();
-
- cache_obj = hwloc_get_root_obj(topology);
- HYDU_ASSERT(cache_obj, status);
-
- while (cache_obj && cache_obj->type != HWLOC_OBJ_CACHE &&
- cache_obj->attr->cache.depth != cache_depth)
- cache_obj = cache_obj->first_child;
- if (cache_obj == NULL) {
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "cache level %d not found\n", cache_depth);
- }
-
- cpu_obj = hwloc_get_root_obj(topology);
- HYDU_ASSERT(cpu_obj, status);
-
- while (cpu_obj && cpu_obj->type == HWLOC_OBJ_CACHE &&
- !hwloc_bitmap_isequal(cpu_obj->cpuset, cache_obj->cpuset))
- cpu_obj = cpu_obj->first_child;
- if (cpu_obj == NULL) {
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
- "could not find cpu type that maps cache\n");
- }
-
- *cpu_type = cpu_obj->type;
-
- fn_exit:
- HYDU_FUNC_EXIT();
- return status;
-
- fn_fail:
- goto fn_exit;
-}
-
-static HYD_status obj_type_to_map_str(hwloc_obj_type_t type, int cache_depth, char **map)
-{
- hwloc_obj_type_t cpu_type;
- HYD_status status = HYD_SUCCESS;
-
- HYDU_FUNC_ENTER();
-
- if (type == HWLOC_OBJ_MACHINE) {
- *map = HYDU_strdup("BTCSN");
- goto fn_exit;
- }
- else if (type == HWLOC_OBJ_NODE) {
- *map = HYDU_strdup("NTCSB");
- goto fn_exit;
- }
- else if (type == HWLOC_OBJ_SOCKET) {
- *map = HYDU_strdup("STCNB");
- goto fn_exit;
- }
- else if (type == HWLOC_OBJ_CORE) {
- *map = HYDU_strdup("CTSNB");
- goto fn_exit;
- }
- else if (type == HWLOC_OBJ_PU) {
- *map = HYDU_strdup("TCSNB");
- goto fn_exit;
- }
-
- HYDU_ASSERT(type == HWLOC_OBJ_CACHE, status);
-
- status = cache_to_cpu_type(cache_depth, &cpu_type);
- HYDU_ERR_POP(status, "error while mapping cache to cpu object\n");
-
- status = obj_type_to_map_str(cpu_type, cache_depth, map);
- HYDU_ERR_POP(status, "error while mapping object to map string\n");
-
- fn_exit:
- HYDU_FUNC_EXIT();
- return status;
-
- fn_fail:
- goto fn_exit;
-}
-
-static int balance_obj_idx(int *obj_idx, int *nbobjs_per_parent)
-{
- int i, ret;
-
- ret = 0;
- for (i = 0; i < MAP_LENGTH - 1; i++) {
- while (obj_idx[i] >= nbobjs_per_parent[i]) {
- obj_idx[i] -= nbobjs_per_parent[i];
- obj_idx[i + 1]++;
- }
- while (obj_idx[i] < 0) {
- obj_idx[i] += nbobjs_per_parent[i];
- obj_idx[i + 1]--;
- }
- }
- while (obj_idx[MAP_LENGTH - 1] >= nbobjs_per_parent[MAP_LENGTH - 1]) {
- obj_idx[MAP_LENGTH - 1] -= nbobjs_per_parent[MAP_LENGTH - 1];
- ret = 1;
- }
-
- return ret;
-}
-
static HYD_status handle_bitmap_binding(const char *binding, const char *mapping)
{
- int i, j, k, idx, bind_count, map_count, cache_depth = 0;
- hwloc_obj_t obj;
- hwloc_obj_type_t bind_obj_type;
- int total_nbobjs[MAP_LENGTH], obj_idx[MAP_LENGTH], nbpu_per_obj[MAP_LENGTH];
- int nbobjs_per_parent[MAP_LENGTH];
+ int i, j, k, bind_count, map_count, cache_depth = 0, bind_depth = 0, map_depth = 0;
+ int total_num_pus, total_map_objs, total_bind_objs, num_pus_in_map_domain,
+ num_pus_in_bind_domain, total_map_domains;
+ hwloc_obj_t map_obj, bind_obj, *start_pu;
+ hwloc_cpuset_t *map_domains;
char *bind_str, *map_str;
HYD_status status = HYD_SUCCESS;
@@ -370,15 +184,15 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
/* get the binding object */
if (!strcmp(bind_str, "board"))
- bind_obj_type = HWLOC_OBJ_MACHINE;
+ bind_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_MACHINE);
else if (!strcmp(bind_str, "numa"))
- bind_obj_type = HWLOC_OBJ_NODE;
+ bind_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_NODE);
else if (!strcmp(bind_str, "socket"))
- bind_obj_type = HWLOC_OBJ_SOCKET;
+ bind_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SOCKET);
else if (!strcmp(bind_str, "core"))
- bind_obj_type = HWLOC_OBJ_CORE;
+ bind_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_CORE);
else if (!strcmp(bind_str, "hwthread"))
- bind_obj_type = HWLOC_OBJ_PU;
+ bind_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_PU);
else {
/* check if it's in the l*cache format */
cache_depth = parse_cache_string(bind_str);
@@ -386,56 +200,124 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
"unrecognized binding string \"%s\"\n", binding);
}
- bind_obj_type = HWLOC_OBJ_CACHE;
+ bind_depth = hwloc_get_cache_type_depth(topology, cache_depth, -1);
+ }
+
+ /* get the mapping */
+ if (!strcmp(map_str, "board"))
+ map_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_MACHINE);
+ else if (!strcmp(map_str, "numa"))
+ map_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_NODE);
+ else if (!strcmp(map_str, "socket"))
+ map_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SOCKET);
+ else if (!strcmp(map_str, "core"))
+ map_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_CORE);
+ else if (!strcmp(map_str, "hwthread"))
+ map_depth = hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_PU);
+ else {
+ cache_depth = parse_cache_string(map_str);
+ if (!cache_depth) {
+ HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
+ "unrecognized mapping string \"%s\"\n", mapping);
+ }
+ map_depth = hwloc_get_cache_type_depth(topology, cache_depth, -1);
+ }
+
+ /*
+ * Process Affinity Algorithm:
+ *
+ * The code below works in 3 stages. The end result is an array of all the possible
+ * binding bitmaps for a system, based on the options specified.
+ *
+ * 1. Define all possible mapping "domains" in a system. A mapping domain is a group
+ * of hardware elements found by traversing the topology. Each traversal skips the
+ * number of elements the user specified in the mapping string. The traversal ends
+ * when the next mapping domain == the first mapping domain. Note that if the
+ * mapping string defines a domain that is larger than the system size, we exit
+ * with an error.
+ *
+ * 2. Define the number of possible binding domains within a mapping domain. This
+ * process is similar to step 1, in that we traverse the mapping domain finding
+ * all possible bind combinations, stopping when a duplicate of the first binding
+ * is reached. If a binding is larger (in # of PUs) than the mapping domain,
+ * the number of possible bindings for that domain is 1. In this stage, we also
+ * locate the first PU in each mapping domain for use later during binding.
+ *
+ * 3. Create the binding bitmaps. We allocate an array of bitmaps and fill them in
+ * with all possible bindings. The starting PU in each mapping domain is advanced
+ * if and when we wrap around to the beginning of the mapping domains. This ensures
+ * that we do not repeat.
+ *
+ */
+
+ /* calculate the number of map domains */
+ total_num_pus = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
+
+ total_map_objs = hwloc_get_nbobjs_by_depth(topology, map_depth);
+ num_pus_in_map_domain = (total_num_pus / total_map_objs) * map_count;
+ HYDU_ERR_CHKANDJUMP(status, num_pus_in_map_domain > total_num_pus, HYD_INTERNAL_ERROR,
+ "mapping option \"%s\" larger than total system size\n", mapping);
+
+ /* The number of total_map_domains should be large enough to
+ * contain all contiguous map object collections of length
+ * map_count. For example, if the map object is "socket" and the
+ * map_count is 3, on a system with 4 sockets, the following map
+ * domains should be included: (0,1,2), (3,0,1), (2,3,0), (1,2,3).
+ * We do this by finding how many times we need to replicate the
+ * list of the map objects so that an integral number of map
+ * domains can map to them. In the above case, the list of map
+ * objects is replicated 3 times. */
+ for (i = 1; (i * total_map_objs) % map_count; i++);
+ total_map_domains = (i * total_map_objs) / map_count;
+
+ /* initialize the map domains */
+ HYDU_MALLOC(map_domains, hwloc_bitmap_t *, total_map_domains * sizeof(hwloc_bitmap_t), status);
+ HYDU_MALLOC(start_pu, hwloc_obj_t *, total_map_domains * sizeof(hwloc_obj_t), status);
+
+ /* For each map domain, find the next map object (first map object
+ * for the first map domain) and add the following "map_count"
+ * number of contiguous map objects, wrapping to the first one if
+ * needed, to the map domain. Store the first PU in the first map
+ * object of the map domain as "start_pu". This is needed later
+ * for the actual binding. */
+ map_obj = NULL;
+ for (i = 0; i < total_map_domains; i++) {
+ map_domains[i] = hwloc_bitmap_alloc();
+ hwloc_bitmap_zero(map_domains[i]);
+
+ for (j = 0; j < map_count; j++) {
+ map_obj = hwloc_get_next_obj_by_depth(topology, map_depth, map_obj);
+ /* map_obj will be NULL if it reaches the end. call again to wrap around */
+ if (!map_obj)
+ map_obj = hwloc_get_next_obj_by_depth(topology, map_depth, map_obj);
+
+ if (j == 0)
+ start_pu[i] =
+ hwloc_get_obj_inside_cpuset_by_type(topology, map_obj->cpuset, HWLOC_OBJ_PU, 0);
+
+ hwloc_bitmap_or(map_domains[i], map_domains[i], map_obj->cpuset);
+ }
}
- /* get the mapping string */
- if (!strcmp(map_str, "board")) {
- HYDU_FREE(map_str);
- obj_type_to_map_str(HWLOC_OBJ_MACHINE, 0, &map_str);
- }
- else if (!strcmp(map_str, "numa")) {
- HYDU_FREE(map_str);
- obj_type_to_map_str(HWLOC_OBJ_NODE, 0, &map_str);
- }
- else if (!strcmp(map_str, "socket")) {
- HYDU_FREE(map_str);
- obj_type_to_map_str(HWLOC_OBJ_SOCKET, 0, &map_str);
- }
- else if (!strcmp(map_str, "core")) {
- HYDU_FREE(map_str);
- obj_type_to_map_str(HWLOC_OBJ_CORE, 0, &map_str);
- }
- else if (!strcmp(map_str, "hwthread")) {
- HYDU_FREE(map_str);
- obj_type_to_map_str(HWLOC_OBJ_PU, 0, &map_str);
+ /* Find the possible binding domains is similar to that of map
+ * domains. But if a binding domain is larger (in # of PUs) than
+ * the mapping domain, the number of possible bindings for that
+ * domain is 1. */
+
+ /* calculate the number of possible bindings and allocate bitmaps for them */
+ total_bind_objs = hwloc_get_nbobjs_by_depth(topology, bind_depth);
+ num_pus_in_bind_domain = (total_num_pus / total_bind_objs) * bind_count;
+
+ if (num_pus_in_bind_domain < num_pus_in_map_domain) {
+ for (i = 1; (i * num_pus_in_map_domain) % num_pus_in_bind_domain; i++);
+ HYDT_topo_hwloc_info.num_bitmaps = (i * num_pus_in_map_domain * total_map_domains) / num_pus_in_bind_domain;
}
else {
- cache_depth = parse_cache_string(map_str);
- if (cache_depth) {
- HYDU_FREE(map_str);
- obj_type_to_map_str(HWLOC_OBJ_CACHE, cache_depth, &map_str);
- }
- else {
- for (i = 0; i < strlen(map_str); i++) {
- if (map_str[i] >= 'a' && map_str[i] <= 'z')
- map_str[i] += ('A' - 'a');
-
- /* If any of the characters are not in the form, we
- * want, return an error */
- if (map_str[i] != 'T' && map_str[i] != 'C' && map_str[i] != 'S' &&
- map_str[i] != 'N' && map_str[i] != 'B') {
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
- "unrecognized mapping string \"%s\"\n", mapping);
- }
- }
- }
+ HYDT_topo_hwloc_info.num_bitmaps = total_map_domains;
}
/* initialize bitmaps */
- HYDT_topo_hwloc_info.num_bitmaps = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
-
HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
@@ -444,44 +326,53 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
hwloc_bitmap_zero(HYDT_topo_hwloc_info.bitmap[i]);
}
- for (i = 0; i < MAP_LENGTH; i++) {
- if (map_str[i] == 'T')
- status = get_nbobjs_by_type(HWLOC_OBJ_PU, &total_nbobjs[i], &nbobjs_per_parent[i]);
- else if (map_str[i] == 'C')
- status = get_nbobjs_by_type(HWLOC_OBJ_CORE, &total_nbobjs[i], &nbobjs_per_parent[i]);
- else if (map_str[i] == 'S')
- status = get_nbobjs_by_type(HWLOC_OBJ_SOCKET, &total_nbobjs[i], &nbobjs_per_parent[i]);
- else if (map_str[i] == 'N')
- status = get_nbobjs_by_type(HWLOC_OBJ_NODE, &total_nbobjs[i], &nbobjs_per_parent[i]);
- else if (map_str[i] == 'B')
- status = get_nbobjs_by_type(HWLOC_OBJ_MACHINE, &total_nbobjs[i], &nbobjs_per_parent[i]);
- HYDU_ERR_POP(status, "unable to get number of objects\n");
-
- nbpu_per_obj[i] = HYDT_topo_hwloc_info.num_bitmaps / total_nbobjs[i];
- obj_idx[i] = 0;
- }
-
+ /* do bindings */
i = 0;
while (i < HYDT_topo_hwloc_info.num_bitmaps) {
- for (j = 0; j < bind_count; j++) {
- for (idx = 0, k = 0; k < MAP_LENGTH; k++)
- idx += (obj_idx[k] * nbpu_per_obj[k]);
-
- obj = find_obj_containing_pu(bind_obj_type, idx++, cache_depth);
- if (obj == NULL)
- break;
-
- hwloc_bitmap_or(HYDT_topo_hwloc_info.bitmap[i], HYDT_topo_hwloc_info.bitmap[i],
- obj->cpuset);
+ for (j = 0; j < total_map_domains; j++) {
+ bind_obj = hwloc_get_ancestor_obj_by_depth(topology, bind_depth, start_pu[j]);
+
+ for (k = 0; k < bind_count; k++) {
+ hwloc_bitmap_or(HYDT_topo_hwloc_info.bitmap[i], HYDT_topo_hwloc_info.bitmap[i],
+ bind_obj->cpuset);
+
+ /* if the binding is smaller than the mapping domain, wrap around inside that domain */
+ if (num_pus_in_bind_domain < num_pus_in_map_domain) {
+ bind_obj =
+ hwloc_get_next_obj_inside_cpuset_by_depth(topology, map_domains[j],
+ bind_depth, bind_obj);
+ if (!bind_obj)
+ bind_obj =
+ hwloc_get_next_obj_inside_cpuset_by_depth(topology, map_domains[j],
+ bind_depth, bind_obj);
+ }
+ else {
+ bind_obj = hwloc_get_next_obj_by_depth(topology, bind_depth, bind_obj);
+ if (!bind_obj)
+ bind_obj = hwloc_get_next_obj_by_depth(topology, bind_depth, bind_obj);
+ }
- obj_idx[0] += map_count;
- balance_obj_idx(obj_idx, nbobjs_per_parent);
+ }
+ i++;
+
+ /* advance the starting position for this map domain, if needed */
+ if (num_pus_in_bind_domain < num_pus_in_map_domain) {
+ for (k = 0; k < num_pus_in_bind_domain; k++) {
+ start_pu[j] = hwloc_get_next_obj_inside_cpuset_by_type(topology, map_domains[j],
+ HWLOC_OBJ_PU,
+ start_pu[j]);
+ if (!start_pu[j])
+ start_pu[j] =
+ hwloc_get_next_obj_inside_cpuset_by_type(topology, map_domains[j],
+ HWLOC_OBJ_PU, start_pu[j]);
+ }
+ }
}
- i++;
}
- /* reset the number of bitmaps available to what we actually set */
- HYDT_topo_hwloc_info.num_bitmaps = i;
+ /* free temporary memory */
+ HYDU_FREE(map_domains);
+ HYDU_FREE(start_pu);
fn_exit:
HYDU_FUNC_EXIT();
@@ -560,7 +451,8 @@ HYD_status HYDT_topo_hwloc_bind(int idx)
if (!HYDT_topo_hwloc_info.user_binding || (idx < HYDT_topo_hwloc_info.num_bitmaps)) {
id = idx % HYDT_topo_hwloc_info.num_bitmaps;
hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
- hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id], HYDT_topo_hwloc_info.membind, 0);
+ hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id], HYDT_topo_hwloc_info.membind,
+ 0);
}
HYDU_FUNC_EXIT();
http://git.mpich.org/mpich.git/commitdiff/15aec608d167138bbe92b977e8b3f00fd…
commit 15aec608d167138bbe92b977e8b3f00fd342395f
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Fri Jan 17 10:58:02 2014 -0600
example program to display processor affinity
Add a program in the hydra examples directory for use with the hydra
binding/mapping options. This program will print out which CPUs it
is allowed to run on according to the OS.
Refs #1858
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/pm/hydra/examples/print_cpus_allowed.c b/src/pm/hydra/examples/print_cpus_allowed.c
new file mode 100644
index 0000000..4035b9b
--- /dev/null
+++ b/src/pm/hydra/examples/print_cpus_allowed.c
@@ -0,0 +1,31 @@
+#define PATH_MAX 1000
+
+#include "mpi.h"
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+ int rank, size, namelen;
+ FILE *fp;
+ char path[PATH_MAX];
+ char processor_name[MPI_MAX_PROCESSOR_NAME];
+
+ MPI_Init(&argc, &argv);
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+
+ MPI_Get_processor_name(processor_name,&namelen);
+
+ fp = popen("grep Cpus_allowed_list /proc/$$/status", "r");
+
+ while (fgets(path, PATH_MAX, fp) != NULL) {
+ printf("%s[%d]: %s", processor_name, rank, path);
+ }
+
+ pclose(fp);
+
+ fflush(stdout);
+
+ MPI_Finalize();
+
+ return 0;
+}
http://git.mpich.org/mpich.git/commitdiff/bec02c2a6a4c050875502a77bd1ed3bd0…
commit bec02c2a6a4c050875502a77bd1ed3bd040c286e
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Thu Jan 2 23:36:05 2014 -0600
simplify bitmap intialization in process binding
Move the bitmap allocation out of init so we can correctly allocate
what is needed for a user binding. Remove unnecessary duplicate code
and use simpler hwloc provided functions where possible.
Refs #1858
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
index 38da519..4af224e 100644
--- a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
+++ b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.c
@@ -23,15 +23,7 @@ static HYD_status handle_user_binding(const char *binding)
HYDU_FUNC_ENTER();
- HYDT_topo_hwloc_info.num_bitmaps = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
- HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
- HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
-
- /* Initialize all values to map to all CPUs */
- for (i = 0; i < HYDT_topo_hwloc_info.num_bitmaps; i++) {
- HYDT_topo_hwloc_info.bitmap[i] = hwloc_bitmap_alloc();
- hwloc_bitmap_zero(HYDT_topo_hwloc_info.bitmap[i]);
- }
+ HYDU_ASSERT(hwloc_initialized, status);
num_bind_entries = 1;
for (i = 0; binding[i]; i++)
@@ -68,16 +60,24 @@ static HYD_status handle_user_binding(const char *binding)
}
bind_entries[j][k++] = 0;
+ /* initialize bitmaps */
+ HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
+ num_bind_entries * sizeof(hwloc_bitmap_t), status);
for (i = 0; i < num_bind_entries; i++) {
+ HYDT_topo_hwloc_info.bitmap[i] = hwloc_bitmap_alloc();
+ hwloc_bitmap_zero(HYDT_topo_hwloc_info.bitmap[i]);
bindstr = strtok(bind_entries[i], "+");
while (bindstr) {
hwloc_bitmap_set(HYDT_topo_hwloc_info.bitmap[i],
- atoi(bindstr) % HYDT_topo_hwloc_info.num_bitmaps);
+ atoi(bindstr));
bindstr = strtok(NULL, "+");
}
}
+ HYDT_topo_hwloc_info.num_bitmaps = num_bind_entries;
+ HYDT_topo_hwloc_info.user_binding = 1;
+
fn_exit:
HYDU_FUNC_EXIT();
return status;
@@ -93,7 +93,11 @@ static HYD_status handle_rr_binding(void)
HYDU_FUNC_ENTER();
+ HYDU_ASSERT(hwloc_initialized, status);
+
+ /* initialize bitmaps */
HYDT_topo_hwloc_info.num_bitmaps = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
+
HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
@@ -429,6 +433,16 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
}
}
+ /* initialize bitmaps */
+ HYDT_topo_hwloc_info.num_bitmaps = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
+
+ HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
+ HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
+
+ for (i = 0; i < HYDT_topo_hwloc_info.num_bitmaps; i++) {
+ HYDT_topo_hwloc_info.bitmap[i] = hwloc_bitmap_alloc();
+ hwloc_bitmap_zero(HYDT_topo_hwloc_info.bitmap[i]);
+ }
for (i = 0; i < MAP_LENGTH; i++) {
if (map_str[i] == 'T')
@@ -479,7 +493,6 @@ static HYD_status handle_bitmap_binding(const char *binding, const char *mapping
HYD_status HYDT_topo_hwloc_init(const char *binding, const char *mapping, const char *membind)
{
- int i;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -491,20 +504,6 @@ HYD_status HYDT_topo_hwloc_init(const char *binding, const char *mapping, const
hwloc_initialized = 1;
-
- /* initialize bitmaps */
- status = get_nbobjs_by_type(HWLOC_OBJ_PU, &HYDT_topo_hwloc_info.num_bitmaps, NULL);
- HYDU_ERR_POP(status, "unable to get number of PUs\n");
-
- HYDU_MALLOC(HYDT_topo_hwloc_info.bitmap, hwloc_bitmap_t *,
- HYDT_topo_hwloc_info.num_bitmaps * sizeof(hwloc_bitmap_t), status);
-
- for (i = 0; i < HYDT_topo_hwloc_info.num_bitmaps; i++) {
- HYDT_topo_hwloc_info.bitmap[i] = hwloc_bitmap_alloc();
- hwloc_bitmap_zero(HYDT_topo_hwloc_info.bitmap[i]);
- }
-
-
/* bindings that don't require mapping */
if (!strncmp(binding, "user:", strlen("user:"))) {
status = handle_user_binding(binding + strlen("user:"));
@@ -552,13 +551,17 @@ HYD_status HYDT_topo_hwloc_init(const char *binding, const char *mapping, const
HYD_status HYDT_topo_hwloc_bind(int idx)
{
- int id = idx % HYDT_topo_hwloc_info.num_bitmaps;
+ int id;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
- hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
- hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id], HYDT_topo_hwloc_info.membind, 0);
+ /* For processes where the user did not specify a binding unit, no binding is needed. */
+ if (!HYDT_topo_hwloc_info.user_binding || (idx < HYDT_topo_hwloc_info.num_bitmaps)) {
+ id = idx % HYDT_topo_hwloc_info.num_bitmaps;
+ hwloc_set_cpubind(topology, HYDT_topo_hwloc_info.bitmap[id], 0);
+ hwloc_set_membind(topology, HYDT_topo_hwloc_info.bitmap[id], HYDT_topo_hwloc_info.membind, 0);
+ }
HYDU_FUNC_EXIT();
return status;
diff --git a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h
index 6d3b77f..5147ad9 100644
--- a/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h
+++ b/src/pm/hydra/tools/topo/hwloc/topo_hwloc.h
@@ -18,6 +18,7 @@ struct HYDT_topo_hwloc_info {
int num_bitmaps;
hwloc_bitmap_t *bitmap;
hwloc_membind_policy_t membind;
+ int user_binding;
};
extern struct HYDT_topo_hwloc_info HYDT_topo_hwloc_info;
-----------------------------------------------------------------------
Summary of changes:
src/pm/hydra/examples/binding.c | 3 +-
src/pm/hydra/examples/print_cpus_allowed.c | 31 ++
src/pm/hydra/tools/topo/hwloc/topo_hwloc.c | 515 ++++++++++++----------------
src/pm/hydra/tools/topo/hwloc/topo_hwloc.h | 2 +
src/pm/hydra/tools/topo/topo.c | 2 +
src/pm/hydra/tools/topo/topo.h | 2 +
src/pm/hydra/ui/mpich/utils.c | 2 -
7 files changed, 252 insertions(+), 305 deletions(-)
create mode 100644 src/pm/hydra/examples/print_cpus_allowed.c
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-179-gb65699f
by noreply@mpich.org 24 Jan '14
by noreply@mpich.org 24 Jan '14
24 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via b65699f50df5edc76f65514105e4f3e9df43acd2 (commit)
from a14464d3db67a1e6dad877571cc49b99b18c7c7e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/b65699f50df5edc76f65514105e4f3e9d…
commit b65699f50df5edc76f65514105e4f3e9df43acd2
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Wed Jan 22 12:27:44 2014 -0600
corrections to compile wrapper changes
Fixes errors in commit [5bbfe808].
1. Run config.rpath with each compiler individually, as the syntax
may differ for passing options through to the linker.
2. Move the rpath flags to just before the mpich library, where they
are necessary.
Fixes #1044.
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/configure.ac b/configure.ac
index cd0eaf6..7b095b2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1797,6 +1797,14 @@ export NEEDSPLIB
AM_CONDITIONAL([BUILD_PROFILING_LIB],[test "$NEEDSPLIB" = "yes"])
+# ---------------------------------------------------------------------------
+# determine rpath and other shared library flags for CC
+# src/env may not exist yet in a vpath build
+$MKDIR_P src/env
+cc_shlib_conf=src/env/cc_shlib.conf
+PAC_COMPILER_SHLIB_FLAGS([CC],[$cc_shlib_conf])
+AC_SUBST_FILE([cc_shlib_conf])
+
# output rpath flags in a usable format for mpich.pc (pkg-config)
if test "X$enable_wrapper_rpath" = "Xyes"; then
eval WRAPPER_RPATH_LDFLAGS=\"$hardcode_libdir_flag_spec\"
@@ -2082,6 +2090,11 @@ fi
# Now test for Fortran compiler characteristics
# ----------------------------------------------------------------------------
if test "$enable_f77" = "yes" ; then
+ # determine rpath and other shared library flags for F77
+ f77_shlib_conf=src/env/f77_shlib.conf
+ PAC_COMPILER_SHLIB_FLAGS([F77],[$f77_shlib_conf])
+ AC_SUBST_FILE([f77_shlib_conf])
+
AC_LANG_FORTRAN77
PAC_PROG_F77_EXCLAIM_COMMENTS(has_exclaim="yes",has_exclaim="no")
PAC_PROG_F77_HAS_INCDIR(src)
@@ -2178,6 +2191,11 @@ MPICONSTMODNAME=mpi_constants
MPISIZEOFMODNAME=mpi_sizeofs
MPIBASEMODNAME=mpi_base
if test "$enable_fc" = "yes" ; then
+ # determine rpath and other shared library flags for FC
+ fc_shlib_conf=src/env/fc_shlib.conf
+ PAC_COMPILER_SHLIB_FLAGS([FC],[$fc_shlib_conf])
+ AC_SUBST_FILE([fc_shlib_conf])
+
# Determine characteristics of the Fortran 90 compiler
# Find a Fortran 90 compiler. Sets FC
# Work around bug in autoconf that adds -g to FCFLAGS
@@ -2412,6 +2430,11 @@ int main() {
AC_SUBST(MPIR_CXX_COMPLEX)
AC_SUBST(MPIR_CXX_DOUBLE_COMPLEX)
AC_SUBST(MPIR_CXX_LONG_DOUBLE_COMPLEX)
+
+ # determine rpath and other shared library flags for CXX
+ cxx_shlib_conf=src/env/cxx_shlib.conf
+ PAC_COMPILER_SHLIB_FLAGS([CXX],[$cxx_shlib_conf])
+ AC_SUBST_FILE([cxx_shlib_conf])
fi
if test "$enable_cxx" = yes; then
diff --git a/src/env/Makefile.mk b/src/env/Makefile.mk
index 8c5b459..9304622 100644
--- a/src/env/Makefile.mk
+++ b/src/env/Makefile.mk
@@ -60,7 +60,11 @@ src/env/mpif90: $(top_builddir)/src/env/mpif90.sh
cp -p $? $@
endif !BUILD_BASH_SCRIPTS
-DISTCLEANFILES += $(top_builddir)/src/env/mpicc \
+DISTCLEANFILES += $(top_builddir)/src/env/cc_shlib.conf \
+ $(top_builddir)/src/env/cxx_shlib.conf \
+ $(top_builddir)/src/env/f77_shlib.conf \
+ $(top_builddir)/src/env/fc_shlib.conf \
+ $(top_builddir)/src/env/mpicc \
$(top_builddir)/src/env/mpicxx \
$(top_builddir)/src/env/mpif77 \
$(top_builddir)/src/env/mpif90
diff --git a/src/env/mpicc.bash.in b/src/env/mpicc.bash.in
index 29cc415..85f6c88 100644
--- a/src/env/mpicc.bash.in
+++ b/src/env/mpicc.bash.in
@@ -39,6 +39,9 @@ libdir=@libdir@
CC="@CC@"
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@cc_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -214,11 +217,22 @@ fi
# file or an object file. Instead, we just check for an option that
# suppressing linking, such as -c or -M.
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $CC @WRAPPER_CPPFLAGS@ $PROFILE_INCPATHS @WRAPPER_CFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir
rc=$?
else
- $Show $CC @WRAPPER_CPPFLAGS@ $PROFILE_INCPATHS @WRAPPER_CFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
+ $Show $CC @WRAPPER_CPPFLAGS@ $PROFILE_INCPATHS @WRAPPER_CFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
rc=$?
fi
else
diff --git a/src/env/mpicc.sh.in b/src/env/mpicc.sh.in
index 7a0f9db..119a884 100644
--- a/src/env/mpicc.sh.in
+++ b/src/env/mpicc.sh.in
@@ -39,6 +39,9 @@ libdir=@libdir@
CC="@CC@"
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@cc_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -223,11 +226,22 @@ fi
# file or an object file. Instead, we just check for an option that
# suppressing linking, such as -c or -M.
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $CC @WRAPPER_CPPFLAGS@ $PROFILE_INCPATHS @WRAPPER_CFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir
rc=$?
else
- $Show $CC @WRAPPER_CPPFLAGS@ $PROFILE_INCPATHS @WRAPPER_CFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
+ $Show $CC @WRAPPER_CPPFLAGS@ $PROFILE_INCPATHS @WRAPPER_CFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
rc=$?
fi
else
diff --git a/src/env/mpicxx.bash.in b/src/env/mpicxx.bash.in
index 61e56fe..3974ff9 100644
--- a/src/env/mpicxx.bash.in
+++ b/src/env/mpicxx.bash.in
@@ -36,6 +36,9 @@ libdir=@libdir@
CXX="@CXX@"
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@cxx_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -211,11 +214,22 @@ fi
# Eventually, we'll want to move this after any non-MPI implementation
# libraries
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $CXX $PROFILE_INCPATHS @WRAPPER_CXXFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir
rc=$?
else
- $Show $CXX $PROFILE_INCPATHS @WRAPPER_CXXFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir -L$libdir $cxxlibs $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
+ $Show $CXX $PROFILE_INCPATHS @WRAPPER_CXXFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir -L$libdir $cxxlibs $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
rc=$?
fi
else
diff --git a/src/env/mpicxx.sh.in b/src/env/mpicxx.sh.in
index 92424cc..48195a1 100644
--- a/src/env/mpicxx.sh.in
+++ b/src/env/mpicxx.sh.in
@@ -36,6 +36,9 @@ libdir=@libdir@
CXX="@CXX@"
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@cxx_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -220,11 +223,22 @@ fi
# Eventually, we'll want to move this after any non-MPI implementation
# libraries
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $CXX $PROFILE_INCPATHS @WRAPPER_CXXFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir
rc=$?
else
- $Show $CXX $PROFILE_INCPATHS @WRAPPER_CXXFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir -L$libdir $cxxlibs $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
+ $Show $CXX $PROFILE_INCPATHS @WRAPPER_CXXFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir -L$libdir $cxxlibs $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@
rc=$?
fi
else
diff --git a/src/env/mpif77.bash.in b/src/env/mpif77.bash.in
index 9625dd3..a3567c2 100644
--- a/src/env/mpif77.bash.in
+++ b/src/env/mpif77.bash.in
@@ -42,6 +42,9 @@ F77="@F77@"
F77CPP="@F77CPP@"
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@f77_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -261,11 +264,22 @@ fi
# libraries
#
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $F77 $PROFILE_INCPATHS @WRAPPER_FFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir
rc=$?
else
- $Show $F77 $PROFILE_INCPATHS @WRAPPER_FFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @F77_OTHER_LIBS@
+ $Show $F77 $PROFILE_INCPATHS @WRAPPER_FFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @F77_OTHER_LIBS@
rc=$?
fi
else
diff --git a/src/env/mpif77.sh.in b/src/env/mpif77.sh.in
index 73f664d..0366d77 100644
--- a/src/env/mpif77.sh.in
+++ b/src/env/mpif77.sh.in
@@ -42,6 +42,9 @@ F77="@F77@"
F77CPP="@F77CPP@"
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@f77_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -283,11 +286,22 @@ fi
# libraries
#
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $F77 $PROFILE_INCPATHS @WRAPPER_FFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir
rc=$?
else
- $Show $F77 $PROFILE_INCPATHS @WRAPPER_FFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @F77_OTHER_LIBS@
+ $Show $F77 $PROFILE_INCPATHS @WRAPPER_FFLAGS@ @WRAPPER_LDFLAGS@ $allargs -I$includedir -L$libdir $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @F77_OTHER_LIBS@
rc=$?
fi
else
diff --git a/src/env/mpif90.bash.in b/src/env/mpif90.bash.in
index c93ff1f..5596dd6 100644
--- a/src/env/mpif90.bash.in
+++ b/src/env/mpif90.bash.in
@@ -55,6 +55,9 @@ FCEXT="@FCEXT@"
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@fc_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -312,11 +315,23 @@ fi
# libraries
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ # prepend the path for the shared libraries to the library list
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $FC $PROFILE_INCPATHS @WRAPPER_FCFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}"
rc=$?
else
- $Show $FC $PROFILE_INCPATHS @WRAPPER_FCFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" $FCINCDIRS $FCMODDIRS -L$libdir $FCMODLIBS $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @FC_OTHER_LIBS@
+ $Show $FC $PROFILE_INCPATHS @WRAPPER_FCFLAGS@ @WRAPPER_LDFLAGS@ "${allargs[@]}" $FCINCDIRS $FCMODDIRS -L$libdir $FCMODLIBS $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @FC_OTHER_LIBS@
rc=$?
fi
else
diff --git a/src/env/mpif90.sh.in b/src/env/mpif90.sh.in
index 6f862c0..f33bf6e 100644
--- a/src/env/mpif90.sh.in
+++ b/src/env/mpif90.sh.in
@@ -55,6 +55,9 @@ FCEXT="@FCEXT@"
#
MPICH_VERSION="@MPICH_VERSION@"
+enable_wrapper_rpath="@enable_wrapper_rpath@"
+@fc_shlib_conf@
+
# Internal variables
# Show is set to echo to cause the compilation command to be echoed instead
# of executed.
@@ -329,11 +332,22 @@ fi
# libraries
if [ "$linking" = yes ] ; then
+ # Attempt to encode rpath info into the executable if the user has not
+ # disabled rpath usage and some flavor of rpath makes sense on this
+ # platform.
+ # TODO configure and config.rpath are computing more sophisticated rpath
+ # schemes than this simple one. Consider updating this logic accordingly.
+ if test "X$enable_wrapper_rpath" = "Xyes" ; then
+ eval rpath_flags=\"${hardcode_libdir_flag_spec}\"
+ else
+ rpath_flags=""
+ fi
+
if [ "$nativelinking" = yes ] ; then
$Show $FC $PROFILE_INCPATHS @WRAPPER_FCFLAGS@ @WRAPPER_LDFLAGS@ $allargs
rc=$?
else
- $Show $FC $PROFILE_INCPATHS @WRAPPER_FCFLAGS@ @WRAPPER_RPATH_LDFLAGS@ @WRAPPER_LDFLAGS@ $allargs $FCINCDIRS $FCMODDIRS -L$libdir $FCMODLIBS $PROFILE_PRELIB $PROFILE_FOO @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @FC_OTHER_LIBS@
+ $Show $FC $PROFILE_INCPATHS @WRAPPER_FCFLAGS@ @WRAPPER_LDFLAGS@ $allargs $FCINCDIRS $FCMODDIRS -L$libdir $FCMODLIBS $PROFILE_PRELIB $PROFILE_FOO $rpath_flags @LPMPILIBNAME@ -l@MPILIBNAME@ $PROFILE_POSTLIB @WRAPPER_LIBS@ @FC_OTHER_LIBS@
rc=$?
fi
else
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 23 +++++++++++++++++++++++
src/env/Makefile.mk | 6 +++++-
src/env/mpicc.bash.in | 16 +++++++++++++++-
src/env/mpicc.sh.in | 16 +++++++++++++++-
src/env/mpicxx.bash.in | 16 +++++++++++++++-
src/env/mpicxx.sh.in | 16 +++++++++++++++-
src/env/mpif77.bash.in | 16 +++++++++++++++-
src/env/mpif77.sh.in | 16 +++++++++++++++-
src/env/mpif90.bash.in | 17 ++++++++++++++++-
src/env/mpif90.sh.in | 16 +++++++++++++++-
10 files changed, 149 insertions(+), 9 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-178-ga14464d
by noreply@mpich.org 21 Jan '14
by noreply@mpich.org 21 Jan '14
21 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via a14464d3db67a1e6dad877571cc49b99b18c7c7e (commit)
via 5f3f49b17a94c336b6e0175c296f917912c94e6c (commit)
from 1a993e8757d7ccde89c4144dcd1abdf17b50f6d9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/a14464d3db67a1e6dad877571cc49b99b…
commit a14464d3db67a1e6dad877571cc49b99b18c7c7e
Author: Michael Blocksome <blocksom(a)us.ibm.com>
Date: Tue Jan 21 11:40:31 2014 -0600
bgq fix for mpivars link error
Signed-off-by: Pavan Balaji <balaji(a)mcs.anl.gov>
diff --git a/src/env/Makefile.mk b/src/env/Makefile.mk
index b23a6c0..8c5b459 100644
--- a/src/env/Makefile.mk
+++ b/src/env/Makefile.mk
@@ -22,6 +22,7 @@ src_env_mpichversion_LDFLAGS = $(mpich_libtool_static_flag)
src_env_mpivars_SOURCES = src/env/mpivars.c
src_env_mpivars_LDADD = lib/lib@[email protected]
+src_env_mpivars_LDFLAGS = $(mpich_libtool_static_flag)
if BUILD_PROFILING_LIB
src_env_mpivars_LDADD += lib/lib@[email protected]
endif BUILD_PROFILING_LIB
diff --git a/src/mpid/pamid/subconfigure.m4 b/src/mpid/pamid/subconfigure.m4
index d96cd2f..5411c11 100644
--- a/src/mpid/pamid/subconfigure.m4
+++ b/src/mpid/pamid/subconfigure.m4
@@ -195,7 +195,7 @@ if test "${pamid_platform}" = "BGQ" ; then
# of libstdc++.so unless this '-all-static' option is used. This seems to
# be a problem specific to libstdc++.
#
- # Only the 'cpi' and 'mpichversion' executables have this problem.
+ # Only the 'cpi', 'mpivars', and 'mpichversion' executables have this problem.
MPID_LIBTOOL_STATIC_FLAG="-all-static"
fi
http://git.mpich.org/mpich.git/commitdiff/5f3f49b17a94c336b6e0175c296f91791…
commit 5f3f49b17a94c336b6e0175c296f917912c94e6c
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Fri Jan 17 21:02:18 2014 +0000
Use MPIU_Malloc/Free instead of malloc/free.
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c b/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
index 4b37f26..4a194b2 100644
--- a/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
+++ b/src/mpid/pamid/src/onesided/mpid_win_create_dynamic.c
@@ -61,12 +61,12 @@ MPID_Win_create_dynamic( MPID_Info * info,
void *base = NULL;
size_t length = 0;
Kernel_MemoryRegion_t memregion;
- void *tmpbuf = malloc(sizeof(int));
+ void *tmpbuf = MPIU_Malloc(sizeof(int));
Kernel_CreateMemoryRegion(&memregion, tmpbuf, sizeof(int));
//Reset base to base VA of local heap
base = memregion.BaseVa;
length = memregion.Bytes;
- free(tmpbuf);
+ MPIU_Free(tmpbuf);
if (length != 0)
{
-----------------------------------------------------------------------
Summary of changes:
src/env/Makefile.mk | 1 +
.../pamid/src/onesided/mpid_win_create_dynamic.c | 4 ++--
src/mpid/pamid/subconfigure.m4 | 2 +-
3 files changed, 4 insertions(+), 3 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-176-g1a993e8
by noreply@mpich.org 21 Jan '14
by noreply@mpich.org 21 Jan '14
21 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 1a993e8757d7ccde89c4144dcd1abdf17b50f6d9 (commit)
from 7a9a46fbc5c00c4c8dd32c32c1306f091bb07e18 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/1a993e8757d7ccde89c4144dcd1abdf17…
commit 1a993e8757d7ccde89c4144dcd1abdf17b50f6d9
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Tue Jan 21 10:16:52 2014 -0600
gitignore generated mpivars file
Signed-off-by: Junchao Zhang <jczhang(a)mcs.anl.gov>
diff --git a/.gitignore b/.gitignore
index 681b08b..8666c2e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -448,6 +448,7 @@ Makefile.am-stamp
/src/env/mpif90.conf
/src/env/mpich2version
/src/env/parkill
+/src/env/mpivars
# /src/include/
/src/include/mpi.h
-----------------------------------------------------------------------
Summary of changes:
.gitignore | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1rc2-175-g7a9a46f
by noreply@mpich.org 20 Jan '14
by noreply@mpich.org 20 Jan '14
20 Jan '14
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "MPICH primary repository".
The branch, master has been updated
via 7a9a46fbc5c00c4c8dd32c32c1306f091bb07e18 (commit)
from 80d7388b56ca83eeda8150878f5eb6ee92a229f8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.mpich.org/mpich.git/commitdiff/7a9a46fbc5c00c4c8dd32c32c1306f091…
commit 7a9a46fbc5c00c4c8dd32c32c1306f091bb07e18
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Mon Jan 20 14:12:57 2014 -0600
Revert "a partial round of datatype optimizations"
This reverts commit 38ef5818a883568e7dcc80f0e2aa0cfc972469be.
the MPICH-1 and Intel tests found unexpected results with these
optimizations. Will explore later.
Conflicts:
src/mpid/common/datatype/dataloop/dataloop_optimize.c
src/mpid/common/datatype/mpid_type_debug.c
diff --git a/src/mpid/common/datatype/dataloop/Makefile.mk b/src/mpid/common/datatype/dataloop/Makefile.mk
index e2f6cf1..ec67180 100644
--- a/src/mpid/common/datatype/dataloop/Makefile.mk
+++ b/src/mpid/common/datatype/dataloop/Makefile.mk
@@ -21,8 +21,7 @@ lib_lib@MPILIBNAME@_la_SOURCES += \
src/mpid/common/datatype/dataloop/segment_count.c \
src/mpid/common/datatype/dataloop/segment_flatten.c \
src/mpid/common/datatype/dataloop/segment_packunpack.c \
- src/mpid/common/datatype/dataloop/subarray_support.c \
- src/mpid/common/datatype/dataloop/dataloop_optimize.c
+ src/mpid/common/datatype/dataloop/subarray_support.c
# several headers are included by the rest of MPICH
AM_CPPFLAGS += -I$(top_srcdir)/src/mpid/common/datatype
diff --git a/src/mpid/common/datatype/dataloop/dataloop.c b/src/mpid/common/datatype/dataloop/dataloop.c
index 2cca5b9..532c51d 100644
--- a/src/mpid/common/datatype/dataloop/dataloop.c
+++ b/src/mpid/common/datatype/dataloop/dataloop.c
@@ -54,7 +54,7 @@
/*@
Dataloop_free - deallocate the resources used to store a dataloop
-Input/output Parameters:
+Input Parameters:
. dataloop - pointer to dataloop structure
@*/
void PREPEND_PREFIX(Dataloop_free)(DLOOP_Dataloop **dataloop)
@@ -483,7 +483,7 @@ void PREPEND_PREFIX(Dataloop_alloc_and_copy)(int kind,
/*@
Dataloop_struct_alloc - allocate the resources used to store a dataloop and
- copy in old dataloop as appropriate. This version
+ copy in old dataloop as appropriate. this version
is specifically for use when a struct dataloop is
being created; the space to hold old dataloops in
this case must be described back to the
diff --git a/src/mpid/common/datatype/dataloop/dataloop_create.h b/src/mpid/common/datatype/dataloop/dataloop_create.h
index 803d7d4..f054429 100644
--- a/src/mpid/common/datatype/dataloop/dataloop_create.h
+++ b/src/mpid/common/datatype/dataloop/dataloop_create.h
@@ -94,14 +94,5 @@ DLOOP_Count PREPEND_PREFIX(Type_blockindexed_count_contig)(DLOOP_Count count,
const void *disp_array,
int dispinbytes,
DLOOP_Offset old_extent);
-
-int PREPEND_PREFIX(Dataloop_optimize)( DLOOP_Dataloop *dlpOld_p );
-
-int PREPEND_PREFIX(Dataloop_est_complexity)(DLOOP_Dataloop *,
- MPI_Aint *, MPI_Aint *);
-int PREPEND_PREFIX(Dataloop_est_struct_complexity)( int,
- const int [],
- const DLOOP_Type [],
- MPI_Aint *,
- MPI_Aint * );
+
#endif
diff --git a/src/mpid/common/datatype/dataloop/dataloop_create_contig.c b/src/mpid/common/datatype/dataloop/dataloop_create_contig.c
index 2f3421c..290bf2a 100644
--- a/src/mpid/common/datatype/dataloop/dataloop_create_contig.c
+++ b/src/mpid/common/datatype/dataloop/dataloop_create_contig.c
@@ -11,17 +11,14 @@
Dataloop_contiguous - create the dataloop representation for a
contiguous datatype
- Input Parameters:
+ Arguments:
+ int icount,
-. DLOOP_Type oldtype
+. MPI_Datatype oldtype,
+. DLOOP_Dataloop **dlp_p,
+. int *dlsz_p,
+. int *dldepth_p,
- int flag
- Output Parameters:
-+ DLOOP_Dataloop **dlp_p,
-. DLOOP_Size *dlsz_p,
-- int *dldepth_p,
-
-
.N Errors
.N Returns 0 on success, -1 on failure.
@*/
diff --git a/src/mpid/common/datatype/dataloop/dataloop_create_struct.c b/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
index 47bbffc..7d51b7b 100644
--- a/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
+++ b/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
@@ -11,57 +11,6 @@
#error "You must explicitly include a header that sets the PREPEND_PREFIX and includes dataloop_parts.h"
#endif
-
-/*
-=== BEGIN_MPI_T_CVAR_INFO_BLOCK ===
-
-categories :
- - name : DATATYPE
- description : Datatype optimization parameters
-
-cvars:
- - name : MPIR_CVAR_DATALOOP_OPTIMIZE
- category : DATATYPE
- type : boolean
- default : true
- class : none
- verbosity : MPI_T_VERBOSITY_USER_BASIC
- scope : MPI_T_SCOPE_ALL_EQ
- description : >-
- By default, the internal representation of an MPI datatype that
- is used by MPICH to move data is very similar to the original
- description of the datatype. If this flag is true, additional
- optimizations are used to improve the performance of datatypes.
-
- - name : MPIR_CVAR_DATALOOP_FLATTEN
- category : DATATYPE
- type : boolean
- class : none
- default : true
- verbosity : MPI_T_VERBOSITY_USER_BASIC
- scope : MPI_T_SCOPE_ALL_EQ
- description : >-
- If true, attempt to "flatten" the internal representation of
- MPI struct datatypes (created with MPI_Type_create_struct).
-
- - name : MPIR_CVAR_DATALOOP_FLATTEN_MULT
- category : DATATYPE
- type : int
- class : none
- default : 2
- verbosity : MPI_T_VERBOSITY_USER_BASIC
- scope : MPI_T_SCOPE_ALL_EQ
- description : >-
- Flattening an MPI struct datatype does not always improve
- performance. This parameter is a threshold that is used in
- comparing the size of the description with the amount of data
- moved. Larger values make it more likely that a struct datatype
- will be flattened. The default value is adequate for flattening
- simple structs, and will usually avoid flattening structs
- containing vectors or block-indexed data.
-
-=== END_MPI_T_CVAR_INFO_BLOCK ===
-*/
static int DLOOP_Dataloop_create_struct_memory_error(void);
static int DLOOP_Dataloop_create_unique_type_struct(DLOOP_Count count,
const int *blklens,
@@ -289,37 +238,19 @@ int PREPEND_PREFIX(Dataloop_create_struct)(DLOOP_Count count,
* if caller asked for homogeneous or all bytes representation,
* flatten the type and store it as an indexed type so that
* there are no branches in the dataloop tree.
- *
- * Note that this is not always an optimization - for example,
- * replacing two long block_indexed with one longer indexed (with
- * the additional blockcount array) is likely to be slower, because
- * of the additional memory motion required.
*/
- if (MPIR_CVAR_DATALOOP_FLATTEN && (
- (flag == DLOOP_DATALOOP_HOMOGENEOUS) ||
- (flag == DLOOP_DATALOOP_ALL_BYTES) ))
- {
- MPI_Aint nElms = 0, nDesc = 0;
- PREPEND_PREFIX(Dataloop_est_struct_complexity)( count,
- blklens,
- oldtypes,
- &nElms,
- &nDesc );
-
- /* Only convert to flattened if the flattened description
- is likely to be more efficient. We estimate this
- by */
- if ( nDesc * 24 * MPIR_CVAR_DATALOOP_FLATTEN_MULT > nElms) {
- return DLOOP_Dataloop_create_flattened_struct(count,
- blklens,
- disps,
- oldtypes,
- dlp_p,
- dlsz_p,
- dldepth_p,
- flag);
- }
- }
+ if ((flag == DLOOP_DATALOOP_HOMOGENEOUS) ||
+ (flag == DLOOP_DATALOOP_ALL_BYTES))
+ {
+ return DLOOP_Dataloop_create_flattened_struct(count,
+ blklens,
+ disps,
+ oldtypes,
+ dlp_p,
+ dlsz_p,
+ dldepth_p,
+ flag);
+ }
/* scan through types and gather derived type info */
for (i=0; i < count; i++)
diff --git a/src/mpid/common/datatype/dataloop/dataloop_optimize.c b/src/mpid/common/datatype/dataloop/dataloop_optimize.c
deleted file mode 100644
index 8e9136d..0000000
--- a/src/mpid/common/datatype/dataloop/dataloop_optimize.c
+++ /dev/null
@@ -1,514 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; -*- */
-
-/*
- * (C) 2001 by Argonne National Laboratory.
- * See COPYRIGHT in top-level directory.
- */
-
-#include "dataloop.h"
-
-#define MPICH_DEBUG_DATALOOP
-#ifdef MPICH_DEBUG_DATALOOP
-static int level = 0;
-static int printDataloop = 0;
-static int printIfOptimized = 0;
-
-/* Print format:
- (spaces for level).(el_size,el_extent,el_type)(count)....
-*/
-static void dl_print_dataloop( int, DLOOP_Dataloop * );
-static void dl_print_contig( int, DLOOP_Dataloop * );
-static void dl_print_vector( int, DLOOP_Dataloop * );
-static void dl_print_blockindexed( int, DLOOP_Dataloop * );
-static void dl_print_struct( int, DLOOP_Dataloop * );
-static void dl_print( int, const char * );
-
-static void dl_print_tab( int l )
-{
- int i;
- for (i=2*l; i!=0; i--) printf( "%c", ' ' );
-}
-static void dl_print_base( DLOOP_Dataloop *dp )
-{
- printf( "(%ld,%ld,%lx)(%ld)", (long)dp->el_size, (long)dp->el_extent,
- (long)dp->el_type, (long)dp->loop_params.count );
-}
-static void dl_print( int l, const char *s )
-{
- dl_print_tab(l);
- printf( "%s", s );
-}
-static void dl_print_contig( int l, DLOOP_Dataloop *dp )
-{
- dl_print_tab(l);
- printf( "CONTIG " );
- dl_print_base( dp );
- printf( "\n" );
-}
-static void dl_print_vector( int l, DLOOP_Dataloop *dp )
-{
- int stride = dp->loop_params.v_t.stride;
- int blocksize = dp->loop_params.v_t.blocksize ;
- dl_print_tab(l);
- printf( "VECTOR " );
- dl_print_base( dp );
- printf( ":Stride %d Blocksize %d\n", stride, blocksize );
-}
-static void dl_print_blockindexed( int l, DLOOP_Dataloop *dp )
-{
- int blocksize = dp->loop_params.bi_t.blocksize ;
- DLOOP_Offset *offarray = dp->loop_params.bi_t.offset_array;
- int i, n;
- dl_print_tab(l);
- printf( "BLOCKINDEXED " );
- dl_print_base( dp );
- printf( ":Blocksize %d:", blocksize );
- n = dp->loop_params.bi_t.count;
- if (n > 8) n = 8;
- for (i=0; i<n; i++) {
- printf( "%lx,", (long)offarray[i] );
- }
- if (dp->loop_params.bi_t.count > n) printf( "..." );
- printf( "\n" );
-}
-static void dl_print_indexed( int l, DLOOP_Dataloop *dp )
-{
- DLOOP_Count *blocksizearray = dp->loop_params.i_t.blocksize_array ;
- DLOOP_Offset *offarray = dp->loop_params.i_t.offset_array;
- int i, n;
- int minblock, maxblock;
- dl_print_tab(l);
- printf( "INDEXED " );
- dl_print_base( dp );
- n = dp->loop_params.i_t.count;
- minblock = maxblock = (n>0) ? blocksizearray[0] : 0;
- for (i=0; i<n; i++) {
- if (blocksizearray[i] > maxblock) maxblock = blocksizearray[i];
- if (blocksizearray[i] < minblock) minblock = blocksizearray[i];
- }
- printf( "blocks in [%d,%d]", minblock, maxblock );
-
- if (n > 8) n = 8;
- for (i=0; i<n; i++) {
- printf( "(%lx,%ld)", (long)offarray[i], (long)blocksizearray[i] );
- }
- if (dp->loop_params.i_t.count > n) printf( "..." );
- printf( "\n" );
-}
-
-static void dl_print_struct( int l, DLOOP_Dataloop *dp )
-{
- DLOOP_Count *blocksizearray = dp->loop_params.s_t.blocksize_array ;
- DLOOP_Offset *offarray = dp->loop_params.s_t.offset_array;
- DLOOP_Dataloop **looparray = dp->loop_params.s_t.dataloop_array;
- int i, n;
- dl_print_tab(l);
- printf( "STRUCT " );
- dl_print_base( dp );
- printf( "\n" );
- n = dp->loop_params.i_t.count;
- if (n > 8) n = 8;
- for (i=0; i<n; i++) {
- dl_print_tab(l+1);
- printf( "(%lx,%ld)", (long)offarray[i], (long)blocksizearray[i] );
- dl_print_dataloop( l+1, looparray[i] );
- printf( "\n" );
- }
- if (dp->loop_params.i_t.count > n) printf( "...\n" );
-}
-static void dl_print_dataloop( int l, DLOOP_Dataloop *dp )
-{
- dl_print_tab( l );
- dl_print_base( dp );
- switch (dp->kind & DLOOP_KIND_MASK) {
- case DLOOP_KIND_CONTIG:
- dl_print_contig( l, dp );
- break;
- case DLOOP_KIND_VECTOR:
- dl_print_vector( l, dp );
- break;
- case DLOOP_KIND_BLOCKINDEXED:
- dl_print_blockindexed( l, dp );
- break;
- case DLOOP_KIND_INDEXED:
- dl_print_indexed( l, dp );
- break;
- case DLOOP_KIND_STRUCT:
- dl_print_struct( l, dp );
- break;
- default:
- dl_print( l, "Unknown dataloop type " );
- printf( "\n" );
- break;
- }
-}
-#endif
-
-/*
- * Indicates whether a dataloop is a basic and final contig type.
- * This can be used to determine when a contig type can be removed
- * in a dataloop.
- */
-static int dl_contig_isFinal( DLOOP_Dataloop *dp )
-{
- if ((dp->kind & DLOOP_KIND_MASK) != DLOOP_KIND_CONTIG) return 0;
- if (dp->el_size == dp->el_extent &&
- (dp->kind & DLOOP_FINAL_MASK))
- return 1;
- return 0;
-}
-
-/*
- * Optimize a dataloop
- *
- * Apply the following transformations and return a new dataloop.
- * 1. Convert all predefined types to UINTS with the best alignment (may be BYTE
- * in worst case)
- * 2. Convert blocks of contiguous into a single block of basic unit (e.g.,
- * a vector type with a block count of 27 applied to a contiguous type of
- * 6 ints will be turned into a block count of (27*6) UINTs)
- * 3. Convert struct (with different dataloops (from different MPI datatypes)
- * into indexed when all types are contig
- * 4. Convert dataloops with counts of 1 into simpler types (e.g., q vector
- * with 1 element is really a contig type)
- *
- * Value of these optimizations
- * A 2012 paper compared performance of Open MPI, MPICH, and user-written code
- * for some datatypes, and found MPICH often performed poorer than other
- * options. An investigation showed that some of the issues are due to
- * a failure to perform optimizations of these type (especially #1 and 2).
- * It may also be necessary to enhance the dataloop execution engine, but
- * that will b a separate step.
- */
-int PREPEND_PREFIX(Dataloop_optimize)(DLOOP_Dataloop *dlpOld_p )
-{
- int i;
-
-#ifdef MPICH_DEBUG_DATALOOP
- /* Temp for debugging */
- static int firstCall = 1;
- /* This is threadsafe in the sense that we don't care */
- if (firstCall) {
- if (getenv("MPICH_DATALOOP_PRINT")) {
- printDataloop = 1;
- printIfOptimized = 1;
- }
- firstCall = 0;
- }
-#endif
-
- switch (dlpOld_p->kind & DLOOP_KIND_MASK) {
- case DLOOP_KIND_CONTIG:
-#ifdef MPICH_DEBUG_DATALOOP
- if (printDataloop)
- dl_print_contig( level, dlpOld_p );
-#endif
- /* replace contig of (non-basic) contig with contig (basic) */
- if (!(dlpOld_p->kind & DLOOP_FINAL_MASK)) {
- DLOOP_Dataloop *dlpChild_p = dlpOld_p->loop_params.c_t.dataloop;
- level++;
- PREPEND_PREFIX(Dataloop_optimize)( dlpChild_p );
- level--;
- if (dl_contig_isFinal( dlpChild_p ) ) {
- dlpOld_p->loop_params.c_t.count *= dlpChild_p->loop_params.c_t.count;
- dlpOld_p->el_size = dlpChild_p->el_size;
- dlpOld_p->el_extent = dlpChild_p->el_extent;
- dlpOld_p->kind |= DLOOP_FINAL_MASK;
- dlpOld_p->loop_params.c_t.dataloop = 0;
-#ifdef MPICH_DEBUG_DATALOOP
- if (printIfOptimized || printDataloop) {
- printf( "replacement contig is:\n" );
- dl_print_contig( level, dlpOld_p );
- }
-#endif
- }
- }
- break;
-
- case DLOOP_KIND_VECTOR:
- /* if sub-dloop is (non-basic) contig, merge with blockcount */
-#ifdef MPICH_DEBUG_DATALOOP
- if (printDataloop)
- dl_print_vector( level, dlpOld_p );
-#endif
-
- if (!(dlpOld_p->kind & DLOOP_FINAL_MASK)) {
- DLOOP_Dataloop *dlpChild_p = dlpOld_p->loop_params.v_t.dataloop;
- level++;
- PREPEND_PREFIX(Dataloop_optimize)( dlpChild_p );
- level--;
-
- if (dl_contig_isFinal( dlpChild_p ) ) {
- /* We can replace the contig type by enlarging the blocksize */
-
- /* Reset the kind to final, free the child type, set to null */
- dlpOld_p->loop_params.v_t.blocksize *= dlpChild_p->loop_params.count;
- dlpOld_p->el_size = dlpChild_p->el_size;
- dlpOld_p->el_extent = dlpChild_p->el_extent;
- dlpOld_p->kind |= DLOOP_FINAL_MASK;
- dlpOld_p->loop_params.v_t.dataloop = 0;
-#ifdef MPICH_DEBUG_DATALOOP
- if (printIfOptimized || printDataloop) {
- printf( "replacement Vector is:\n" );
- dl_print_vector( level, dlpOld_p );
- }
-#endif
- }
- }
- /* replace vector of a single element with contig */
- if ((dlpOld_p->kind & DLOOP_FINAL_MASK)) {
- int blocksize = dlpOld_p->loop_params.v_t.blocksize;
- int count = dlpOld_p->loop_params.v_t.count;
- if (dlpOld_p->el_size * blocksize ==
- dlpOld_p->loop_params.v_t.stride ) {
- dlpOld_p->kind = DLOOP_KIND_CONTIG | DLOOP_FINAL_MASK;
- dlpOld_p->loop_params.c_t.dataloop = 0;
- dlpOld_p->loop_params.c_t.count = count * blocksize;
-#ifdef MPICH_DEBUG_DATALOOP
- if (printIfOptimized || printDataloop) {
- printf( "replacement Contig is:\n" );
- dl_print_contig( level, dlpOld_p );
- }
-#endif
- }
- }
- /* replace vector that is contiguous with contiguous */
- break;
-
- case DLOOP_KIND_BLOCKINDEXED:
- /* if subdloop is (non-basic) contig, merge with blockcount */
-#ifdef MPICH_DEBUG_DATALOOP
- if (printDataloop)
- dl_print_blockindexed( level, dlpOld_p );
-#endif
- if (!(dlpOld_p->kind & DLOOP_FINAL_MASK)) {
- DLOOP_Dataloop *dlpChild_p = dlpOld_p->loop_params.bi_t.dataloop;
- level++;
- PREPEND_PREFIX(Dataloop_optimize)( dlpChild_p );
- level--;
- if (dl_contig_isFinal( dlpChild_p ) ) {
- /* We can replace the contig type by enlarging the blocksize */
-
- /* Reset the kind to final, free the child type, set to null */
- dlpOld_p->loop_params.bi_t.blocksize *= dlpChild_p->loop_params.count;
- dlpOld_p->el_size = dlpChild_p->el_size;
- dlpOld_p->el_extent = dlpChild_p->el_extent;
- dlpOld_p->kind |= DLOOP_FINAL_MASK;
- dlpOld_p->loop_params.bi_t.dataloop = 0;
-#ifdef MPICH_DEBUG_DATALOOP
- if (printIfOptimized || printDataloop) {
- printf( "replacement BlockIndexed is:\n" );
- dl_print_blockindexed( level, dlpOld_p );
- }
-#endif
- }
- }
- /* replace blockindexed of a single element with contig */
- break;
- case DLOOP_KIND_INDEXED:
- /* if sub-dloop is (non-basic) contig, merge with blockcount */
-#ifdef MPICH_DEBUG_DATALOOP
- if (printDataloop)
- dl_print_indexed( level, dlpOld_p );
-#endif
- if (!(dlpOld_p->kind & DLOOP_FINAL_MASK)) {
- DLOOP_Dataloop *dlpChild_p = dlpOld_p->loop_params.i_t.dataloop;
- level++;
- PREPEND_PREFIX(Dataloop_optimize)( dlpChild_p );
- level--;
- if (dl_contig_isFinal( dlpChild_p ) ) {
- /* Could include the child type in the blocksize counts */
- }
- }
-
- /* replace indexed of constant block count with blockindexed */
-
- /* replace indexed of a single element with contig */
-
- /* If all block counts are multiples of the smallest, and if most
- blocks are smallest, then the other blocks could be split into
- separate blocks with appropriate offsets, replacing indexed with
- blockindexed */
-
- break;
-
- case DLOOP_KIND_STRUCT:
- /* if sub-dloops are all contig, replace with indexed */
-#ifdef MPICH_DEBUG_DATALOOP
- if (printDataloop)
- dl_print_struct( level, dlpOld_p );
-#endif
- if (!(dlpOld_p->kind & DLOOP_FINAL_MASK)) {
- for (i=0; i<dlpOld_p->loop_params.s_t.count; i++) {
- level ++;
- PREPEND_PREFIX(Dataloop_optimize)(
- dlpOld_p->loop_params.s_t.dataloop_array[i] );
- level --;
- }
- }
- break;
- default:
-#ifdef MPICH_DEBUG_DATALOOP
- if (printDataloop)
- dl_print( level, "Unknown type!" );
-#endif
- break;
- }
-
- return 0;
-}
-
-
-/*
- * Make an estimate at the complexity of a datatype. This can be used
- * to determine whether flattening the datatype to an indexed type is
- * likely to be efficient.
- */
-int PREPEND_PREFIX(Dataloop_est_complexity)(DLOOP_Dataloop *dlp_p,
- MPI_Aint *nElms,
- MPI_Aint *nDesc )
-{
- int i;
- MPI_Aint myElms = 0;
- MPI_Aint myDesc = 0;
- MPI_Aint childElms = 0, childDesc = 0;
- DLOOP_Dataloop *dlpChild_p;
-
- switch (dlp_p->kind & DLOOP_KIND_MASK) {
- case DLOOP_KIND_CONTIG:
- /* Data moved is count*size of the child type */
-
- if (!(dlp_p->kind & DLOOP_FINAL_MASK)) {
- dlpChild_p = dlp_p->loop_params.c_t.dataloop;
- PREPEND_PREFIX(Dataloop_est_complexity)( dlpChild_p, &childElms,
- &childDesc );
- }
- else {
- childElms = dlp_p->el_size;
- childDesc = 0;
- }
- myElms += dlp_p->loop_params.c_t.count * childElms;
- myDesc += childDesc + 1;
-
- break;
-
- case DLOOP_KIND_VECTOR:
- /* Data moved is count*size of the child type */
-
- if (!(dlp_p->kind & DLOOP_FINAL_MASK)) {
- dlpChild_p = dlp_p->loop_params.v_t.dataloop;
- PREPEND_PREFIX(Dataloop_est_complexity)( dlpChild_p, &childElms,
- &childDesc );
- }
- else {
- childElms = dlp_p->el_size;
- childDesc = 0;
- }
- myElms += dlp_p->loop_params.v_t.count *
- dlp_p->loop_params.v_t.blocksize * childElms;
- myDesc += childDesc + 2;
-
- break;
-
- case DLOOP_KIND_BLOCKINDEXED:
- if (!(dlp_p->kind & DLOOP_FINAL_MASK)) {
- dlpChild_p = dlp_p->loop_params.bi_t.dataloop;
- PREPEND_PREFIX(Dataloop_est_complexity)( dlpChild_p, &childElms,
- &childDesc );
- }
- else {
- childElms = dlp_p->el_size;
- childDesc = 0;
- }
- myElms += dlp_p->loop_params.bi_t.count *
- dlp_p->loop_params.bi_t.blocksize * childElms;
- myDesc += childDesc + dlp_p->loop_params.bi_t.count;
- break;
-
- case DLOOP_KIND_INDEXED:
-
- if (!(dlp_p->kind & DLOOP_FINAL_MASK)) {
- dlpChild_p = dlp_p->loop_params.i_t.dataloop;
- PREPEND_PREFIX(Dataloop_est_complexity)( dlpChild_p, &childElms,
- &childDesc );
- }
- else {
- childElms = dlp_p->el_size;
- childDesc = 0;
- }
- myElms += dlp_p->loop_params.i_t.total_blocks * childElms;
- myDesc += childDesc + 2 * dlp_p->loop_params.i_t.count;
-
- break;
-
- case DLOOP_KIND_STRUCT:
- if (!(dlp_p->kind & DLOOP_FINAL_MASK)) {
- MPI_Aint celm, cdesc;
- for (i=0; i<dlp_p->loop_params.s_t.count; i++) {
- celm = 0; cdesc = 0;
- PREPEND_PREFIX(Dataloop_est_complexity)(
- dlp_p->loop_params.s_t.dataloop_array[i],
- &celm, &cdesc );
- childElms += celm * dlp_p->loop_params.s_t.blocksize_array[i];
- childDesc += cdesc + 3;
- }
- }
- else {
- int elsize = dlp_p->el_size;
- childElms = 0;
- childDesc = 0;
- for (i=0; i<dlp_p->loop_params.s_t.count; i++) {
- childElms += elsize * dlp_p->loop_params.s_t.blocksize_array[i];
- childDesc += 3;
- }
- }
-
- myElms += childElms;
- myDesc += childDesc;
- break;
-
- default:
- break;
- }
-
- /* Return the final values */
- *nElms += myElms;
- *nDesc += myDesc;
-
- return 0;
-}
-
-/*
- * Estimate the complexity of a struct Dataloop before it is constructed.
- */
-int PREPEND_PREFIX(Dataloop_est_struct_complexity)( int count,
- const int blklens[],
- const DLOOP_Type oldtypes[],
- MPI_Aint *nElms,
- MPI_Aint *nDesc )
-{
- MPI_Aint myElms = 0, myDesc = 0;
- int i;
- int flag = MPID_DATALOOP_ALL_BYTES;
-
- for (i=0; i<count; i++) {
- DLOOP_Dataloop *dlp_p = 0;
- MPI_Aint celms = 0, cdesc = 0;
-
- DLOOP_Handle_get_loopptr_macro(oldtypes[i],dlp_p,flag);
- if (dlp_p) {
- PREPEND_PREFIX(Dataloop_est_complexity)( dlp_p,
- &celms, &cdesc );
- }
- else {
- celms = 1;
- cdesc = 1;
- }
- myElms += celms * blklens[i];
- myDesc += cdesc;
- }
- *nElms = myElms;
- *nDesc = myDesc;
-
- return MPI_SUCCESS;
-}
diff --git a/src/mpid/common/datatype/dataloop/segment_packunpack.c b/src/mpid/common/datatype/dataloop/segment_packunpack.c
index 5de8053..7446b59 100644
--- a/src/mpid/common/datatype/dataloop/segment_packunpack.c
+++ b/src/mpid/common/datatype/dataloop/segment_packunpack.c
@@ -283,22 +283,6 @@ int PREPEND_PREFIX(Segment_blkidx_m2m)(DLOOP_Offset *blocks_p,
DLOOP_Handle_get_size_macro(el_type, el_size);
- /* If the blocklen * el_size is relatively small, then for
- performance reasons, its important to hoist most of these
- tests out of the loop. Ignoring some of the issues of handling
- the available buffer size (blocks_left), this should translate
- directly into code that looks like this for blocksize == 1
-
- for (i=0; i<count; i++) {
- dest[i] = userbuf[offsetarray[i]];
- }
-
- where "dest" and "userbuf" are pointers to objects of the correct
- size. If blocksize is > 1, then various unrollings are important
- until blocksize is large enough to make the overhead of memcpy
- negligible. Datatypes such as this are used in LAMMPS, for example.
- */
-
while (blocks_left) {
char *src, *dest;
diff --git a/src/mpid/common/datatype/mpid_type_commit.c b/src/mpid/common/datatype/mpid_type_commit.c
index 7a9091b..a384e50 100644
--- a/src/mpid/common/datatype/mpid_type_commit.c
+++ b/src/mpid/common/datatype/mpid_type_commit.c
@@ -19,7 +19,6 @@ Output Parameters:
Return Value:
0 on success, -1 on failure.
@*/
-
int MPID_Type_commit(MPI_Datatype *datatype_p)
{
int mpi_errno=MPI_SUCCESS;
@@ -58,13 +57,9 @@ int MPID_Type_commit(MPI_Datatype *datatype_p)
MPIU_DBG_PRINTF(("# contig blocks = %d\n",
(int) datatype_ptr->max_contig_blocks));
- if (MPIR_CVAR_DATALOOP_OPTIMIZE) {
- MPID_Dataloop_optimize(datatype_ptr->dataloop );
- }
#if 0
MPIDI_Dataloop_dot_printf(datatype_ptr->dataloop, 0, 1);
#endif
-
}
return mpi_errno;
diff --git a/src/mpid/common/datatype/mpid_type_debug.c b/src/mpid/common/datatype/mpid_type_debug.c
index 8b58af7..2dc5ceb 100644
--- a/src/mpid/common/datatype/mpid_type_debug.c
+++ b/src/mpid/common/datatype/mpid_type_debug.c
@@ -429,12 +429,7 @@ char *MPIDU_Datatype_combiner_to_string(int combiner)
return NULL;
}
-/* --BEGIN DEBUG-- */
-/*
- * You must configure MPICH with the logging option enabled (--enable-g=log)
- * for these routines to print - in which case, they use the same options
- * as the logging code, including print to file and control by class (DATATYPE)
- */
+/* --BEGIN ERROR HANDLING-- */
void MPIDU_Datatype_debug(MPI_Datatype type,
int array_ct)
{
@@ -665,4 +660,4 @@ void MPIDI_Datatype_contents_printf(MPI_Datatype type,
__mpidi_datatype_free_and_return;
}
}
-/* --END DEBUG-- */
+/* --END ERROR HANDLING-- */
diff --git a/src/mpid/common/datatype/mpid_type_dup.c b/src/mpid/common/datatype/mpid_type_dup.c
index 2fdae83..46ad53e 100644
--- a/src/mpid/common/datatype/mpid_type_dup.c
+++ b/src/mpid/common/datatype/mpid_type_dup.c
@@ -24,7 +24,7 @@ Output Parameters:
. newtype - handle of newly created copy of datatype
Return Value:
- 0 on success, MPI error code on failure.
+ 0 on success, -1 on failure.
@*/
int MPID_Type_dup(MPI_Datatype oldtype,
MPI_Datatype *newtype)
@@ -66,12 +66,9 @@ int MPID_Type_dup(MPI_Datatype oldtype,
new_dtp->has_sticky_lb = old_dtp->has_sticky_lb;
new_dtp->is_permanent = old_dtp->is_permanent;
new_dtp->is_committed = old_dtp->is_committed;
-
- new_dtp->attributes = NULL; /* Attributes are copied in the
- top-level MPI_Type_dup routine */
- new_dtp->cache_id = -1; /* ??? */
- new_dtp->name[0] = 0; /* The Object name is not copied on
- a dup */
+ new_dtp->attributes = NULL; /* ??? */
+ new_dtp->cache_id = -1; /* ??? */
+ new_dtp->name[0] = 0; /* ??? */
new_dtp->n_elements = old_dtp->n_elements;
new_dtp->element_size = old_dtp->element_size;
new_dtp->eltype = old_dtp->eltype;
diff --git a/test/mpi/perf/testlist b/test/mpi/perf/testlist
index 4d665bc..fb206ed 100644
--- a/test/mpi/perf/testlist
+++ b/test/mpi/perf/testlist
@@ -1,10 +1,10 @@
-transp-datatype 2
+transp-datatype 2 xfail=ticket1788
sendrecvl 2
-twovec 1
-dtpack 1
-nestvec 1
-nestvec2 1
-indexperf 1 xfail=ticket1788
+twovec 1 xfail=ticket1788
+dtpack 1 xfail=ticket1789
+nestvec 1 xfail=ticket1788
+nestvec2 1 xfail=ticket1788
+indexperf 1 xfail=ticket1788
non_zero_root 4
timer 1
# The commcreatep test looks at how communicator creation scales with group
-----------------------------------------------------------------------
Summary of changes:
src/mpid/common/datatype/dataloop/Makefile.mk | 3 +-
src/mpid/common/datatype/dataloop/dataloop.c | 4 +-
.../common/datatype/dataloop/dataloop_create.h | 11 +-
.../datatype/dataloop/dataloop_create_contig.c | 13 +-
.../datatype/dataloop/dataloop_create_struct.c | 93 +---
.../common/datatype/dataloop/dataloop_optimize.c | 514 --------------------
.../common/datatype/dataloop/segment_packunpack.c | 16 -
src/mpid/common/datatype/mpid_type_commit.c | 5 -
src/mpid/common/datatype/mpid_type_debug.c | 9 +-
src/mpid/common/datatype/mpid_type_dup.c | 11 +-
test/mpi/perf/testlist | 12 +-
11 files changed, 33 insertions(+), 658 deletions(-)
delete mode 100644 src/mpid/common/datatype/dataloop/dataloop_optimize.c
hooks/post-receive
--
MPICH primary repository
1
0