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
July 2014
- 1 participants
- 63 discussions
[mpich] MPICH primary repository branch, master, updated. v3.1.1-75-gd42c43f
by noreply@mpich.org 09 Jul '14
by noreply@mpich.org 09 Jul '14
09 Jul '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 d42c43f3f9f5f233ceef34a685b40e765aa4d79d (commit)
from 498b080329ce6280c6b636ba5c66e8c46a543b6f (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/d42c43f3f9f5f233ceef34a685b40e765…
commit d42c43f3f9f5f233ceef34a685b40e765aa4d79d
Author: Ken Raffenetti <raffenet(a)mcs.anl.gov>
Date: Wed Jul 9 10:54:25 2014 -0500
portals4: set VC to active when id initialized
Ensures that a VC is activated during a recv operation. Before this,
a VC may only be activated on the sender side. MPI_Finalize would then
hang when waiting for all VCs to terminate.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c
index 8cfd774..a77e9e3 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c
@@ -431,6 +431,8 @@ int MPID_nem_ptl_init_id(MPIDI_VC_t *vc)
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
vc_ptl->id_initialized = TRUE;
+
+ MPIDI_CHANGE_VC_STATE(vc, ACTIVE);
fn_exit:
MPIU_CHKLMEM_FREEALL();
-----------------------------------------------------------------------
Summary of changes:
.../channels/nemesis/netmod/portals4/ptl_init.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-74-g498b080
by noreply@mpich.org 09 Jul '14
by noreply@mpich.org 09 Jul '14
09 Jul '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 498b080329ce6280c6b636ba5c66e8c46a543b6f (commit)
via 088a8a3f6fe6815e15f3d4892aee9a93985a2fba (commit)
from 47b0cca8fbd4cc81bdaf966839c9111c09c4cc03 (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/498b080329ce6280c6b636ba5c66e8c46…
commit 498b080329ce6280c6b636ba5c66e8c46a543b6f
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Fri Jul 4 16:11:31 2014 -0500
Increase the number of possible PMI arguments.
Since this is tied to the amount of cache we can maintain for the PMI
keyvals, a higher number can improve performance.
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/pm/hydra/pm/pmiserv/common.h b/src/pm/hydra/pm/pmiserv/common.h
index c0d6dee..d0c249e 100644
--- a/src/pm/hydra/pm/pmiserv/common.h
+++ b/src/pm/hydra/pm/pmiserv/common.h
@@ -14,7 +14,7 @@
#define PMI_MAXVALLEN (1024) /* max length of value in keyval space */
#define PMI_MAXKVSLEN (256) /* max length of various names */
-#define MAX_PMI_ARGS (1024) /* number of arguments in a PMI command */
+#define MAX_PMI_ARGS (65536) /* number of arguments in a PMI command */
#define MAX_PMI_INTERNAL_ARGS (65536) /* number of arguments in internal communication */
struct HYD_pmcd_pmi_kvs_pair {
http://git.mpich.org/mpich.git/commitdiff/088a8a3f6fe6815e15f3d4892aee9a939…
commit 088a8a3f6fe6815e15f3d4892aee9a93985a2fba
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Fri Jul 4 16:07:48 2014 -0500
Fix bug in PMI keyval caching logic.
When we were flushing the PMI keyval cache, the cache was flushed in
the form of a single very long PMI command. The server would
interpret this as a single PMI command with many arguments. However,
if the cache is larger than the allowed number of PMI arguments, we
might run out of the allocated space. This patch connects these two
values, so the cache can never overrun the number of PMI arguments.
Thanks to Norio Yamaguchi @ Riken for reporting this issue.
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c b/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
index 291e57f..8694f74 100644
--- a/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
+++ b/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
@@ -17,7 +17,12 @@
HYDU_dump(stdout, __VA_ARGS__); \
}
-#define CACHE_PUT_KEYVAL_MAXLEN (65536)
+/* The number of key values we store has to be one less than the
+ * number of PMI arguments allowed. This is because, when we flush
+ * the PMI keyvals upstream, the server will treat it as a single PMI
+ * command. We leave room for one extra argument, cmd=put, that needs
+ * to be appended when flushing. */
+#define CACHE_PUT_KEYVAL_MAXLEN (MAX_PMI_ARGS - 1)
static struct {
char *keyval[CACHE_PUT_KEYVAL_MAXLEN + 1];
-----------------------------------------------------------------------
Summary of changes:
src/pm/hydra/pm/pmiserv/common.h | 2 +-
src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-72-g47b0cca
by noreply@mpich.org 09 Jul '14
by noreply@mpich.org 09 Jul '14
09 Jul '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 47b0cca8fbd4cc81bdaf966839c9111c09c4cc03 (commit)
from c244ba4905f7b1b4541cf1fbd9a84637525e4b22 (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/47b0cca8fbd4cc81bdaf966839c9111c0…
commit 47b0cca8fbd4cc81bdaf966839c9111c09c4cc03
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Wed Jul 9 08:58:43 2014 -0500
Fix badness in fence_shm.
Array size on fence_shm was set to 0, which was not caught by most
platforms, but made solaris go all crazy.
Signed-off-by: Xin Zhao <xinzhao3(a)illinois.edu>
diff --git a/test/mpi/rma/fence_shm.c b/test/mpi/rma/fence_shm.c
index 9711577..d3f53c0 100644
--- a/test/mpi/rma/fence_shm.c
+++ b/test/mpi/rma/fence_shm.c
@@ -21,7 +21,7 @@ int main(int argc, char *argv[])
MPI_Win shm_win;
int *my_base;
int one = 1;
- int result_data[0];
+ int result_data;
MTest_Init(&argc, &argv);
@@ -71,15 +71,15 @@ int main(int argc, char *argv[])
}
if (shm_rank == 0) {
- result_data[0] = 0;
+ result_data = 0;
MPI_Win_fence(MPI_MODE_NOPRECEDE, shm_win);
- MPI_Get(result_data, 1, MPI_INT, 1, 0, 1, MPI_INT, shm_win);
+ MPI_Get(&result_data, 1, MPI_INT, 1, 0, 1, MPI_INT, shm_win);
MPI_Win_fence(0, shm_win);
- if (result_data[0] != one) {
+ if (result_data != one) {
errors++;
- printf("Expected: result_data[0] = %d Actual: result_data[0] = %d\n",
- one, result_data[0]);
+ printf("Expected: result_data = %d Actual: result_data = %d\n",
+ one, result_data);
}
}
-----------------------------------------------------------------------
Summary of changes:
test/mpi/rma/fence_shm.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-71-gc244ba4
by noreply@mpich.org 08 Jul '14
by noreply@mpich.org 08 Jul '14
08 Jul '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 c244ba4905f7b1b4541cf1fbd9a84637525e4b22 (commit)
via 393615326fb43b0383eca3b4ff139286f3085a73 (commit)
via fda7de63ddb9b9c7c5feae1ee86a34f4c3cb8c32 (commit)
via 1c07dbafc4cd4ce8d3eaa67aa1080f7b42e6bf20 (commit)
via f02eed5be2e931f4c31bf787f6df34658bdfbaee (commit)
from 3e62375a49105206bf641b7ea8163d61e3ec3544 (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/c244ba4905f7b1b4541cf1fbd9a846375…
commit c244ba4905f7b1b4541cf1fbd9a84637525e4b22
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Tue Jul 8 21:48:23 2014 -0500
Add a memory barrier at the end of the Win_complete function.
We need to add a memory barrier at the end of the Win_complete
function, so that shared memory operations issued during the
start/complete epoch are visible to other processes on the node.
Signed-off-by: Xin Zhao <xinzhao3(a)illinois.edu>
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 4241d51..859b094 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -2569,6 +2569,11 @@ int MPIDI_Win_complete(MPID_Win *win_ptr)
/* free the group stored in window */
MPIR_Group_release(win_ptr->start_group_ptr);
win_ptr->start_group_ptr = NULL;
+
+ /* Ensure ordering of load/store operations. */
+ if (win_ptr->shm_allocated == TRUE) {
+ OPA_read_write_barrier();
+ }
fn_exit:
MPIU_CHKLMEM_FREEALL();
http://git.mpich.org/mpich.git/commitdiff/393615326fb43b0383eca3b4ff139286f…
commit 393615326fb43b0383eca3b4ff139286f3085a73
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Tue Jul 8 21:00:34 2014 -0500
Add barrier-like semantics in PSCW for shared-memory operations.
When a window uses direct shared-memory operations that are
immediately issued internally, we cannot avoid synchronization during
the start operation. This patch synchronizes processes that reside on
the same node during start and the processes that do not reside on the
same node during complete.
Fixes #2041.
Signed-off-by: Xin Zhao <xinzhao3(a)illinois.edu>
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 0deebe6..4241d51 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -2171,6 +2171,99 @@ int MPIDI_Win_post(MPID_Group *post_grp_ptr, int assert, MPID_Win *win_ptr)
}
+static int recv_post_msgs(MPID_Group *group_ptr, MPID_Win *win_ptr, int local)
+{
+ int mpi_errno = MPI_SUCCESS;
+ int start_grp_size, *ranks_in_start_grp, *ranks_in_win_grp, src, rank, i, j;
+ MPI_Request *req;
+ MPI_Status *status;
+ MPID_Comm *comm_ptr = win_ptr->comm_ptr;
+ MPID_Group *win_grp_ptr;
+ MPIU_CHKLMEM_DECL(4);
+ MPIDI_STATE_DECL(MPID_STATE_RECV_POST_MSGS);
+
+ MPIDI_RMA_FUNC_ENTER(MPID_STATE_RECV_POST_MSGS);
+
+ /* Wait for 0-byte messages from processes either on the same node
+ * or not (depending on the "local" parameter), so we know they
+ * have entered post. */
+ start_grp_size = win_ptr->start_group_ptr->size;
+ MPIU_CHKLMEM_MALLOC(ranks_in_start_grp, int *, start_grp_size*sizeof(int),
+ mpi_errno, "ranks_in_start_grp");
+
+ MPIU_CHKLMEM_MALLOC(ranks_in_win_grp, int *, start_grp_size*sizeof(int),
+ mpi_errno, "ranks_in_win_grp");
+
+ for (i = 0; i < start_grp_size; i++)
+ ranks_in_start_grp[i] = i;
+
+ mpi_errno = MPIR_Comm_group_impl(comm_ptr, &win_grp_ptr);
+ if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
+
+ mpi_errno = MPIR_Group_translate_ranks_impl(win_ptr->start_group_ptr, start_grp_size,
+ ranks_in_start_grp,
+ win_grp_ptr, ranks_in_win_grp);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+
+ rank = win_ptr->comm_ptr->rank;
+ MPIU_CHKLMEM_MALLOC(req, MPI_Request *, start_grp_size*sizeof(MPI_Request), mpi_errno, "req");
+ MPIU_CHKLMEM_MALLOC(status, MPI_Status *, start_grp_size*sizeof(MPI_Status), mpi_errno, "status");
+
+ j = 0;
+ for (i = 0; i < start_grp_size; i++) {
+ src = ranks_in_win_grp[i];
+
+ if (src == rank)
+ continue;
+
+ if (local && win_ptr->shm_allocated == TRUE) {
+ MPID_Request *req_ptr;
+ MPIDI_VC_t *orig_vc = NULL, *target_vc = NULL;
+
+ MPIDI_Comm_get_vc(win_ptr->comm_ptr, rank, &orig_vc);
+ MPIDI_Comm_get_vc(win_ptr->comm_ptr, src, &target_vc);
+
+ if (orig_vc->node_id == target_vc->node_id) {
+ mpi_errno = MPID_Irecv(NULL, 0, MPI_INT, src, SYNC_POST_TAG,
+ comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &req_ptr);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ req[j++] = req_ptr->handle;
+ }
+ }
+ else if (!local) {
+ MPID_Request *req_ptr;
+
+ mpi_errno = MPID_Irecv(NULL, 0, MPI_INT, src, SYNC_POST_TAG,
+ comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &req_ptr);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ req[j++] = req_ptr->handle;
+ }
+ }
+
+ if (j) {
+ mpi_errno = MPIR_Waitall_impl(j, req, status);
+ if (mpi_errno && mpi_errno != MPI_ERR_IN_STATUS) MPIU_ERR_POP(mpi_errno);
+ /* --BEGIN ERROR HANDLING-- */
+ if (mpi_errno == MPI_ERR_IN_STATUS) {
+ for (i = 0; i < start_grp_size; i++) {
+ if (status[i].MPI_ERROR != MPI_SUCCESS) {
+ mpi_errno = status[i].MPI_ERROR;
+ MPIU_ERR_POP(mpi_errno);
+ }
+ }
+ }
+ /* --END ERROR HANDLING-- */
+ }
+
+ mpi_errno = MPIR_Group_free_impl(win_grp_ptr);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+
+ fn_fail:
+ MPIU_CHKLMEM_FREEALL();
+ MPIDI_RMA_FUNC_EXIT(MPID_STATE_RECV_POST_MSGS);
+ return mpi_errno;
+}
+
#undef FUNCNAME
#define FUNCNAME MPIDI_Win_start
@@ -2232,6 +2325,10 @@ int MPIDI_Win_start(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr)
MPIR_Group_add_ref( group_ptr );
win_ptr->start_assert = assert;
+ /* wait for messages from local processes */
+ mpi_errno = recv_post_msgs(group_ptr, win_ptr, 1);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+
fn_fail:
MPIDI_RMA_FUNC_EXIT(MPID_STATE_MPIDI_WIN_START);
return mpi_errno;
@@ -2246,7 +2343,7 @@ int MPIDI_Win_start(MPID_Group *group_ptr, int assert, MPID_Win *win_ptr)
int MPIDI_Win_complete(MPID_Win *win_ptr)
{
int mpi_errno = MPI_SUCCESS;
- int comm_size, *nops_to_proc, src, new_total_op_count;
+ int comm_size, *nops_to_proc, new_total_op_count;
int i, j, dst, total_op_count, *curr_ops_cnt;
MPIDI_RMA_Op_t *curr_ptr;
MPIDI_RMA_Ops_list_t *ops_list;
@@ -2256,7 +2353,7 @@ int MPIDI_Win_complete(MPID_Win *win_ptr)
int start_grp_size, *ranks_in_start_grp, *ranks_in_win_grp, rank;
int nRequest = 0;
int nRequestNew = 0;
- MPIU_CHKLMEM_DECL(9);
+ MPIU_CHKLMEM_DECL(7);
MPIDI_STATE_DECL(MPID_STATE_MPIDI_WIN_COMPLETE);
MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_WIN_COMPLETE);
@@ -2311,43 +2408,9 @@ int MPIDI_Win_complete(MPID_Win *win_ptr)
message from each target process */
if ((win_ptr->start_assert & MPI_MODE_NOCHECK) == 0)
{
- MPI_Request *req;
- MPI_Status *status;
-
- MPIU_CHKLMEM_MALLOC(req, MPI_Request *, start_grp_size*sizeof(MPI_Request), mpi_errno, "req");
- MPIU_CHKLMEM_MALLOC(status, MPI_Status *, start_grp_size*sizeof(MPI_Status), mpi_errno, "status");
-
- MPIR_T_PVAR_COUNTER_INC(RMA, rma_wincomplete_recvsync_aux, start_grp_size);
- for (i = 0; i < start_grp_size; i++) {
- src = ranks_in_win_grp[i];
- if (src != rank) {
- MPID_Request *req_ptr;
- /* FIXME: This is a heavyweight way to process these sync
- messages - this should be handled with a special packet
- type and callback function.
- */
- mpi_errno = MPID_Irecv(NULL, 0, MPI_INT, src, SYNC_POST_TAG,
- comm_ptr, MPID_CONTEXT_INTRA_PT2PT, &req_ptr);
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- req[i] = req_ptr->handle;
- } else {
- req[i] = MPI_REQUEST_NULL;
- }
-
- }
- mpi_errno = MPIR_Waitall_impl(start_grp_size, req, status);
- if (mpi_errno && mpi_errno != MPI_ERR_IN_STATUS) MPIU_ERR_POP(mpi_errno);
-
- /* --BEGIN ERROR HANDLING-- */
- if (mpi_errno == MPI_ERR_IN_STATUS) {
- for (i = 0; i < start_grp_size; i++) {
- if (status[i].MPI_ERROR != MPI_SUCCESS) {
- mpi_errno = status[i].MPI_ERROR;
- MPIU_ERR_POP(mpi_errno);
- }
- }
- }
- /* --END ERROR HANDLING-- */
+ /* wait for messages from non-local processes */
+ mpi_errno = recv_post_msgs(win_ptr->start_group_ptr, win_ptr, 0);
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
MPIR_T_PVAR_TIMER_END(RMA, rma_wincomplete_recvsync);
http://git.mpich.org/mpich.git/commitdiff/fda7de63ddb9b9c7c5feae1ee86a34f4c…
commit fda7de63ddb9b9c7c5feae1ee86a34f4c3cb8c32
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Mon Jul 7 21:36:17 2014 -0500
Add a test code to test FENCE on SHM.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/test/mpi/rma/Makefile.am b/test/mpi/rma/Makefile.am
index 61fb401..ecdd63f 100644
--- a/test/mpi/rma/Makefile.am
+++ b/test/mpi/rma/Makefile.am
@@ -122,7 +122,8 @@ noinst_PROGRAMS = \
rma-contig \
badrma \
nb_test \
- acc-loc
+ acc-loc \
+ fence_shm
strided_acc_indexed_LDADD = $(LDADD) -lm
strided_acc_onelock_LDADD = $(LDADD) -lm
diff --git a/test/mpi/rma/fence_shm.c b/test/mpi/rma/fence_shm.c
new file mode 100644
index 0000000..9711577
--- /dev/null
+++ b/test/mpi/rma/fence_shm.c
@@ -0,0 +1,94 @@
+/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
+/*
+ *
+ * (C) 2014 by Argonne National Laboratory.
+ * See COPYRIGHT in top-level directory.
+ */
+
+#include <stdio.h>
+#include "mpi.h"
+#include "mpitest.h"
+
+#define ELEM_PER_PROC 1
+
+static int errors = 0;
+
+int main(int argc, char *argv[])
+{
+ int rank, nprocs;
+ int shm_rank, shm_nprocs;
+ MPI_Comm shm_comm;
+ MPI_Win shm_win;
+ int *my_base;
+ int one = 1;
+ int result_data[0];
+
+ MTest_Init(&argc, &argv);
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+ /* run with two processes. */
+
+ MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, rank, MPI_INFO_NULL, &shm_comm);
+
+ MPI_Comm_rank(shm_comm, &shm_rank);
+ MPI_Comm_size(shm_comm, &shm_nprocs);
+
+ if (shm_nprocs >= 2) {
+ MPI_Win_allocate_shared(sizeof(int) * ELEM_PER_PROC, sizeof(int), MPI_INFO_NULL,
+ shm_comm, &my_base, &shm_win);
+
+ /* Test for FENCE with no asserts. */
+
+ if (shm_rank == 1) {
+ *my_base = 0;
+
+ MPI_Win_fence(0, shm_win);
+ MPI_Win_fence(0, shm_win);
+
+ if (my_base[0] != one) {
+ errors++;
+ printf("Expected: my_base[0] = %d Actual: my_base[0] = %d\n", one, my_base[0]);
+ }
+ }
+
+ if (shm_rank == 0) {
+ MPI_Win_fence(0, shm_win);
+ MPI_Put(&one, 1, MPI_INT, 1, 0, 1, MPI_INT, shm_win);
+ MPI_Win_fence(0, shm_win);
+ }
+
+ /* Test for FENCE with assert MPI_MODE_NOPRECEDE. */
+
+ if (shm_rank == 1) {
+ MPI_Win_lock(MPI_LOCK_EXCLUSIVE, 1, 0, shm_win);
+ MPI_Put(&one, 1, MPI_INT, 1, 0, 1, MPI_INT, shm_win);
+ MPI_Win_unlock(1, shm_win);
+
+ MPI_Win_fence(MPI_MODE_NOPRECEDE, shm_win);
+ MPI_Win_fence(0, shm_win);
+ }
+
+ if (shm_rank == 0) {
+ result_data[0] = 0;
+ MPI_Win_fence(MPI_MODE_NOPRECEDE, shm_win);
+ MPI_Get(result_data, 1, MPI_INT, 1, 0, 1, MPI_INT, shm_win);
+ MPI_Win_fence(0, shm_win);
+
+ if (result_data[0] != one) {
+ errors++;
+ printf("Expected: result_data[0] = %d Actual: result_data[0] = %d\n",
+ one, result_data[0]);
+ }
+ }
+
+ MPI_Win_free(&shm_win);
+ }
+
+ MPI_Comm_free(&shm_comm);
+
+ MTest_Finalize(errors);
+ MPI_Finalize();
+ return 0;
+}
diff --git a/test/mpi/rma/testlist.in b/test/mpi/rma/testlist.in
index 847689c..04ddc4e 100644
--- a/test/mpi/rma/testlist.in
+++ b/test/mpi/rma/testlist.in
@@ -107,6 +107,7 @@ mutex_bench_shm 4 mpiversion=3.0
rma-contig 2 mpiversion=3.0 timeLimit=600
badrma 2 mpiversion=3.0
acc-loc 4
+fence_shm 2 mpiversion=3.0
## This test is not strictly correct. This was meant to test out the
## case when MPI_Test is not nonblocking. However, we ended up
http://git.mpich.org/mpich.git/commitdiff/1c07dbafc4cd4ce8d3eaa67aa1080f7b4…
commit 1c07dbafc4cd4ce8d3eaa67aa1080f7b42e6bf20
Author: Xin Zhao <xinzhao3(a)illinois.edu>
Date: Mon Jul 7 20:52:40 2014 -0500
Fix bug: add barrier semantic in FENCE for SHM ops.
When SHM is allocated for RMA window, operations are completed
eagerly (as soon as they are posted by the user), therefore we
need barrier semantics in the FENCE that opens an epoch to prevent
SHM ops happening on target process before that target process
starts an epoch.
Note that we need memory barrier before and after synchronization
calls in both FENCEs that starts and ends an epoch to guarantee the
ordering of load/store operations with synchronizations.
See #2041.
Signed-off-by: Pavan Balaji <balaji(a)anl.gov>
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 216ae1d..0deebe6 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -968,6 +968,28 @@ int MPIDI_Win_fence(int assert, MPID_Win *win_ptr)
MPIR_T_PVAR_TIMER_END(RMA, rma_winfence_clearlock);
}
+ if (!(assert & MPI_MODE_NOSUCCEED) &&
+ (assert & MPI_MODE_NOPRECEDE || win_ptr->fence_issued == 0)) {
+
+ /* In the FENCE that opens an epoch but does not close an epoch,
+ if SHM is allocated, perform a barrier among processes on the
+ same node, to prevent one process modifying another process's
+ memory before that process starts an epoch. */
+
+ if (win_ptr->shm_allocated == TRUE) {
+ MPID_Comm *node_comm_ptr = win_ptr->comm_ptr->node_comm;
+
+ /* Ensure ordering of load/store operations. */
+ OPA_read_write_barrier();
+
+ mpi_errno = MPIR_Barrier_impl(node_comm_ptr, &errflag);
+ if (mpi_errno) {goto fn_fail;}
+
+ /* Ensure ordering of load/store operations. */
+ OPA_read_write_barrier();
+ }
+ }
+
/* Note that the NOPRECEDE and NOSUCCEED must be specified by all processes
in the window's group if any specify it */
if (assert & MPI_MODE_NOPRECEDE)
@@ -1054,6 +1076,11 @@ int MPIDI_Win_fence(int assert, MPID_Win *win_ptr)
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
MPIU_ERR_CHKANDJUMP(errflag, mpi_errno, MPI_ERR_OTHER, "**coll_fail");
+ /* Ensure ordering of load/store operations. */
+ if (win_ptr->shm_allocated == TRUE) {
+ OPA_read_write_barrier();
+ }
+
/* Set the completion counter */
/* FIXME: MT: this needs to be done atomically because other
procs have the address and could decrement it. */
http://git.mpich.org/mpich.git/commitdiff/f02eed5be2e931f4c31bf787f6df34658…
commit f02eed5be2e931f4c31bf787f6df34658bdfbaee
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Tue Jul 8 16:19:59 2014 -0500
Only create shared memory when more than one process exists.
If there is only one process on the node in the particular
communicator, we don't need to allocate any shared memory for it. In
this case, we simply call the non-shared-memory functions for
Win_allocate and free.
Signed-off-by: Xin Zhao <xinzhao3(a)illinois.edu>
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c b/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c
index bfd70b3..6278879 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c
@@ -67,6 +67,11 @@ int MPIDI_CH3_SHM_Win_free(MPID_Win **win_ptr)
MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3_SHM_WIN_FREE);
+ if ((*win_ptr)->comm_ptr->node_comm == NULL) {
+ mpi_errno = MPIDI_Win_free(win_ptr);
+ goto fn_exit;
+ }
+
mpi_errno = MPIDI_CH3I_Wait_for_pt_ops_finish(*win_ptr);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
diff --git a/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c b/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c
index 41ebc03..82c5aec 100644
--- a/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c
+++ b/src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c
@@ -62,6 +62,11 @@ static int MPIDI_CH3I_Win_allocate_shm(MPI_Aint size, int disp_unit, MPID_Info *
MPIDI_RMA_FUNC_ENTER(MPID_STATE_MPIDI_CH3I_WIN_ALLOCATE_SHM);
+ if ((*win_ptr)->comm_ptr->node_comm == NULL) {
+ mpi_errno = MPIDI_CH3U_Win_allocate_no_shm(size, disp_unit, info, comm_ptr, base_ptr, win_ptr);
+ goto fn_exit;
+ }
+
/* If create flavor is MPI_WIN_FLAVOR_ALLOCATE, alloc_shared_noncontig is set to 1 by default. */
if ((*win_ptr)->create_flavor == MPI_WIN_FLAVOR_ALLOCATE)
(*win_ptr)->info_args.alloc_shared_noncontig = 1;
-----------------------------------------------------------------------
Summary of changes:
src/mpid/ch3/channels/nemesis/src/ch3_rma_shm.c | 5 +
src/mpid/ch3/channels/nemesis/src/ch3_win_fns.c | 5 +
src/mpid/ch3/src/ch3u_rma_sync.c | 173 ++++++++++++++++++-----
test/mpi/rma/Makefile.am | 3 +-
test/mpi/rma/fence_shm.c | 94 ++++++++++++
test/mpi/rma/testlist.in | 1 +
6 files changed, 241 insertions(+), 40 deletions(-)
create mode 100644 test/mpi/rma/fence_shm.c
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-66-g3e62375
by noreply@mpich.org 08 Jul '14
by noreply@mpich.org 08 Jul '14
08 Jul '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 3e62375a49105206bf641b7ea8163d61e3ec3544 (commit)
from 0989cef3742a9b9ccac167e900fb0310c2c48bc9 (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/3e62375a49105206bf641b7ea8163d61e…
commit 3e62375a49105206bf641b7ea8163d61e3ec3544
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Tue Jul 8 06:45:10 2014 -0500
Removed unnecessary unused attributes.
This seems to be a leftover change from earlier that got pulled into
[b61fc702].
Signed-off-by: Antonio J. Pena <apenya(a)mcs.anl.gov>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
index 13f3f18..a42b4f3 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
@@ -2727,7 +2727,7 @@ look_sysfsnode(struct hwloc_topology *topology,
for (index_ = 0; index_ < nbnodes; index_++) {
char nodepath[SYSFS_NUMA_NODE_PATH_LEN];
hwloc_bitmap_t cpuset;
- hwloc_obj_t node, res_obj __hwloc_attribute_unused;
+ hwloc_obj_t node, res_obj;
osnode = indexes[index_];
@@ -4688,7 +4688,7 @@ hwloc_look_linuxfs_pci(struct hwloc_backend *backend)
unsigned os_index;
char path[64];
char value[16];
- size_t read __hwloc_attribute_unused;
+ size_t read;
FILE *file;
if (sscanf(dirent->d_name, "%04x:%02x:%02x.%01x", &domain, &bus, &dev, &func) != 4)
-----------------------------------------------------------------------
Summary of changes:
.../tools/topo/hwloc/hwloc/src/topology-linux.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-65-g0989cef
by noreply@mpich.org 07 Jul '14
by noreply@mpich.org 07 Jul '14
07 Jul '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 0989cef3742a9b9ccac167e900fb0310c2c48bc9 (commit)
via b208dd70c27812397afe3568ba97fd835c00030e (commit)
via 0011344aee9fadd4c2e879da9b14e764bfbf837a (commit)
from aa1b034353ca4c1ffbfe4d25cb69b62bbe9dee77 (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/0989cef3742a9b9ccac167e900fb0310c…
commit 0989cef3742a9b9ccac167e900fb0310c2c48bc9
Author: Antonio J. Pena <apenya(a)mcs.anl.gov>
Date: Thu Jul 3 14:10:25 2014 -0500
Remove MPICH_ATTR_WEAK_ALIAS macro
After fixing #2002, MPICH_ATTR_WEAK_ALIAS is not needed. This commit
cleans up its leftovers.
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/configure.ac b/configure.ac
index 4d0a929..216b6e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1793,12 +1793,7 @@ if test $enable_weak_symbols = "yes" ; then
# Check for the ability to support multiple weak symbols
if test "$pac_cv_prog_c_weak_symbols" = "pragma weak" ; then
PAC_PROG_C_MULTIPLE_WEAK_SYMBOLS(AC_DEFINE(HAVE_MULTIPLE_PRAGMA_WEAK,1,[Define if multiple weak symbols may be defined]))
- else
- if test "$pac_cv_prog_c_weak_symbols" = "no" -a "$pac_cv_attr_weak_alias" = "yes"; then
- MPICH_ATTR_WEAK_ALIAS_DEFINITION="__attribute__((weak,alias(fname)))"
- fi
fi
- AC_SUBST(MPICH_ATTR_WEAK_ALIAS_DEFINITION)
fi
export NEEDSPLIB
diff --git a/src/binding/fortran/mpif_h/buildiface b/src/binding/fortran/mpif_h/buildiface
index 811d315..0221eb6 100755
--- a/src/binding/fortran/mpif_h/buildiface
+++ b/src/binding/fortran/mpif_h/buildiface
@@ -5264,17 +5264,17 @@ extern FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null_ ( void*v1, MPI_Fint*v
#elif defined(HAVE_WEAK_ATTRIBUTE) /* If support weak attribute */
extern FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null__ ( void*v1, MPI_Fint*v2, MPI_Fint*v3, void*v4, MPI_Offset*v5, MPI_Fint *v6, MPI_Fint*v7, MPI_Fint *ierr )
#ifndef MPICH_MPI_FROM_PMPI
-MPICH_ATTR_WEAK_ALIAS(\"mpi_conversion_fn_null_\")
+__attribute__((weak,alias(\"mpi_conversion_fn_null_\")))
#endif
;
extern FORT_DLL_SPEC int FORT_CALL mpi_conversion_fn_null ( void*v1, MPI_Fint*v2, MPI_Fint*v3, void*v4, MPI_Offset*v5, MPI_Fint *v6, MPI_Fint*v7, MPI_Fint *ierr )
#ifndef MPICH_MPI_FROM_PMPI
-MPICH_ATTR_WEAK_ALIAS(\"mpi_conversion_fn_null_\")
+__attribute__((weak,alias(\"mpi_conversion_fn_null_\")))
#endif
;
extern FORT_DLL_SPEC int FORT_CALL MPI_CONVERSION_FN_NULL ( void*v1, MPI_Fint*v2, MPI_Fint*v3, void*v4, MPI_Offset*v5, MPI_Fint *v6, MPI_Fint*v7, MPI_Fint *ierr )
#ifndef MPICH_MPI_FROM_PMPI
-MPICH_ATTR_WEAK_ALIAS(\"mpi_conversion_fn_null_\")
+__attribute__((weak,alias(\"mpi_conversion_fn_null_\")))
#endif
;
#endif
diff --git a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
index ef15847..91cbf73 100755
--- a/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
+++ b/src/binding/fortran/use_mpi_f08/wrappers_c/buildiface
@@ -424,7 +424,6 @@ while (<FD>) {
$fullline =~ s+/\*.*\*/++g;
# parse out attributes
- $fullline =~ s/MPICH_ATTR_WEAK_ALIAS\(.*\)//g;
$fullline =~ s/MPICH_ATTR_POINTER_WITH_TYPE_TAG\(.*\)//g;
# parse out unnecessary spaces
diff --git a/src/glue/romio/all_romio_symbols b/src/glue/romio/all_romio_symbols
index 9ee6736..dfafd87 100755
--- a/src/glue/romio/all_romio_symbols
+++ b/src/glue/romio/all_romio_symbols
@@ -107,7 +107,6 @@ while (<FD>) {
$fullline =~ s+/\*.*\*/++g;
# parse out attributes
- $fullline =~ s/MPICH_ATTR_WEAK_ALIAS\(.*\)//g;
$fullline =~ s/MPICH_ATTR_POINTER_WITH_TYPE_TAG\(.*\)//g;
# cleanup pointer format
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index f4bfe84..72bbf04 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -14,8 +14,6 @@
extern "C" {
#endif
-#define MPICH_ATTR_WEAK_ALIAS(fname) @MPICH_ATTR_WEAK_ALIAS_DEFINITION@
-
#undef MPICH_DEFINE_ATTR_TYPE_TYPES
#if defined(__has_attribute)
# if __has_attribute(pointer_with_type_tag) && \
http://git.mpich.org/mpich.git/commitdiff/b208dd70c27812397afe3568ba97fd835…
commit b208dd70c27812397afe3568ba97fd835c00030e
Author: Antonio J. Pena <apenya(a)mcs.anl.gov>
Date: Thu Jul 3 13:43:59 2014 -0500
Fix usage of weak,alias attributes
Moved the weak,alias attribute declarations from header files to the
implementation. Complies with the requirement that alias targets are
defined in the same compilation unit.
Fixes #2002
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/src/binding/fortran/use_mpi/create_f90_complex.c b/src/binding/fortran/use_mpi/create_f90_complex.c
index 4960c6c..c002da4 100644
--- a/src/binding/fortran/use_mpi/create_f90_complex.c
+++ b/src/binding/fortran/use_mpi/create_f90_complex.c
@@ -22,6 +22,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_f90_complex MPI_Type_create_f90_complex
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_f90_complex as PMPI_Type_create_f90_complex
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_f90_complex")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/binding/fortran/use_mpi/create_f90_int.c b/src/binding/fortran/use_mpi/create_f90_int.c
index cc421f0..4dd7c8c 100644
--- a/src/binding/fortran/use_mpi/create_f90_int.c
+++ b/src/binding/fortran/use_mpi/create_f90_int.c
@@ -21,6 +21,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_f90_integer MPI_Type_create_f90_integer
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_f90_integer as PMPI_Type_create_f90_integer
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_f90_integer")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/binding/fortran/use_mpi/create_f90_real.c b/src/binding/fortran/use_mpi/create_f90_real.c
index 9711509..a21e810 100644
--- a/src/binding/fortran/use_mpi/create_f90_real.c
+++ b/src/binding/fortran/use_mpi/create_f90_real.c
@@ -22,6 +22,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_f90_real MPI_Type_create_f90_real
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_f90_real as PMPI_Type_create_f90_real
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_f90_real")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/include/mpi.h.in b/src/include/mpi.h.in
index 83d81d3..f4bfe84 100644
--- a/src/include/mpi.h.in
+++ b/src/include/mpi.h.in
@@ -899,633 +899,633 @@ typedef int (MPI_Datarep_extent_function)(MPI_Datatype datatype, MPI_Aint *,
/* We require that the C compiler support prototypes */
/* Begin Prototypes */
int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Send");
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Recv");
-int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_count");
+ MPI_Comm comm, MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count);
int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Bsend");
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ssend");
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rsend");
-int MPI_Buffer_attach(void *buffer, int size) MPICH_ATTR_WEAK_ALIAS("PMPI_Buffer_attach");
-int MPI_Buffer_detach(void *buffer_addr, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Buffer_detach");
+ MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Buffer_attach(void *buffer, int size);
+int MPI_Buffer_detach(void *buffer_addr, int *size);
int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Isend");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ibsend");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Issend");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Irsend");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Irecv");
-int MPI_Wait(MPI_Request *request, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Wait");
-int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Test");
-int MPI_Request_free(MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Request_free");
-int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Waitany");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Wait(MPI_Request *request, MPI_Status *status);
+int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status);
+int MPI_Request_free(MPI_Request *request);
+int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status);
int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx, int *flag,
- MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Testany");
-int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Waitall");
+ MPI_Status *status);
+int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]);
int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
- MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Testall");
+ MPI_Status array_of_statuses[]);
int MPI_Waitsome(int incount, MPI_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Waitsome");
+ int array_of_indices[], MPI_Status array_of_statuses[]);
int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
- int array_of_indices[], MPI_Status array_of_statuses[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Testsome");
-int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Iprobe");
-int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Probe");
-int MPI_Cancel(MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Cancel");
-int MPI_Test_cancelled(const MPI_Status *status, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Test_cancelled");
+ int array_of_indices[], MPI_Status array_of_statuses[]);
+int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status);
+int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status);
+int MPI_Cancel(MPI_Request *request);
+int MPI_Test_cancelled(const MPI_Status *status, int *flag);
int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Send_init");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Bsend_init");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ssend_init");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rsend_init");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, int tag,
- MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Recv_init");
-int MPI_Start(MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Start");
-int MPI_Startall(int count, MPI_Request array_of_requests[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Startall");
+ MPI_Comm comm, MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Start(MPI_Request *request);
+int MPI_Startall(int count, MPI_Request array_of_requests[]);
int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest,
int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int source, int recvtag, MPI_Comm comm, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Sendrecv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(6,8);
int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest,
int sendtag, int source, int recvtag, MPI_Comm comm,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Sendrecv_replace");
-int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_contiguous");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype);
int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_vector");
+ MPI_Datatype *newtype);
int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_hvector");
+ MPI_Datatype *newtype);
int MPI_Type_indexed(int count, const int *array_of_blocklengths,
const int *array_of_displacements, MPI_Datatype oldtype,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_indexed");
+ MPI_Datatype *newtype);
int MPI_Type_hindexed(int count, const int *array_of_blocklengths,
const MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_hindexed");
+ MPI_Datatype *newtype);
int MPI_Type_struct(int count, const int *array_of_blocklengths,
const MPI_Aint *array_of_displacements,
- const MPI_Datatype *array_of_types, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_struct");
-int MPI_Address(const void *location, MPI_Aint *address) MPICH_ATTR_WEAK_ALIAS("PMPI_Address");
-int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_extent");
-int MPI_Type_size(MPI_Datatype datatype, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_size");
-int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_lb");
-int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_ub");
-int MPI_Type_commit(MPI_Datatype *datatype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_commit");
-int MPI_Type_free(MPI_Datatype *datatype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_free");
-int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_elements");
+ const MPI_Datatype *array_of_types, MPI_Datatype *newtype);
+int MPI_Address(const void *location, MPI_Aint *address);
+int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent);
+int MPI_Type_size(MPI_Datatype datatype, int *size);
+int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement);
+int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement);
+int MPI_Type_commit(MPI_Datatype *datatype);
+int MPI_Type_free(MPI_Datatype *datatype);
+int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count);
int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf,
- int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack");
+ int outsize, int *position, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Unpack(const void *inbuf, int insize, int *position, void *outbuf, int outcount,
- MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Unpack");
-int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack_size");
-int MPI_Barrier(MPI_Comm comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Barrier");
+ MPI_Datatype datatype, MPI_Comm comm) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size);
+int MPI_Barrier(MPI_Comm comm);
int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Bcast");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Gather");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Gatherv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Scatter");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Scatterv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Allgather");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Allgatherv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Alltoall");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Alltoallv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
int MPI_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Alltoallw");
+ const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Exscan");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce");
-int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op) MPICH_ATTR_WEAK_ALIAS("PMPI_Op_create");
-int MPI_Op_free(MPI_Op *op) MPICH_ATTR_WEAK_ALIAS("PMPI_Op_free");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op);
+int MPI_Op_free(MPI_Op *op);
int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Allreduce");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce_scatter");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPI_Comm comm)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Scan");
-int MPI_Group_size(MPI_Group group, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_size");
-int MPI_Group_rank(MPI_Group group, int *rank) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_rank");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_Group_size(MPI_Group group, int *size);
+int MPI_Group_rank(MPI_Group group, int *rank);
int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[], MPI_Group group2,
- int ranks2[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_translate_ranks");
-int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_compare");
-int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_group");
-int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_union");
-int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_intersection");
-int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_difference");
-int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_incl");
-int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_excl");
-int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_range_incl");
-int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_range_excl");
-int MPI_Group_free(MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Group_free");
-int MPI_Comm_size(MPI_Comm comm, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_size");
-int MPI_Comm_rank(MPI_Comm comm, int *rank) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_rank");
-int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_compare");
-int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_dup");
-int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_dup_with_info");
-int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create");
-int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_split");
-int MPI_Comm_free(MPI_Comm *comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_free");
-int MPI_Comm_test_inter(MPI_Comm comm, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_test_inter");
-int MPI_Comm_remote_size(MPI_Comm comm, int *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_remote_size");
-int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_remote_group");
+ int ranks2[]);
+int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result);
+int MPI_Comm_group(MPI_Comm comm, MPI_Group *group);
+int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
+int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
+int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);
+int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
+int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup);
+int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
+int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup);
+int MPI_Group_free(MPI_Group *group);
+int MPI_Comm_size(MPI_Comm comm, int *size);
+int MPI_Comm_rank(MPI_Comm comm, int *rank);
+int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result);
+int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm);
+int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm);
+int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm);
+int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm);
+int MPI_Comm_free(MPI_Comm *comm);
+int MPI_Comm_test_inter(MPI_Comm comm, int *flag);
+int MPI_Comm_remote_size(MPI_Comm comm, int *size);
+int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group);
int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm,
- int remote_leader, int tag, MPI_Comm *newintercomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Intercomm_create");
-int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Intercomm_merge");
+ int remote_leader, int tag, MPI_Comm *newintercomm);
+int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm);
int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn,
- int *keyval, void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Keyval_create");
-int MPI_Keyval_free(int *keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Keyval_free");
-int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Attr_put");
-int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Attr_get");
-int MPI_Attr_delete(MPI_Comm comm, int keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Attr_delete");
-int MPI_Topo_test(MPI_Comm comm, int *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Topo_test");
+ int *keyval, void *extra_state);
+int MPI_Keyval_free(int *keyval);
+int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val);
+int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag);
+int MPI_Attr_delete(MPI_Comm comm, int keyval);
+int MPI_Topo_test(MPI_Comm comm, int *status);
int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int periods[],
- int reorder, MPI_Comm *comm_cart) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_create");
-int MPI_Dims_create(int nnodes, int ndims, int dims[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Dims_create");
+ int reorder, MPI_Comm *comm_cart);
+int MPI_Dims_create(int nnodes, int ndims, int dims[]);
int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[], const int edges[],
- int reorder, MPI_Comm *comm_graph) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_create");
-int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) MPICH_ATTR_WEAK_ALIAS("PMPI_Graphdims_get");
-int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_get");
-int MPI_Cartdim_get(MPI_Comm comm, int *ndims) MPICH_ATTR_WEAK_ALIAS("PMPI_Cartdim_get");
-int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_get");
-int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_rank");
-int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_coords");
-int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_neighbors_count");
-int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_neighbors");
-int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_shift");
-int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_sub");
-int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank) MPICH_ATTR_WEAK_ALIAS("PMPI_Cart_map");
-int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank) MPICH_ATTR_WEAK_ALIAS("PMPI_Graph_map");
-int MPI_Get_processor_name(char *name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_processor_name");
-int MPI_Get_version(int *version, int *subversion) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_version");
-int MPI_Get_library_version(char *version, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_library_version");
-int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_create");
-int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_set");
-int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_get");
-int MPI_Errhandler_free(MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Errhandler_free");
-int MPI_Error_string(int errorcode, char *string, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Error_string");
-int MPI_Error_class(int errorcode, int *errorclass) MPICH_ATTR_WEAK_ALIAS("PMPI_Error_class");
-double MPI_Wtime(void) MPICH_ATTR_WEAK_ALIAS("PMPI_Wtime");
-double MPI_Wtick(void) MPICH_ATTR_WEAK_ALIAS("PMPI_Wtick");
-int MPI_Init(int *argc, char ***argv) MPICH_ATTR_WEAK_ALIAS("PMPI_Init");
-int MPI_Finalize(void) MPICH_ATTR_WEAK_ALIAS("PMPI_Finalize");
-int MPI_Initialized(int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Initialized");
-int MPI_Abort(MPI_Comm comm, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Abort");
+ int reorder, MPI_Comm *comm_graph);
+int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges);
+int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]);
+int MPI_Cartdim_get(MPI_Comm comm, int *ndims);
+int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]);
+int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank);
+int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]);
+int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors);
+int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]);
+int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest);
+int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
+int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank);
+int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank);
+int MPI_Get_processor_name(char *name, int *resultlen);
+int MPI_Get_version(int *version, int *subversion);
+int MPI_Get_library_version(char *version, int *resultlen);
+int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler);
+int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler);
+int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler);
+int MPI_Errhandler_free(MPI_Errhandler *errhandler);
+int MPI_Error_string(int errorcode, char *string, int *resultlen);
+int MPI_Error_class(int errorcode, int *errorclass);
+double MPI_Wtime(void);
+double MPI_Wtick(void);
+int MPI_Init(int *argc, char ***argv);
+int MPI_Finalize(void);
+int MPI_Initialized(int *flag);
+int MPI_Abort(MPI_Comm comm, int errorcode);
/* Note that we may need to define a @PCONTROL_LIST@ depending on whether
stdargs are supported */
-int MPI_Pcontrol(const int level, ...) MPICH_ATTR_WEAK_ALIAS("PMPI_Pcontrol");
+int MPI_Pcontrol(const int level, ...);
int MPI_DUP_FN(MPI_Comm oldcomm, int keyval, void *extra_state, void *attribute_val_in,
void *attribute_val_out, int *flag);
/* Process Creation and Management */
-int MPI_Close_port(const char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Close_port");
+int MPI_Close_port(const char *port_name);
int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
- MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_accept");
+ MPI_Comm *newcomm);
int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
- MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_connect");
-int MPI_Comm_disconnect(MPI_Comm *comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_disconnect");
-int MPI_Comm_get_parent(MPI_Comm *parent) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_parent");
-int MPI_Comm_join(int fd, MPI_Comm *intercomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_join");
+ MPI_Comm *newcomm);
+int MPI_Comm_disconnect(MPI_Comm *comm);
+int MPI_Comm_get_parent(MPI_Comm *parent);
+int MPI_Comm_join(int fd, MPI_Comm *intercomm);
int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info info, int root,
- MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_spawn");
+ MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[],
const int array_of_maxprocs[], const MPI_Info array_of_info[],
- int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_spawn_multiple");
-int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Lookup_name");
-int MPI_Open_port(MPI_Info info, char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Open_port");
-int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Publish_name");
-int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Unpublish_name");
-int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_info");
-int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_info");
+ int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]);
+int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name);
+int MPI_Open_port(MPI_Info info, char *port_name);
+int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name);
+int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name);
+int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info);
+int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info);
/* One-Sided Communications */
int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Accumulate");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
- MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Get");
+ MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
int target_rank, MPI_Aint target_disp, int target_count,
- MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Put");
-int MPI_Win_complete(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_complete");
+ MPI_Datatype target_datatype, MPI_Win win) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Win_complete(MPI_Win win);
int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
- MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create");
-int MPI_Win_fence(int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_fence");
-int MPI_Win_free(MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_free");
-int MPI_Win_get_group(MPI_Win win, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_group");
-int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_lock");
-int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_post");
-int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_start");
-int MPI_Win_test(MPI_Win win, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_test");
-int MPI_Win_unlock(int rank, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_unlock");
-int MPI_Win_wait(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_wait");
+ MPI_Win *win);
+int MPI_Win_fence(int assert, MPI_Win win);
+int MPI_Win_free(MPI_Win *win);
+int MPI_Win_get_group(MPI_Win win, MPI_Group *group);
+int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win);
+int MPI_Win_post(MPI_Group group, int assert, MPI_Win win);
+int MPI_Win_start(MPI_Group group, int assert, MPI_Win win);
+int MPI_Win_test(MPI_Win win, int *flag);
+int MPI_Win_unlock(int rank, MPI_Win win);
+int MPI_Win_wait(MPI_Win win);
/* MPI-3 One-Sided Communication Routines */
int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr,
- MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_allocate");
+ MPI_Win *win);
int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
- void *baseptr, MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_allocate_shared");
-int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_shared_query");
-int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create_dynamic");
-int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_attach");
-int MPI_Win_detach(MPI_Win win, const void *base) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_detach");
-int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_info");
-int MPI_Win_set_info(MPI_Win win, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_info");
+ void *baseptr, MPI_Win *win);
+int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr);
+int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win);
+int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size);
+int MPI_Win_detach(MPI_Win win, const void *base);
+int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used);
+int MPI_Win_set_info(MPI_Win win, MPI_Info info);
int MPI_Get_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_accumulate");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
MPI_Op op, MPI_Win win)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Fetch_and_op");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
void *result_addr, MPI_Datatype datatype, int target_rank,
MPI_Aint target_disp, MPI_Win win)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Compare_and_swap");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,4);
int MPI_Rput(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rput");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Rget(void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Rget");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Raccumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Raccumulate");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
MPI_Datatype origin_datatype, void *result_addr, int result_count,
MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Rget_accumulate");
-int MPI_Win_lock_all(int assert, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_lock_all");
-int MPI_Win_unlock_all(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_unlock_all");
-int MPI_Win_flush(int rank, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush");
-int MPI_Win_flush_all(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush_all");
-int MPI_Win_flush_local(int rank, MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush_local");
-int MPI_Win_flush_local_all(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_flush_local_all");
-int MPI_Win_sync(MPI_Win win) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_sync");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
+int MPI_Win_lock_all(int assert, MPI_Win win);
+int MPI_Win_unlock_all(MPI_Win win);
+int MPI_Win_flush(int rank, MPI_Win win);
+int MPI_Win_flush_all(MPI_Win win);
+int MPI_Win_flush_local(int rank, MPI_Win win);
+int MPI_Win_flush_local_all(MPI_Win win);
+int MPI_Win_sync(MPI_Win win);
/* External Interfaces */
-int MPI_Add_error_class(int *errorclass) MPICH_ATTR_WEAK_ALIAS("PMPI_Add_error_class");
-int MPI_Add_error_code(int errorclass, int *errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Add_error_code");
-int MPI_Add_error_string(int errorcode, const char *string) MPICH_ATTR_WEAK_ALIAS("PMPI_Add_error_string");
-int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_call_errhandler");
+int MPI_Add_error_class(int *errorclass);
+int MPI_Add_error_code(int errorclass, int *errorcode);
+int MPI_Add_error_string(int errorcode, const char *string);
+int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode);
int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
MPI_Comm_delete_attr_function *comm_delete_attr_fn, int *comm_keyval,
- void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create_keyval");
-int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_delete_attr");
-int MPI_Comm_free_keyval(int *comm_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_free_keyval");
-int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_attr");
-int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_name");
-int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_attr");
-int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_name");
-int MPI_File_call_errhandler(MPI_File fh, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_File_call_errhandler");
-int MPI_Grequest_complete(MPI_Request request) MPICH_ATTR_WEAK_ALIAS("PMPI_Grequest_complete");
+ void *extra_state);
+int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval);
+int MPI_Comm_free_keyval(int *comm_keyval);
+int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag);
+int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen);
+int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val);
+int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name);
+int MPI_File_call_errhandler(MPI_File fh, int errorcode);
+int MPI_Grequest_complete(MPI_Request request);
int MPI_Grequest_start(MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn,
MPI_Grequest_cancel_function *cancel_fn, void *extra_state,
- MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Grequest_start");
-int MPI_Init_thread(int *argc, char ***argv, int required, int *provided) MPICH_ATTR_WEAK_ALIAS("PMPI_Init_thread");
-int MPI_Is_thread_main(int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Is_thread_main");
-int MPI_Query_thread(int *provided) MPICH_ATTR_WEAK_ALIAS("PMPI_Query_thread");
-int MPI_Status_set_cancelled(MPI_Status *status, int flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_set_cancelled");
-int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_set_elements");
+ MPI_Request *request);
+int MPI_Init_thread(int *argc, char ***argv, int required, int *provided);
+int MPI_Is_thread_main(int *flag);
+int MPI_Query_thread(int *provided);
+int MPI_Status_set_cancelled(MPI_Status *status, int flag);
+int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count);
int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
MPI_Type_delete_attr_function *type_delete_attr_fn,
- int *type_keyval, void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_keyval");
-int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_delete_attr");
-int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_dup");
-int MPI_Type_free_keyval(int *type_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_free_keyval");
-int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_attr");
+ int *type_keyval, void *extra_state);
+int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval);
+int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype);
+int MPI_Type_free_keyval(int *type_keyval);
+int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag);
int MPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses,
int max_datatypes, int array_of_integers[],
- MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_contents");
+ MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]);
int MPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses,
- int *num_datatypes, int *combiner) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_envelope");
-int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_name");
-int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_set_attr");
-int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_set_name");
-int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_match_size");
-int MPI_Win_call_errhandler(MPI_Win win, int errorcode) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_call_errhandler");
+ int *num_datatypes, int *combiner);
+int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen);
+int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val);
+int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name);
+int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype);
+int MPI_Win_call_errhandler(MPI_Win win, int errorcode);
int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
MPI_Win_delete_attr_function *win_delete_attr_fn, int *win_keyval,
- void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create_keyval");
-int MPI_Win_delete_attr(MPI_Win win, int win_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_delete_attr");
-int MPI_Win_free_keyval(int *win_keyval) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_free_keyval");
-int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_attr");
-int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_name");
-int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_attr");
-int MPI_Win_set_name(MPI_Win win, const char *win_name) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_name");
-
-int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) MPICH_ATTR_WEAK_ALIAS("PMPI_Alloc_mem");
+ void *extra_state);
+int MPI_Win_delete_attr(MPI_Win win, int win_keyval);
+int MPI_Win_free_keyval(int *win_keyval);
+int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag);
+int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen);
+int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val);
+int MPI_Win_set_name(MPI_Win win, const char *win_name);
+
+int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr);
int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
- MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create_errhandler");
-int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_get_errhandler");
-int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_set_errhandler");
+ MPI_Errhandler *errhandler);
+int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler);
+int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler);
int MPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
- MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_create_errhandler");
-int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_errhandler");
-int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_errhandler");
-int MPI_Finalized(int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Finalized");
-int MPI_Free_mem(void *base) MPICH_ATTR_WEAK_ALIAS("PMPI_Free_mem");
-int MPI_Get_address(const void *location, MPI_Aint *address) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_address");
-int MPI_Info_create(MPI_Info *info) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_create");
-int MPI_Info_delete(MPI_Info info, const char *key) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_delete");
-int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_dup");
-int MPI_Info_free(MPI_Info *info) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_free");
-int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get");
-int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get_nkeys");
-int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get_nthkey");
-int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_get_valuelen");
-int MPI_Info_set(MPI_Info info, const char *key, const char *value) MPICH_ATTR_WEAK_ALIAS("PMPI_Info_set");
+ MPI_Errhandler *errhandler);
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler);
+int MPI_Finalized(int *flag);
+int MPI_Free_mem(void *base);
+int MPI_Get_address(const void *location, MPI_Aint *address);
+int MPI_Info_create(MPI_Info *info);
+int MPI_Info_delete(MPI_Info info, const char *key);
+int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo);
+int MPI_Info_free(MPI_Info *info);
+int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag);
+int MPI_Info_get_nkeys(MPI_Info info, int *nkeys);
+int MPI_Info_get_nthkey(MPI_Info info, int n, char *key);
+int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag);
+int MPI_Info_set(MPI_Info info, const char *key, const char *value);
int MPI_Pack_external(const char datarep[], const void *inbuf, int incount,
MPI_Datatype datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack_external");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Pack_external_size(const char datarep[], int incount, MPI_Datatype datatype,
- MPI_Aint *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Pack_external_size");
-int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Request_get_status");
-int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_c2f");
-int MPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_f2c");
+ MPI_Aint *size);
+int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status);
+int MPI_Status_c2f(const MPI_Status *c_status, MPI_Fint *f_status);
+int MPI_Status_f2c(const MPI_Fint *f_status, MPI_Status *c_status);
int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[],
const int array_of_distribs[], const int array_of_dargs[],
const int array_of_psizes[], int order, MPI_Datatype oldtype,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_darray");
+ MPI_Datatype *newtype);
int MPI_Type_create_hindexed(int count, const int array_of_blocklengths[],
const MPI_Aint array_of_displacements[], MPI_Datatype oldtype,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_hindexed");
+ MPI_Datatype *newtype);
int MPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_hvector");
+ MPI_Datatype *newtype);
int MPI_Type_create_indexed_block(int count, int blocklength, const int array_of_displacements[],
- MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_indexed_block");
+ MPI_Datatype oldtype, MPI_Datatype *newtype);
int MPI_Type_create_hindexed_block(int count, int blocklength,
const MPI_Aint array_of_displacements[],
- MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_hindexed_block");
+ MPI_Datatype oldtype, MPI_Datatype *newtype);
int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent,
- MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_resized");
+ MPI_Datatype *newtype);
int MPI_Type_create_struct(int count, const int array_of_blocklengths[],
const MPI_Aint array_of_displacements[],
- const MPI_Datatype array_of_types[], MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_struct");
+ const MPI_Datatype array_of_types[], MPI_Datatype *newtype);
int MPI_Type_create_subarray(int ndims, const int array_of_sizes[],
const int array_of_subsizes[], const int array_of_starts[],
- int order, MPI_Datatype oldtype, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_subarray");
-int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_extent");
-int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_true_extent");
+ int order, MPI_Datatype oldtype, MPI_Datatype *newtype);
+int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent);
+int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent);
int MPI_Unpack_external(const char datarep[], const void *inbuf, MPI_Aint insize,
MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Unpack_external");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
- MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_create_errhandler");
-int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_get_errhandler");
-int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_Win_set_errhandler");
+ MPI_Errhandler *errhandler);
+int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler);
+int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler);
/* Fortran 90-related functions. These routines are available only if
Fortran 90 support is enabled
*/
-int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_f90_integer");
-int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_f90_real");
-int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_create_f90_complex");
+int MPI_Type_create_f90_integer(int range, MPI_Datatype *newtype);
+int MPI_Type_create_f90_real(int precision, int range, MPI_Datatype *newtype);
+int MPI_Type_create_f90_complex(int precision, int range, MPI_Datatype *newtype);
int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype,
MPI_Op op)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce_local");
-int MPI_Op_commutative(MPI_Op op, int *commute) MPICH_ATTR_WEAK_ALIAS("PMPI_Op_commutative");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_Op_commutative(MPI_Op op, int *commute);
int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Reduce_scatter_block");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, const int sources[],
const int sourceweights[], int outdegree,
const int destinations[], const int destweights[],
- MPI_Info info, int reorder, MPI_Comm *comm_dist_graph) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_create_adjacent");
+ MPI_Info info, int reorder, MPI_Comm *comm_dist_graph);
int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[], const int degrees[],
const int destinations[], const int weights[], MPI_Info info,
- int reorder, MPI_Comm *comm_dist_graph) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_create");
-int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_neighbors_count");
+ int reorder, MPI_Comm *comm_dist_graph);
+int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted);
int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int sources[], int sourceweights[],
- int maxoutdegree, int destinations[], int destweights[]) MPICH_ATTR_WEAK_ALIAS("PMPI_Dist_graph_neighbors");
+ int maxoutdegree, int destinations[], int destweights[]);
/* Matched probe functionality */
int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message,
- MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Improbe");
+ MPI_Status *status);
int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
- MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Imrecv");
-int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_Mprobe");
+ MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
+int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status);
int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Mrecv");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
/* Nonblocking collectives */
-int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_idup");
-int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Ibarrier");
+int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request);
+int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request);
int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm,
- MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_WEAK_ALIAS("PMPI_Ibcast");
+ MPI_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3);
int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Igather");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Igatherv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Iscatter");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[],
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Iscatterv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,7);
int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Iallgather");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int recvcounts[], const int displs[], MPI_Datatype recvtype,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Iallgatherv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Ialltoall");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3) MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Ialltoallv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm,
- MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Ialltoallw");
+ MPI_Request *request);
int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Ireduce");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Iallreduce");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Ireduce_scatter");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Ireduce_scatter_block");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Iscan");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPI_Comm comm, MPI_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_Iexscan");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
/* Neighborhood collectives */
int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
MPI_Comm comm, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_allgather");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_allgatherv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_alltoall");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
MPI_Request *request)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_alltoallv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[],
- const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request) MPICH_ATTR_WEAK_ALIAS("PMPI_Ineighbor_alltoallw");
+ const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request);
int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_allgather");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int recvcounts[], const int displs[],
MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_allgatherv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,7);
int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,3)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_alltoall");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(4,6);
int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
MPICH_ATTR_POINTER_WITH_TYPE_TAG(1,4)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_alltoallv");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(5,8);
int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
- const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) MPICH_ATTR_WEAK_ALIAS("PMPI_Neighbor_alltoallw");
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm);
/* Shared memory */
-int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_split_type");
+int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm);
/* MPI-3 "large count" routines */
-int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count) MPICH_ATTR_WEAK_ALIAS("PMPI_Get_elements_x");
-int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count) MPICH_ATTR_WEAK_ALIAS("PMPI_Status_set_elements_x");
-int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_extent_x");
-int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_get_true_extent_x");
-int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size) MPICH_ATTR_WEAK_ALIAS("PMPI_Type_size_x");
+int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count);
+int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count);
+int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
+int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent);
+int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size);
/* Noncollective communicator creation */
-int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm) MPICH_ATTR_WEAK_ALIAS("PMPI_Comm_create_group");
+int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm);
/* Non-standard but public extensions to MPI */
/* Fault Tolerance Extensions */
-int MPIX_Comm_group_failed(MPI_Comm comm, MPI_Group *failed_group) MPICH_ATTR_WEAK_ALIAS("PMPIX_Comm_group_failed");
-int MPIX_Comm_remote_group_failed(MPI_Comm comm, MPI_Group *failed_group) MPICH_ATTR_WEAK_ALIAS("PMPIX_Comm_remote_group_failed");
-int MPIX_Comm_reenable_anysource(MPI_Comm comm, MPI_Group *failed_group) MPICH_ATTR_WEAK_ALIAS("PMPIX_Comm_reenable_anysource");
+int MPIX_Comm_group_failed(MPI_Comm comm, MPI_Group *failed_group);
+int MPIX_Comm_remote_group_failed(MPI_Comm comm, MPI_Group *failed_group);
+int MPIX_Comm_reenable_anysource(MPI_Comm comm, MPI_Group *failed_group);
/* MPI_T interface */
/* The MPI_T routines are available only in C bindings - tell tools that they
can skip these prototypes */
/* Begin Skip Prototypes */
-int MPI_T_init_thread(int required, int *provided) MPICH_ATTR_WEAK_ALIAS("PMPI_T_init_thread");
-int MPI_T_finalize(void) MPICH_ATTR_WEAK_ALIAS("PMPI_T_finalize");
-int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len) MPICH_ATTR_WEAK_ALIAS("PMPI_T_enum_get_info");
-int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len) MPICH_ATTR_WEAK_ALIAS("PMPI_T_enum_get_item");
-int MPI_T_cvar_get_num(int *num_cvar) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_get_num");
+int MPI_T_init_thread(int required, int *provided);
+int MPI_T_finalize(void);
+int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len);
+int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len);
+int MPI_T_cvar_get_num(int *num_cvar);
int MPI_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity,
MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
- int *binding, int *scope) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_get_info");
+ int *binding, int *scope);
int MPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle,
- int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_handle_alloc");
-int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_handle_free");
-int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_read");
-int MPI_T_cvar_write(MPI_T_cvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_cvar_write");
-int MPI_T_pvar_get_num(int *num_pvar) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_get_num");
+ int *count);
+int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle);
+int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf);
+int MPI_T_cvar_write(MPI_T_cvar_handle handle, void *buf);
+int MPI_T_pvar_get_num(int *num_pvar);
int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class,
MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
- int *binding, int *readonly, int *continuous, int *atomic) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_get_info");
-int MPI_T_pvar_session_create(MPI_T_pvar_session *session) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_session_create");
-int MPI_T_pvar_session_free(MPI_T_pvar_session *session) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_session_free");
+ int *binding, int *readonly, int *continuous, int *atomic);
+int MPI_T_pvar_session_create(MPI_T_pvar_session *session);
+int MPI_T_pvar_session_free(MPI_T_pvar_session *session);
int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index, void *obj_handle,
- MPI_T_pvar_handle *handle, int *count) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_handle_alloc");
-int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_handle_free");
-int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_start");
-int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_stop");
-int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_read");
-int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_write");
-int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_reset");
-int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) MPICH_ATTR_WEAK_ALIAS("PMPI_T_pvar_readreset");
-int MPI_T_category_get_num(int *num_cat) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_num");
+ MPI_T_pvar_handle *handle, int *count);
+int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle);
+int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle);
+int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf);
+int MPI_T_category_get_num(int *num_cat);
int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len,
- int *num_cvars, int *num_pvars, int *num_categories) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_info");
-int MPI_T_category_get_cvars(int cat_index, int len, int indices[]) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_cvars");
-int MPI_T_category_get_pvars(int cat_index, int len, int indices[]) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_pvars");
-int MPI_T_category_get_categories(int cat_index, int len, int indices[]) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_get_categories");
-int MPI_T_category_changed(int *stamp) MPICH_ATTR_WEAK_ALIAS("PMPI_T_category_changed");
+ int *num_cvars, int *num_pvars, int *num_categories);
+int MPI_T_category_get_cvars(int cat_index, int len, int indices[]);
+int MPI_T_category_get_pvars(int cat_index, int len, int indices[]);
+int MPI_T_category_get_categories(int cat_index, int len, int indices[]);
+int MPI_T_category_changed(int *stamp);
/* End Skip Prototypes */
/* End Prototypes */
#endif /* MPICH_SUPPRESS_PROTOTYPES */
diff --git a/src/mpi/attr/attr_delete.c b/src/mpi/attr/attr_delete.c
index b9c72d8..7594dcc 100644
--- a/src/mpi/attr/attr_delete.c
+++ b/src/mpi/attr/attr_delete.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Attr_delete MPI_Attr_delete
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Attr_delete as PMPI_Attr_delete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Attr_delete(MPI_Comm comm, int keyval) __attribute__((weak,alias("PMPI_Attr_delete")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/attr_get.c b/src/mpi/attr/attr_get.c
index 122ed46..f02ac02 100644
--- a/src/mpi/attr/attr_get.c
+++ b/src/mpi/attr/attr_get.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Attr_get MPI_Attr_get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Attr_get as PMPI_Attr_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Attr_get(MPI_Comm comm, int keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Attr_get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/attr_put.c b/src/mpi/attr/attr_put.c
index ee2a084..91b74fb 100644
--- a/src/mpi/attr/attr_put.c
+++ b/src/mpi/attr/attr_put.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Attr_put MPI_Attr_put
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Attr_put as PMPI_Attr_put
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Attr_put")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/comm_create_keyval.c b/src/mpi/attr/comm_create_keyval.c
index f145189..e2f5f28 100644
--- a/src/mpi/attr/comm_create_keyval.c
+++ b/src/mpi/attr/comm_create_keyval.c
@@ -24,6 +24,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_create_keyval MPI_Comm_create_keyval
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_create_keyval as PMPI_Comm_create_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create_keyval(MPI_Comm_copy_attr_function *comm_copy_attr_fn,
+ MPI_Comm_delete_attr_function *comm_delete_attr_fn, int *comm_keyval,
+ void *extra_state) __attribute__((weak,alias("PMPI_Comm_create_keyval")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/comm_delete_attr.c b/src/mpi/attr/comm_delete_attr.c
index 1c93453..683960e 100644
--- a/src/mpi/attr/comm_delete_attr.c
+++ b/src/mpi/attr/comm_delete_attr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_delete_attr MPI_Comm_delete_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_delete_attr as PMPI_Comm_delete_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_delete_attr(MPI_Comm comm, int comm_keyval) __attribute__((weak,alias("PMPI_Comm_delete_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/comm_free_keyval.c b/src/mpi/attr/comm_free_keyval.c
index 6044d37..6536f76 100644
--- a/src/mpi/attr/comm_free_keyval.c
+++ b/src/mpi/attr/comm_free_keyval.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_free_keyval MPI_Comm_free_keyval
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_free_keyval as PMPI_Comm_free_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_free_keyval(int *comm_keyval) __attribute__((weak,alias("PMPI_Comm_free_keyval")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/comm_get_attr.c b/src/mpi/attr/comm_get_attr.c
index e998200..0cc2c56 100644
--- a/src/mpi/attr/comm_get_attr.c
+++ b/src/mpi/attr/comm_get_attr.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_get_attr MPI_Comm_get_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_get_attr as PMPI_Comm_get_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_attr(MPI_Comm comm, int comm_keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Comm_get_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/comm_set_attr.c b/src/mpi/attr/comm_set_attr.c
index 161154f..71b4e6b 100644
--- a/src/mpi/attr/comm_set_attr.c
+++ b/src/mpi/attr/comm_set_attr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_set_attr MPI_Comm_set_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_set_attr as PMPI_Comm_set_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Comm_set_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/keyval_create.c b/src/mpi/attr/keyval_create.c
index a65fc1a..27a194d 100644
--- a/src/mpi/attr/keyval_create.c
+++ b/src/mpi/attr/keyval_create.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Keyval_create MPI_Keyval_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Keyval_create as PMPI_Keyval_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Keyval_create(MPI_Copy_function *copy_fn, MPI_Delete_function *delete_fn,
+ int *keyval, void *extra_state) __attribute__((weak,alias("PMPI_Keyval_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/keyval_free.c b/src/mpi/attr/keyval_free.c
index fa700fe..e107af8 100644
--- a/src/mpi/attr/keyval_free.c
+++ b/src/mpi/attr/keyval_free.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Keyval_free MPI_Keyval_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Keyval_free as PMPI_Keyval_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Keyval_free(int *keyval) __attribute__((weak,alias("PMPI_Keyval_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/type_create_keyval.c b/src/mpi/attr/type_create_keyval.c
index dd54e8f..1084696 100644
--- a/src/mpi/attr/type_create_keyval.c
+++ b/src/mpi/attr/type_create_keyval.c
@@ -24,6 +24,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_keyval MPI_Type_create_keyval
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_keyval as PMPI_Type_create_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_keyval(MPI_Type_copy_attr_function *type_copy_attr_fn,
+ MPI_Type_delete_attr_function *type_delete_attr_fn,
+ int *type_keyval, void *extra_state) __attribute__((weak,alias("PMPI_Type_create_keyval")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/type_delete_attr.c b/src/mpi/attr/type_delete_attr.c
index 9f89d6a..0f77e00 100644
--- a/src/mpi/attr/type_delete_attr.c
+++ b/src/mpi/attr/type_delete_attr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_delete_attr MPI_Type_delete_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_delete_attr as PMPI_Type_delete_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_delete_attr(MPI_Datatype datatype, int type_keyval) __attribute__((weak,alias("PMPI_Type_delete_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/type_free_keyval.c b/src/mpi/attr/type_free_keyval.c
index 160cd83..c52dc3b 100644
--- a/src/mpi/attr/type_free_keyval.c
+++ b/src/mpi/attr/type_free_keyval.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_free_keyval MPI_Type_free_keyval
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_free_keyval as PMPI_Type_free_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_free_keyval(int *type_keyval) __attribute__((weak,alias("PMPI_Type_free_keyval")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/type_get_attr.c b/src/mpi/attr/type_get_attr.c
index 3d6a44f..6190d90 100644
--- a/src/mpi/attr/type_get_attr.c
+++ b/src/mpi/attr/type_get_attr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_attr MPI_Type_get_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_attr as PMPI_Type_get_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Type_get_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/type_set_attr.c b/src/mpi/attr/type_set_attr.c
index 2623a00..c1a8f1a 100644
--- a/src/mpi/attr/type_set_attr.c
+++ b/src/mpi/attr/type_set_attr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_set_attr MPI_Type_set_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_set_attr as PMPI_Type_set_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_set_attr(MPI_Datatype datatype, int type_keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Type_set_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/win_create_keyval.c b/src/mpi/attr/win_create_keyval.c
index 7b5e6ab..b632701 100644
--- a/src/mpi/attr/win_create_keyval.c
+++ b/src/mpi/attr/win_create_keyval.c
@@ -24,6 +24,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_create_keyval MPI_Win_create_keyval
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_create_keyval as PMPI_Win_create_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create_keyval(MPI_Win_copy_attr_function *win_copy_attr_fn,
+ MPI_Win_delete_attr_function *win_delete_attr_fn, int *win_keyval,
+ void *extra_state) __attribute__((weak,alias("PMPI_Win_create_keyval")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/win_delete_attr.c b/src/mpi/attr/win_delete_attr.c
index 0165fda..199aa3f 100644
--- a/src/mpi/attr/win_delete_attr.c
+++ b/src/mpi/attr/win_delete_attr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_delete_attr MPI_Win_delete_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_delete_attr as PMPI_Win_delete_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_delete_attr(MPI_Win win, int win_keyval) __attribute__((weak,alias("PMPI_Win_delete_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/win_free_keyval.c b/src/mpi/attr/win_free_keyval.c
index 2b8479e..5c58caa 100644
--- a/src/mpi/attr/win_free_keyval.c
+++ b/src/mpi/attr/win_free_keyval.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_free_keyval MPI_Win_free_keyval
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_free_keyval as PMPI_Win_free_keyval
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_free_keyval(int *win_keyval) __attribute__((weak,alias("PMPI_Win_free_keyval")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/win_get_attr.c b/src/mpi/attr/win_get_attr.c
index ddb253e..b766058 100644
--- a/src/mpi/attr/win_get_attr.c
+++ b/src/mpi/attr/win_get_attr.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_get_attr MPI_Win_get_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_get_attr as PMPI_Win_get_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_attr(MPI_Win win, int win_keyval, void *attribute_val, int *flag) __attribute__((weak,alias("PMPI_Win_get_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/attr/win_set_attr.c b/src/mpi/attr/win_set_attr.c
index 8800e49..a211331 100644
--- a/src/mpi/attr/win_set_attr.c
+++ b/src/mpi/attr/win_set_attr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_set_attr MPI_Win_set_attr
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_set_attr as PMPI_Win_set_attr
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_attr(MPI_Win win, int win_keyval, void *attribute_val) __attribute__((weak,alias("PMPI_Win_set_attr")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/allgather.c b/src/mpi/coll/allgather.c
index 803ed85..216e601 100644
--- a/src/mpi/coll/allgather.c
+++ b/src/mpi/coll/allgather.c
@@ -45,6 +45,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Allgather MPI_Allgather
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Allgather as PMPI_Allgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Allgather")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/allgatherv.c b/src/mpi/coll/allgatherv.c
index 82320a3..fe12f92 100644
--- a/src/mpi/coll/allgatherv.c
+++ b/src/mpi/coll/allgatherv.c
@@ -32,6 +32,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Allgatherv MPI_Allgatherv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Allgatherv as PMPI_Allgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs, MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Allgatherv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/allreduce.c b/src/mpi/coll/allreduce.c
index 4087df6..bc55aaf 100644
--- a/src/mpi/coll/allreduce.c
+++ b/src/mpi/coll/allreduce.c
@@ -63,6 +63,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Allreduce MPI_Allreduce
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Allreduce as PMPI_Allreduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Allreduce")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/alltoall.c b/src/mpi/coll/alltoall.c
index 28143cb..3c6ed8b 100644
--- a/src/mpi/coll/alltoall.c
+++ b/src/mpi/coll/alltoall.c
@@ -62,6 +62,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Alltoall MPI_Alltoall
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Alltoall as PMPI_Alltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Alltoall")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/alltoallv.c b/src/mpi/coll/alltoallv.c
index 665c580..edfe401 100644
--- a/src/mpi/coll/alltoallv.c
+++ b/src/mpi/coll/alltoallv.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Alltoallv MPI_Alltoallv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Alltoallv as PMPI_Alltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alltoallv(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Alltoallv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/alltoallw.c b/src/mpi/coll/alltoallw.c
index af6ac78..11758bb 100644
--- a/src/mpi/coll/alltoallw.c
+++ b/src/mpi/coll/alltoallw.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Alltoallw MPI_Alltoallw
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Alltoallw as PMPI_Alltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) __attribute__((weak,alias("PMPI_Alltoallw")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/barrier.c b/src/mpi/coll/barrier.c
index 2583a75..0e1ff06 100644
--- a/src/mpi/coll/barrier.c
+++ b/src/mpi/coll/barrier.c
@@ -30,6 +30,8 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Barrier MPI_Barrier
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Barrier as PMPI_Barrier
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Barrier(MPI_Comm comm) __attribute__((weak,alias("PMPI_Barrier")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/bcast.c b/src/mpi/coll/bcast.c
index 59e0396..38f3757 100644
--- a/src/mpi/coll/bcast.c
+++ b/src/mpi/coll/bcast.c
@@ -103,6 +103,9 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Bcast MPI_Bcast
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Bcast as PMPI_Bcast
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Bcast")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/exscan.c b/src/mpi/coll/exscan.c
index 6d143e4..573770f 100644
--- a/src/mpi/coll/exscan.c
+++ b/src/mpi/coll/exscan.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Exscan MPI_Exscan
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Exscan as PMPI_Exscan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Exscan")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/gather.c b/src/mpi/coll/gather.c
index 533c85b..d31af10 100644
--- a/src/mpi/coll/gather.c
+++ b/src/mpi/coll/gather.c
@@ -45,6 +45,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Gather MPI_Gather
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Gather as PMPI_Gather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Gather")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/gatherv.c b/src/mpi/coll/gatherv.c
index 7934d04..7134af3 100644
--- a/src/mpi/coll/gatherv.c
+++ b/src/mpi/coll/gatherv.c
@@ -34,6 +34,11 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Gatherv MPI_Gatherv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Gatherv as PMPI_Gatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
+ MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Gatherv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index 29b8cc1..38c9b32 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Iallgather MPI_Iallgather
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iallgather as PMPI_Iallgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Iallgather")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/iallgatherv.c b/src/mpi/coll/iallgatherv.c
index ce3e827..8fd90a2 100644
--- a/src/mpi/coll/iallgatherv.c
+++ b/src/mpi/coll/iallgatherv.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Iallgatherv MPI_Iallgatherv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iallgatherv as PMPI_Iallgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[], MPI_Datatype recvtype,
+ MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Iallgatherv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 0acee0f..4edfeda 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Iallreduce MPI_Iallreduce
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iallreduce as PMPI_Iallreduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Iallreduce")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index 129c521..f83e716 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Ialltoall MPI_Ialltoall
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ialltoall as PMPI_Ialltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ialltoall")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ialltoallv.c b/src/mpi/coll/ialltoallv.c
index e6bab8b..595fd79 100644
--- a/src/mpi/coll/ialltoallv.c
+++ b/src/mpi/coll/ialltoallv.c
@@ -13,6 +13,12 @@
#pragma _HP_SECONDARY_DEF PMPI_Ialltoallv MPI_Ialltoallv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ialltoallv as PMPI_Ialltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ialltoallv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ialltoallw.c b/src/mpi/coll/ialltoallw.c
index e0e3675..a6727a2 100644
--- a/src/mpi/coll/ialltoallw.c
+++ b/src/mpi/coll/ialltoallw.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Ialltoallw MPI_Ialltoallw
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ialltoallw as PMPI_Ialltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ialltoallw(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+ const int rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm,
+ MPI_Request *request) __attribute__((weak,alias("PMPI_Ialltoallw")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ibarrier.c b/src/mpi/coll/ibarrier.c
index ac16943..7b558c7 100644
--- a/src/mpi/coll/ibarrier.c
+++ b/src/mpi/coll/ibarrier.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Ibarrier MPI_Ibarrier
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ibarrier as PMPI_Ibarrier
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ibarrier")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index d23792c..557dc20 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Ibcast MPI_Ibcast
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ibcast as PMPI_Ibcast
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm,
+ MPI_Request *request) __attribute__((weak,alias("PMPI_Ibcast")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index 6f9eab0..a1f706e 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Iexscan MPI_Iexscan
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iexscan as PMPI_Iexscan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Iexscan")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index 8a5c9ee..cc52f90 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Igather MPI_Igather
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Igather as PMPI_Igather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Igather")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/igatherv.c b/src/mpi/coll/igatherv.c
index 88ac3b2..1c492b4 100644
--- a/src/mpi/coll/igatherv.c
+++ b/src/mpi/coll/igatherv.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Igatherv MPI_Igatherv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Igatherv as PMPI_Igatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,
+ MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Igatherv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index d805195..bc74aac 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Ireduce_scatter MPI_Ireduce_scatter
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ireduce_scatter as PMPI_Ireduce_scatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
+ MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ireduce_scatter")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index e75fc36..04fa432 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Ireduce_scatter_block MPI_Ireduce_scatter_block
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ireduce_scatter_block as PMPI_Ireduce_scatter_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPI_Comm comm,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ireduce_scatter_block")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index 94180c1..c9b0308 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Ireduce MPI_Ireduce
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ireduce as PMPI_Ireduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ireduce")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index 2c8f82c..9cbea55 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Iscan MPI_Iscan
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iscan as PMPI_Iscan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Iscan")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/iscatter.c b/src/mpi/coll/iscatter.c
index 32ff029..8c51ed4 100644
--- a/src/mpi/coll/iscatter.c
+++ b/src/mpi/coll/iscatter.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Iscatter MPI_Iscatter
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iscatter as PMPI_Iscatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Iscatter")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/iscatterv.c b/src/mpi/coll/iscatterv.c
index 71c01a2..eca8081 100644
--- a/src/mpi/coll/iscatterv.c
+++ b/src/mpi/coll/iscatterv.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Iscatterv MPI_Iscatterv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iscatterv as PMPI_Iscatterv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[],
+ MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Iscatterv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/op_commutative.c b/src/mpi/coll/op_commutative.c
index 334a7b2..990fe59 100644
--- a/src/mpi/coll/op_commutative.c
+++ b/src/mpi/coll/op_commutative.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Op_commutative MPI_Op_commutative
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Op_commutative as PMPI_Op_commutative
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Op_commutative(MPI_Op op, int *commute) __attribute__((weak,alias("PMPI_Op_commutative")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/op_create.c b/src/mpi/coll/op_create.c
index 3afeeaa..48e99b8 100644
--- a/src/mpi/coll/op_create.c
+++ b/src/mpi/coll/op_create.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Op_create MPI_Op_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Op_create as PMPI_Op_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Op_create(MPI_User_function *user_fn, int commute, MPI_Op *op) __attribute__((weak,alias("PMPI_Op_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/op_free.c b/src/mpi/coll/op_free.c
index cc5de24..e929185 100644
--- a/src/mpi/coll/op_free.c
+++ b/src/mpi/coll/op_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Op_free MPI_Op_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Op_free as PMPI_Op_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Op_free(MPI_Op *op) __attribute__((weak,alias("PMPI_Op_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/red_scat.c b/src/mpi/coll/red_scat.c
index ba58240..ebf63e8 100644
--- a/src/mpi/coll/red_scat.c
+++ b/src/mpi/coll/red_scat.c
@@ -33,6 +33,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Reduce_scatter MPI_Reduce_scatter
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Reduce_scatter as PMPI_Reduce_scatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[],
+ MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Reduce_scatter")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/red_scat_block.c b/src/mpi/coll/red_scat_block.c
index b3a8757..2cd929e 100644
--- a/src/mpi/coll/red_scat_block.c
+++ b/src/mpi/coll/red_scat_block.c
@@ -21,6 +21,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Reduce_scatter_block MPI_Reduce_scatter_block
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Reduce_scatter_block as PMPI_Reduce_scatter_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Reduce_scatter_block")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/reduce.c b/src/mpi/coll/reduce.c
index c85fa53..41acffc 100644
--- a/src/mpi/coll/reduce.c
+++ b/src/mpi/coll/reduce.c
@@ -55,6 +55,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Reduce MPI_Reduce
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Reduce as PMPI_Reduce
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Reduce")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/reduce_local.c b/src/mpi/coll/reduce_local.c
index 113b47f..52b11b9 100644
--- a/src/mpi/coll/reduce_local.c
+++ b/src/mpi/coll/reduce_local.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Reduce_local MPI_Reduce_local
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Reduce_local as PMPI_Reduce_local
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Reduce_local(const void *inbuf, void *inoutbuf, int count, MPI_Datatype datatype,
+ MPI_Op op)
+ __attribute__((weak,alias("PMPI_Reduce_local")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/scan.c b/src/mpi/coll/scan.c
index da6cda3..8a6557b 100644
--- a/src/mpi/coll/scan.c
+++ b/src/mpi/coll/scan.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Scan MPI_Scan
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Scan as PMPI_Scan
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Scan")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/scatter.c b/src/mpi/coll/scatter.c
index b7278a0..f3029ad 100644
--- a/src/mpi/coll/scatter.c
+++ b/src/mpi/coll/scatter.c
@@ -32,6 +32,10 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Scatter MPI_Scatter
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Scatter as PMPI_Scatter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Scatter")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/coll/scatterv.c b/src/mpi/coll/scatterv.c
index 1a23ec1..ce4b29e 100644
--- a/src/mpi/coll/scatterv.c
+++ b/src/mpi/coll/scatterv.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Scatterv MPI_Scatterv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Scatterv as PMPI_Scatterv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Scatterv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_compare.c b/src/mpi/comm/comm_compare.c
index 50d6cb2..37d5a5d 100644
--- a/src/mpi/comm/comm_compare.c
+++ b/src/mpi/comm/comm_compare.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_compare MPI_Comm_compare
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_compare as PMPI_Comm_compare
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result) __attribute__((weak,alias("PMPI_Comm_compare")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_create.c b/src/mpi/comm/comm_create.c
index 375f5a3..4bb63bb 100644
--- a/src/mpi/comm/comm_create.c
+++ b/src/mpi/comm/comm_create.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_create MPI_Comm_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_create as PMPI_Comm_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_create_group.c b/src/mpi/comm/comm_create_group.c
index ab946c9..2ce1419 100644
--- a/src/mpi/comm/comm_create_group.c
+++ b/src/mpi/comm/comm_create_group.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_create_group MPI_Comm_create_group
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_create_group as PMPI_Comm_create_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create_group(MPI_Comm comm, MPI_Group group, int tag, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_create_group")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_dup.c b/src/mpi/comm/comm_dup.c
index 00932de..aadba80 100644
--- a/src/mpi/comm/comm_dup.c
+++ b/src/mpi/comm/comm_dup.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_dup MPI_Comm_dup
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_dup as PMPI_Comm_dup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_dup")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_dup_with_info.c b/src/mpi/comm/comm_dup_with_info.c
index c3bfdb0..476a9fa 100644
--- a/src/mpi/comm/comm_dup_with_info.c
+++ b/src/mpi/comm/comm_dup_with_info.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_dup_with_info MPI_Comm_dup_with_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_dup_with_info as PMPI_Comm_dup_with_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_dup_with_info(MPI_Comm comm, MPI_Info info, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_dup_with_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_free.c b/src/mpi/comm/comm_free.c
index 6387b55..7e4eb9e 100644
--- a/src/mpi/comm/comm_free.c
+++ b/src/mpi/comm/comm_free.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_free MPI_Comm_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_free as PMPI_Comm_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_free(MPI_Comm *comm) __attribute__((weak,alias("PMPI_Comm_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_get_info.c b/src/mpi/comm/comm_get_info.c
index c01a6f6..f3bc876 100644
--- a/src/mpi/comm/comm_get_info.c
+++ b/src/mpi/comm/comm_get_info.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_get_info MPI_Comm_get_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_get_info as PMPI_Comm_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_info(MPI_Comm comm, MPI_Info *info) __attribute__((weak,alias("PMPI_Comm_get_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_get_name.c b/src/mpi/comm/comm_get_name.c
index d797f20..574f1dd 100644
--- a/src/mpi/comm/comm_get_name.c
+++ b/src/mpi/comm/comm_get_name.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_get_name MPI_Comm_get_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_get_name as PMPI_Comm_get_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_name(MPI_Comm comm, char *comm_name, int *resultlen) __attribute__((weak,alias("PMPI_Comm_get_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_group.c b/src/mpi/comm/comm_group.c
index 01d97b0..ba758e5 100644
--- a/src/mpi/comm/comm_group.c
+++ b/src/mpi/comm/comm_group.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_group MPI_Comm_group
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_group as PMPI_Comm_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) __attribute__((weak,alias("PMPI_Comm_group")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_group_failed.c b/src/mpi/comm/comm_group_failed.c
index 25017b9..a5c3b72 100644
--- a/src/mpi/comm/comm_group_failed.c
+++ b/src/mpi/comm/comm_group_failed.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPIX_Comm_group_failed MPIX_Comm_group_failed
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPIX_Comm_group_failed as PMPIX_Comm_group_failed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPIX_Comm_group_failed(MPI_Comm comm, MPI_Group *failed_group) __attribute__((weak,alias("PMPIX_Comm_group_failed")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_idup.c b/src/mpi/comm/comm_idup.c
index bcac396..5ceecc1 100644
--- a/src/mpi/comm/comm_idup.c
+++ b/src/mpi/comm/comm_idup.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_idup MPI_Comm_idup
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_idup as PMPI_Comm_idup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_idup(MPI_Comm comm, MPI_Comm *newcomm, MPI_Request *request) __attribute__((weak,alias("PMPI_Comm_idup")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_rank.c b/src/mpi/comm/comm_rank.c
index a5e03d9..4694319 100644
--- a/src/mpi/comm/comm_rank.c
+++ b/src/mpi/comm/comm_rank.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_rank MPI_Comm_rank
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_rank as PMPI_Comm_rank
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_rank(MPI_Comm comm, int *rank) __attribute__((weak,alias("PMPI_Comm_rank")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_reenable_anysource.c b/src/mpi/comm/comm_reenable_anysource.c
index 30e4cd5..05cf847 100644
--- a/src/mpi/comm/comm_reenable_anysource.c
+++ b/src/mpi/comm/comm_reenable_anysource.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPIX_Comm_reenable_anysource MPIX_Comm_reenable_anysource
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPIX_Comm_reenable_anysource as PMPIX_Comm_reenable_anysource
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPIX_Comm_reenable_anysource(MPI_Comm comm, MPI_Group *failed_group) __attribute__((weak,alias("PMPIX_Comm_reenable_anysource")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_remote_group.c b/src/mpi/comm/comm_remote_group.c
index 4c2edd1..1a97702 100644
--- a/src/mpi/comm/comm_remote_group.c
+++ b/src/mpi/comm/comm_remote_group.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_remote_group MPI_Comm_remote_group
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_remote_group as PMPI_Comm_remote_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_remote_group(MPI_Comm comm, MPI_Group *group) __attribute__((weak,alias("PMPI_Comm_remote_group")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_remote_group_failed.c b/src/mpi/comm/comm_remote_group_failed.c
index a7616fb..30635e6 100644
--- a/src/mpi/comm/comm_remote_group_failed.c
+++ b/src/mpi/comm/comm_remote_group_failed.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPIX_Comm_remote_group_failed MPIX_Comm_remote_group_failed
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPIX_Comm_remote_group_failed as PMPIX_Comm_remote_group_failed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPIX_Comm_remote_group_failed(MPI_Comm comm, MPI_Group *failed_group) __attribute__((weak,alias("PMPIX_Comm_remote_group_failed")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_remote_size.c b/src/mpi/comm/comm_remote_size.c
index ebe9361..72e73e4 100644
--- a/src/mpi/comm/comm_remote_size.c
+++ b/src/mpi/comm/comm_remote_size.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_remote_size MPI_Comm_remote_size
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_remote_size as PMPI_Comm_remote_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_remote_size(MPI_Comm comm, int *size) __attribute__((weak,alias("PMPI_Comm_remote_size")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_set_info.c b/src/mpi/comm/comm_set_info.c
index 18df251..2bf3c8f 100644
--- a/src/mpi/comm/comm_set_info.c
+++ b/src/mpi/comm/comm_set_info.c
@@ -16,6 +16,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_set_info MPI_Comm_set_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_set_info as PMPI_Comm_set_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_info(MPI_Comm comm, MPI_Info info) __attribute__((weak,alias("PMPI_Comm_set_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_set_name.c b/src/mpi/comm/comm_set_name.c
index 58bc286..75aa49a 100644
--- a/src/mpi/comm/comm_set_name.c
+++ b/src/mpi/comm/comm_set_name.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_set_name MPI_Comm_set_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_set_name as PMPI_Comm_set_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_name(MPI_Comm comm, const char *comm_name) __attribute__((weak,alias("PMPI_Comm_set_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_size.c b/src/mpi/comm/comm_size.c
index c7ebe7d..7fc6276 100644
--- a/src/mpi/comm/comm_size.c
+++ b/src/mpi/comm/comm_size.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_size MPI_Comm_size
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_size as PMPI_Comm_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_size(MPI_Comm comm, int *size) __attribute__((weak,alias("PMPI_Comm_size")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_split.c b/src/mpi/comm/comm_split.c
index 83658bb..02a8276 100644
--- a/src/mpi/comm/comm_split.c
+++ b/src/mpi/comm/comm_split.c
@@ -36,6 +36,8 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Comm_split MPI_Comm_split
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_split as PMPI_Comm_split
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_split")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_split_type.c b/src/mpi/comm/comm_split_type.c
index 928b698..5e5d685 100644
--- a/src/mpi/comm/comm_split_type.c
+++ b/src/mpi/comm/comm_split_type.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_split_type MPI_Comm_split_type
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_split_type as PMPI_Comm_split_type
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key, MPI_Info info, MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_split_type")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/comm_test_inter.c b/src/mpi/comm/comm_test_inter.c
index 152e3be..4297c2c 100644
--- a/src/mpi/comm/comm_test_inter.c
+++ b/src/mpi/comm/comm_test_inter.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_test_inter MPI_Comm_test_inter
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_test_inter as PMPI_Comm_test_inter
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_test_inter(MPI_Comm comm, int *flag) __attribute__((weak,alias("PMPI_Comm_test_inter")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/intercomm_create.c b/src/mpi/comm/intercomm_create.c
index 04a4ab3..d38d61a 100644
--- a/src/mpi/comm/intercomm_create.c
+++ b/src/mpi/comm/intercomm_create.c
@@ -17,6 +17,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Intercomm_create MPI_Intercomm_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Intercomm_create as PMPI_Intercomm_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm,
+ int remote_leader, int tag, MPI_Comm *newintercomm) __attribute__((weak,alias("PMPI_Intercomm_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/comm/intercomm_merge.c b/src/mpi/comm/intercomm_merge.c
index 5c7b8ce..10b662a 100644
--- a/src/mpi/comm/intercomm_merge.c
+++ b/src/mpi/comm/intercomm_merge.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Intercomm_merge MPI_Intercomm_merge
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Intercomm_merge as PMPI_Intercomm_merge
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) __attribute__((weak,alias("PMPI_Intercomm_merge")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/address.c b/src/mpi/datatype/address.c
index 9dc8a01..866aef2 100644
--- a/src/mpi/datatype/address.c
+++ b/src/mpi/datatype/address.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Address MPI_Address
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Address as PMPI_Address
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Address(const void *location, MPI_Aint *address) __attribute__((weak,alias("PMPI_Address")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/get_address.c b/src/mpi/datatype/get_address.c
index ea436ca..a53980c 100644
--- a/src/mpi/datatype/get_address.c
+++ b/src/mpi/datatype/get_address.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_address MPI_Get_address
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_address as PMPI_Get_address
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_address(const void *location, MPI_Aint *address) __attribute__((weak,alias("PMPI_Get_address")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/get_count.c b/src/mpi/datatype/get_count.c
index 130f7ac..258fb86 100644
--- a/src/mpi/datatype/get_count.c
+++ b/src/mpi/datatype/get_count.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_count MPI_Get_count
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_count as PMPI_Get_count
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_count(const MPI_Status *status, MPI_Datatype datatype, int *count) __attribute__((weak,alias("PMPI_Get_count")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/get_elements.c b/src/mpi/datatype/get_elements.c
index e02b5b3..1dcd949 100644
--- a/src/mpi/datatype/get_elements.c
+++ b/src/mpi/datatype/get_elements.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_elements MPI_Get_elements
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_elements as PMPI_Get_elements
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_elements(const MPI_Status *status, MPI_Datatype datatype, int *count) __attribute__((weak,alias("PMPI_Get_elements")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/get_elements_x.c b/src/mpi/datatype/get_elements_x.c
index b15b7c2..092c1af 100644
--- a/src/mpi/datatype/get_elements_x.c
+++ b/src/mpi/datatype/get_elements_x.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_elements_x MPI_Get_elements_x
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_elements_x as PMPI_Get_elements_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_elements_x(const MPI_Status *status, MPI_Datatype datatype, MPI_Count *count) __attribute__((weak,alias("PMPI_Get_elements_x")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/pack.c b/src/mpi/datatype/pack.c
index fb5456c..21e00f7 100644
--- a/src/mpi/datatype/pack.c
+++ b/src/mpi/datatype/pack.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Pack MPI_Pack
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Pack as PMPI_Pack
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack(const void *inbuf, int incount, MPI_Datatype datatype, void *outbuf,
+ int outsize, int *position, MPI_Comm comm) __attribute__((weak,alias("PMPI_Pack")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/pack_external.c b/src/mpi/datatype/pack_external.c
index 081f224..7cb36a4 100644
--- a/src/mpi/datatype/pack_external.c
+++ b/src/mpi/datatype/pack_external.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Pack_external MPI_Pack_external
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Pack_external as PMPI_Pack_external
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack_external(const char datarep[], const void *inbuf, int incount,
+ MPI_Datatype datatype, void *outbuf, MPI_Aint outsize, MPI_Aint *position)
+ __attribute__((weak,alias("PMPI_Pack_external")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/pack_external_size.c b/src/mpi/datatype/pack_external_size.c
index cb0f797..7f5284d 100644
--- a/src/mpi/datatype/pack_external_size.c
+++ b/src/mpi/datatype/pack_external_size.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Pack_external_size MPI_Pack_external_size
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Pack_external_size as PMPI_Pack_external_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack_external_size(const char datarep[], int incount, MPI_Datatype datatype,
+ MPI_Aint *size) __attribute__((weak,alias("PMPI_Pack_external_size")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/pack_size.c b/src/mpi/datatype/pack_size.c
index a705c9e..aa48a5b 100644
--- a/src/mpi/datatype/pack_size.c
+++ b/src/mpi/datatype/pack_size.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Pack_size MPI_Pack_size
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Pack_size as PMPI_Pack_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size) __attribute__((weak,alias("PMPI_Pack_size")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/status_set_elements.c b/src/mpi/datatype/status_set_elements.c
index ec60b65..cf8798c 100644
--- a/src/mpi/datatype/status_set_elements.c
+++ b/src/mpi/datatype/status_set_elements.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Status_set_elements MPI_Status_set_elements
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Status_set_elements as PMPI_Status_set_elements
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Status_set_elements(MPI_Status *status, MPI_Datatype datatype, int count) __attribute__((weak,alias("PMPI_Status_set_elements")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/status_set_elements_x.c b/src/mpi/datatype/status_set_elements_x.c
index e2acee9..ce5a19c 100644
--- a/src/mpi/datatype/status_set_elements_x.c
+++ b/src/mpi/datatype/status_set_elements_x.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Status_set_elements_x MPI_Status_set_elements_x
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Status_set_elements_x as PMPI_Status_set_elements_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Status_set_elements_x(MPI_Status *status, MPI_Datatype datatype, MPI_Count count) __attribute__((weak,alias("PMPI_Status_set_elements_x")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_commit.c b/src/mpi/datatype/type_commit.c
index 90d7284..8ed3fcb 100644
--- a/src/mpi/datatype/type_commit.c
+++ b/src/mpi/datatype/type_commit.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_commit MPI_Type_commit
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_commit as PMPI_Type_commit
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_commit(MPI_Datatype *datatype) __attribute__((weak,alias("PMPI_Type_commit")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_contiguous.c b/src/mpi/datatype/type_contiguous.c
index 343d307..91e6f00 100644
--- a/src/mpi/datatype/type_contiguous.c
+++ b/src/mpi/datatype/type_contiguous.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_contiguous MPI_Type_contiguous
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_contiguous as PMPI_Type_contiguous
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_contiguous(int count, MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_contiguous")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_darray.c b/src/mpi/datatype/type_create_darray.c
index bcb70c2..0047f38 100644
--- a/src/mpi/datatype/type_create_darray.c
+++ b/src/mpi/datatype/type_create_darray.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_darray MPI_Type_create_darray
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_darray as PMPI_Type_create_darray
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsizes[],
+ const int array_of_distribs[], const int array_of_dargs[],
+ const int array_of_psizes[], int order, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_darray")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_hindexed.c b/src/mpi/datatype/type_create_hindexed.c
index 906af0b..b65dffc 100644
--- a/src/mpi/datatype/type_create_hindexed.c
+++ b/src/mpi/datatype/type_create_hindexed.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_hindexed MPI_Type_create_hindexed
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_hindexed as PMPI_Type_create_hindexed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_hindexed(int count, const int array_of_blocklengths[],
+ const MPI_Aint array_of_displacements[], MPI_Datatype oldtype,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_hindexed")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_hindexed_block.c b/src/mpi/datatype/type_create_hindexed_block.c
index 49ba529..3164e4d 100644
--- a/src/mpi/datatype/type_create_hindexed_block.c
+++ b/src/mpi/datatype/type_create_hindexed_block.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_hindexed_block MPI_Type_create_hindexed_block
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_hindexed_block as PMPI_Type_create_hindexed_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_hindexed_block(int count, int blocklength,
+ const MPI_Aint array_of_displacements[],
+ MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_hindexed_block")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_hvector.c b/src/mpi/datatype/type_create_hvector.c
index d1adba8..d1b1cfb 100644
--- a/src/mpi/datatype/type_create_hvector.c
+++ b/src/mpi/datatype/type_create_hvector.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_hvector MPI_Type_create_hvector
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_hvector as PMPI_Type_create_hvector
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_hvector")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_indexed_block.c b/src/mpi/datatype/type_create_indexed_block.c
index 81d0220..0107d0f 100644
--- a/src/mpi/datatype/type_create_indexed_block.c
+++ b/src/mpi/datatype/type_create_indexed_block.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_indexed_block MPI_Type_create_indexed_block
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_indexed_block as PMPI_Type_create_indexed_block
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_indexed_block(int count, int blocklength, const int array_of_displacements[],
+ MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_indexed_block")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_resized.c b/src/mpi/datatype/type_create_resized.c
index 493948f..b6049b2 100644
--- a/src/mpi/datatype/type_create_resized.c
+++ b/src/mpi/datatype/type_create_resized.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_resized MPI_Type_create_resized
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_resized as PMPI_Type_create_resized
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_resized(MPI_Datatype oldtype, MPI_Aint lb, MPI_Aint extent,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_resized")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_struct.c b/src/mpi/datatype/type_create_struct.c
index ee5aa66..13e1bb0 100644
--- a/src/mpi/datatype/type_create_struct.c
+++ b/src/mpi/datatype/type_create_struct.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_struct MPI_Type_create_struct
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_struct as PMPI_Type_create_struct
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_struct(int count, const int array_of_blocklengths[],
+ const MPI_Aint array_of_displacements[],
+ const MPI_Datatype array_of_types[], MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_struct")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_create_subarray.c b/src/mpi/datatype/type_create_subarray.c
index 4a61b66..0089f37 100644
--- a/src/mpi/datatype/type_create_subarray.c
+++ b/src/mpi/datatype/type_create_subarray.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_create_subarray MPI_Type_create_subarray
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_create_subarray as PMPI_Type_create_subarray
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_create_subarray(int ndims, const int array_of_sizes[],
+ const int array_of_subsizes[], const int array_of_starts[],
+ int order, MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_create_subarray")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_dup.c b/src/mpi/datatype/type_dup.c
index c9fbb38..f8626a1 100644
--- a/src/mpi/datatype/type_dup.c
+++ b/src/mpi/datatype/type_dup.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_dup MPI_Type_dup
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_dup as PMPI_Type_dup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_dup(MPI_Datatype oldtype, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_dup")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_extent.c b/src/mpi/datatype/type_extent.c
index 1ef9eb7..82caf09 100644
--- a/src/mpi/datatype/type_extent.c
+++ b/src/mpi/datatype/type_extent.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_extent MPI_Type_extent
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_extent as PMPI_Type_extent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent) __attribute__((weak,alias("PMPI_Type_extent")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_free.c b/src/mpi/datatype/type_free.c
index b8d8170..cb1c5f1 100644
--- a/src/mpi/datatype/type_free.c
+++ b/src/mpi/datatype/type_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_free MPI_Type_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_free as PMPI_Type_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_free(MPI_Datatype *datatype) __attribute__((weak,alias("PMPI_Type_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_get_contents.c b/src/mpi/datatype/type_get_contents.c
index 279f416..c4b4230 100644
--- a/src/mpi/datatype/type_get_contents.c
+++ b/src/mpi/datatype/type_get_contents.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_contents MPI_Type_get_contents
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_contents as PMPI_Type_get_contents
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_contents(MPI_Datatype datatype, int max_integers, int max_addresses,
+ int max_datatypes, int array_of_integers[],
+ MPI_Aint array_of_addresses[], MPI_Datatype array_of_datatypes[]) __attribute__((weak,alias("PMPI_Type_get_contents")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_get_envelope.c b/src/mpi/datatype/type_get_envelope.c
index 1c94153..486953d 100644
--- a/src/mpi/datatype/type_get_envelope.c
+++ b/src/mpi/datatype/type_get_envelope.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_envelope MPI_Type_get_envelope
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_envelope as PMPI_Type_get_envelope
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_envelope(MPI_Datatype datatype, int *num_integers, int *num_addresses,
+ int *num_datatypes, int *combiner) __attribute__((weak,alias("PMPI_Type_get_envelope")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_get_extent.c b/src/mpi/datatype/type_get_extent.c
index c3d3bc6..d378df0 100644
--- a/src/mpi/datatype/type_get_extent.c
+++ b/src/mpi/datatype/type_get_extent.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_extent MPI_Type_get_extent
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_extent as PMPI_Type_get_extent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_extent(MPI_Datatype datatype, MPI_Aint *lb, MPI_Aint *extent) __attribute__((weak,alias("PMPI_Type_get_extent")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_get_extent_x.c b/src/mpi/datatype/type_get_extent_x.c
index b59a740..a3fc110 100644
--- a/src/mpi/datatype/type_get_extent_x.c
+++ b/src/mpi/datatype/type_get_extent_x.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_extent_x MPI_Type_get_extent_x
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_extent_x as PMPI_Type_get_extent_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) __attribute__((weak,alias("PMPI_Type_get_extent_x")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_get_name.c b/src/mpi/datatype/type_get_name.c
index e550dfb..90c0b80 100644
--- a/src/mpi/datatype/type_get_name.c
+++ b/src/mpi/datatype/type_get_name.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_name MPI_Type_get_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_name as PMPI_Type_get_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_name(MPI_Datatype datatype, char *type_name, int *resultlen) __attribute__((weak,alias("PMPI_Type_get_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_get_true_extent.c b/src/mpi/datatype/type_get_true_extent.c
index d0d0093..8cfcd57 100644
--- a/src/mpi/datatype/type_get_true_extent.c
+++ b/src/mpi/datatype/type_get_true_extent.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_true_extent MPI_Type_get_true_extent
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_true_extent as PMPI_Type_get_true_extent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_true_extent(MPI_Datatype datatype, MPI_Aint *true_lb, MPI_Aint *true_extent) __attribute__((weak,alias("PMPI_Type_get_true_extent")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_get_true_extent_x.c b/src/mpi/datatype/type_get_true_extent_x.c
index 48c7778..3c5653d 100644
--- a/src/mpi/datatype/type_get_true_extent_x.c
+++ b/src/mpi/datatype/type_get_true_extent_x.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_get_true_extent_x MPI_Type_get_true_extent_x
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_get_true_extent_x as PMPI_Type_get_true_extent_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_get_true_extent_x(MPI_Datatype datatype, MPI_Count *lb, MPI_Count *extent) __attribute__((weak,alias("PMPI_Type_get_true_extent_x")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_hindexed.c b/src/mpi/datatype/type_hindexed.c
index 6ec5474..f14a7cf 100644
--- a/src/mpi/datatype/type_hindexed.c
+++ b/src/mpi/datatype/type_hindexed.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_hindexed MPI_Type_hindexed
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_hindexed as PMPI_Type_hindexed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_hindexed(int count, const int *array_of_blocklengths,
+ const MPI_Aint *array_of_displacements, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_hindexed")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_hvector.c b/src/mpi/datatype/type_hvector.c
index bea38b8..30f5903 100644
--- a/src/mpi/datatype/type_hvector.c
+++ b/src/mpi/datatype/type_hvector.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_hvector MPI_Type_hvector
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_hvector as PMPI_Type_hvector
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_hvector(int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_hvector")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_indexed.c b/src/mpi/datatype/type_indexed.c
index c162ef7..b78cb04 100644
--- a/src/mpi/datatype/type_indexed.c
+++ b/src/mpi/datatype/type_indexed.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_indexed MPI_Type_indexed
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_indexed as PMPI_Type_indexed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_indexed(int count, const int *array_of_blocklengths,
+ const int *array_of_displacements, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_indexed")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_lb.c b/src/mpi/datatype/type_lb.c
index 09935b2..f357a81 100644
--- a/src/mpi/datatype/type_lb.c
+++ b/src/mpi/datatype/type_lb.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_lb MPI_Type_lb
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_lb as PMPI_Type_lb
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement) __attribute__((weak,alias("PMPI_Type_lb")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_match_size.c b/src/mpi/datatype/type_match_size.c
index 4a318e8..755673d 100644
--- a/src/mpi/datatype/type_match_size.c
+++ b/src/mpi/datatype/type_match_size.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_match_size MPI_Type_match_size
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_match_size as PMPI_Type_match_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_match_size(int typeclass, int size, MPI_Datatype *datatype) __attribute__((weak,alias("PMPI_Type_match_size")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_set_name.c b/src/mpi/datatype/type_set_name.c
index 2a7dcd0..e050bf3 100644
--- a/src/mpi/datatype/type_set_name.c
+++ b/src/mpi/datatype/type_set_name.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_set_name MPI_Type_set_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_set_name as PMPI_Type_set_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_set_name(MPI_Datatype datatype, const char *type_name) __attribute__((weak,alias("PMPI_Type_set_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_size.c b/src/mpi/datatype/type_size.c
index c1e57c5..2347e2f 100644
--- a/src/mpi/datatype/type_size.c
+++ b/src/mpi/datatype/type_size.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_size MPI_Type_size
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_size as PMPI_Type_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_size(MPI_Datatype datatype, int *size) __attribute__((weak,alias("PMPI_Type_size")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_size_x.c b/src/mpi/datatype/type_size_x.c
index 8efcb97..2f3fa90 100644
--- a/src/mpi/datatype/type_size_x.c
+++ b/src/mpi/datatype/type_size_x.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_size_x MPI_Type_size_x
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_size_x as PMPI_Type_size_x
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_size_x(MPI_Datatype datatype, MPI_Count *size) __attribute__((weak,alias("PMPI_Type_size_x")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_struct.c b/src/mpi/datatype/type_struct.c
index b40101a..6e7cedf 100644
--- a/src/mpi/datatype/type_struct.c
+++ b/src/mpi/datatype/type_struct.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_struct MPI_Type_struct
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_struct as PMPI_Type_struct
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_struct(int count, const int *array_of_blocklengths,
+ const MPI_Aint *array_of_displacements,
+ const MPI_Datatype *array_of_types, MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_struct")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_ub.c b/src/mpi/datatype/type_ub.c
index 5de72b0..afc6a45 100644
--- a/src/mpi/datatype/type_ub.c
+++ b/src/mpi/datatype/type_ub.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_ub MPI_Type_ub
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_ub as PMPI_Type_ub
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement) __attribute__((weak,alias("PMPI_Type_ub")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/type_vector.c b/src/mpi/datatype/type_vector.c
index 7bb63c0..0ca1bbf 100644
--- a/src/mpi/datatype/type_vector.c
+++ b/src/mpi/datatype/type_vector.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Type_vector MPI_Type_vector
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Type_vector as PMPI_Type_vector
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype,
+ MPI_Datatype *newtype) __attribute__((weak,alias("PMPI_Type_vector")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/unpack.c b/src/mpi/datatype/unpack.c
index bb567a0..997c811 100644
--- a/src/mpi/datatype/unpack.c
+++ b/src/mpi/datatype/unpack.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Unpack MPI_Unpack
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Unpack as PMPI_Unpack
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Unpack(const void *inbuf, int insize, int *position, void *outbuf, int outcount,
+ MPI_Datatype datatype, MPI_Comm comm) __attribute__((weak,alias("PMPI_Unpack")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/datatype/unpack_external.c b/src/mpi/datatype/unpack_external.c
index 283e6e3..df96ebe 100644
--- a/src/mpi/datatype/unpack_external.c
+++ b/src/mpi/datatype/unpack_external.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Unpack_external MPI_Unpack_external
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Unpack_external as PMPI_Unpack_external
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Unpack_external(const char datarep[], const void *inbuf, MPI_Aint insize,
+ MPI_Aint *position, void *outbuf, int outcount, MPI_Datatype datatype)
+ __attribute__((weak,alias("PMPI_Unpack_external")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/add_error_class.c b/src/mpi/errhan/add_error_class.c
index 5ee91ff..1f4622f 100644
--- a/src/mpi/errhan/add_error_class.c
+++ b/src/mpi/errhan/add_error_class.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Add_error_class MPI_Add_error_class
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Add_error_class as PMPI_Add_error_class
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Add_error_class(int *errorclass) __attribute__((weak,alias("PMPI_Add_error_class")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/add_error_code.c b/src/mpi/errhan/add_error_code.c
index 6f856fe..39b49ea 100644
--- a/src/mpi/errhan/add_error_code.c
+++ b/src/mpi/errhan/add_error_code.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Add_error_code MPI_Add_error_code
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Add_error_code as PMPI_Add_error_code
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Add_error_code(int errorclass, int *errorcode) __attribute__((weak,alias("PMPI_Add_error_code")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/add_error_string.c b/src/mpi/errhan/add_error_string.c
index 930d8f0..493bed3 100644
--- a/src/mpi/errhan/add_error_string.c
+++ b/src/mpi/errhan/add_error_string.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Add_error_string MPI_Add_error_string
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Add_error_string as PMPI_Add_error_string
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Add_error_string(int errorcode, const char *string) __attribute__((weak,alias("PMPI_Add_error_string")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/comm_call_errhandler.c b/src/mpi/errhan/comm_call_errhandler.c
index a79610e..36144f6 100644
--- a/src/mpi/errhan/comm_call_errhandler.c
+++ b/src/mpi/errhan/comm_call_errhandler.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_call_errhandler MPI_Comm_call_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_call_errhandler as PMPI_Comm_call_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_call_errhandler(MPI_Comm comm, int errorcode) __attribute__((weak,alias("PMPI_Comm_call_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/comm_create_errhandler.c b/src/mpi/errhan/comm_create_errhandler.c
index 7ceb8a9..c0b3828 100644
--- a/src/mpi/errhan/comm_create_errhandler.c
+++ b/src/mpi/errhan/comm_create_errhandler.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_create_errhandler MPI_Comm_create_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_create_errhandler as PMPI_Comm_create_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_create_errhandler(MPI_Comm_errhandler_function *comm_errhandler_fn,
+ MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Comm_create_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/comm_get_errhandler.c b/src/mpi/errhan/comm_get_errhandler.c
index dc84f8a..c57fdf0 100644
--- a/src/mpi/errhan/comm_get_errhandler.c
+++ b/src/mpi/errhan/comm_get_errhandler.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_get_errhandler MPI_Comm_get_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_get_errhandler as PMPI_Comm_get_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_errhandler(MPI_Comm comm, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Comm_get_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/comm_set_errhandler.c b/src/mpi/errhan/comm_set_errhandler.c
index e86f925..65812e4 100644
--- a/src/mpi/errhan/comm_set_errhandler.c
+++ b/src/mpi/errhan/comm_set_errhandler.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_set_errhandler MPI_Comm_set_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_set_errhandler as PMPI_Comm_set_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_set_errhandler(MPI_Comm comm, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_Comm_set_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/errhandler_create.c b/src/mpi/errhan/errhandler_create.c
index 0dbcc5e..32f1721 100644
--- a/src/mpi/errhan/errhandler_create.c
+++ b/src/mpi/errhan/errhandler_create.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Errhandler_create MPI_Errhandler_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Errhandler_create as PMPI_Errhandler_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Errhandler_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/errhandler_free.c b/src/mpi/errhan/errhandler_free.c
index c5d6ec0..312262b 100644
--- a/src/mpi/errhan/errhandler_free.c
+++ b/src/mpi/errhan/errhandler_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Errhandler_free MPI_Errhandler_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Errhandler_free as PMPI_Errhandler_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_free(MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Errhandler_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/errhandler_get.c b/src/mpi/errhan/errhandler_get.c
index c4b9846..bbbe345 100644
--- a/src/mpi/errhan/errhandler_get.c
+++ b/src/mpi/errhan/errhandler_get.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Errhandler_get MPI_Errhandler_get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Errhandler_get as PMPI_Errhandler_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Errhandler_get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/errhandler_set.c b/src/mpi/errhan/errhandler_set.c
index 243f83a..63c85c8 100644
--- a/src/mpi/errhan/errhandler_set.c
+++ b/src/mpi/errhan/errhandler_set.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Errhandler_set MPI_Errhandler_set
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Errhandler_set as PMPI_Errhandler_set
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_Errhandler_set")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/error_class.c b/src/mpi/errhan/error_class.c
index d50001f..44b309b 100644
--- a/src/mpi/errhan/error_class.c
+++ b/src/mpi/errhan/error_class.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Error_class MPI_Error_class
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Error_class as PMPI_Error_class
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Error_class(int errorcode, int *errorclass) __attribute__((weak,alias("PMPI_Error_class")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/error_string.c b/src/mpi/errhan/error_string.c
index dca8634..e967c66 100644
--- a/src/mpi/errhan/error_string.c
+++ b/src/mpi/errhan/error_string.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Error_string MPI_Error_string
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Error_string as PMPI_Error_string
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Error_string(int errorcode, char *string, int *resultlen) __attribute__((weak,alias("PMPI_Error_string")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/file_call_errhandler.c b/src/mpi/errhan/file_call_errhandler.c
index 60a2765..e132b24 100644
--- a/src/mpi/errhan/file_call_errhandler.c
+++ b/src/mpi/errhan/file_call_errhandler.c
@@ -17,6 +17,8 @@
#pragma _HP_SECONDARY_DEF PMPI_File_call_errhandler MPI_File_call_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_call_errhandler as PMPI_File_call_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_call_errhandler(MPI_File fh, int errorcode) __attribute__((weak,alias("PMPI_File_call_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/file_create_errhandler.c b/src/mpi/errhan/file_create_errhandler.c
index bdcd91b..8560ff3 100644
--- a/src/mpi/errhan/file_create_errhandler.c
+++ b/src/mpi/errhan/file_create_errhandler.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_File_create_errhandler MPI_File_create_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_create_errhandler as PMPI_File_create_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_create_errhandler(MPI_File_errhandler_function *file_errhandler_fn,
+ MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_File_create_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/file_get_errhandler.c b/src/mpi/errhan/file_get_errhandler.c
index e970e9a..e03a830 100644
--- a/src/mpi/errhan/file_get_errhandler.c
+++ b/src/mpi/errhan/file_get_errhandler.c
@@ -18,6 +18,8 @@
#pragma _HP_SECONDARY_DEF PMPI_File_get_errhandler MPI_File_get_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_errhandler as PMPI_File_get_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_File_get_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/file_set_errhandler.c b/src/mpi/errhan/file_set_errhandler.c
index 1161b8a..d2ff503 100644
--- a/src/mpi/errhan/file_set_errhandler.c
+++ b/src/mpi/errhan/file_set_errhandler.c
@@ -18,6 +18,8 @@
#pragma _HP_SECONDARY_DEF PMPI_File_set_errhandler MPI_File_set_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_set_errhandler as PMPI_File_set_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_File_set_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/win_call_errhandler.c b/src/mpi/errhan/win_call_errhandler.c
index 574ce71..0499a93 100644
--- a/src/mpi/errhan/win_call_errhandler.c
+++ b/src/mpi/errhan/win_call_errhandler.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_call_errhandler MPI_Win_call_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_call_errhandler as PMPI_Win_call_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_call_errhandler(MPI_Win win, int errorcode) __attribute__((weak,alias("PMPI_Win_call_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/win_create_errhandler.c b/src/mpi/errhan/win_create_errhandler.c
index 99cb92a..10f7d01 100644
--- a/src/mpi/errhan/win_create_errhandler.c
+++ b/src/mpi/errhan/win_create_errhandler.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_create_errhandler MPI_Win_create_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_create_errhandler as PMPI_Win_create_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create_errhandler(MPI_Win_errhandler_function *win_errhandler_fn,
+ MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Win_create_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/win_get_errhandler.c b/src/mpi/errhan/win_get_errhandler.c
index 6b493e6..89950eb 100644
--- a/src/mpi/errhan/win_get_errhandler.c
+++ b/src/mpi/errhan/win_get_errhandler.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_get_errhandler MPI_Win_get_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_get_errhandler as PMPI_Win_get_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_errhandler(MPI_Win win, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_Win_get_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/errhan/win_set_errhandler.c b/src/mpi/errhan/win_set_errhandler.c
index 4841de3..49e53cc 100644
--- a/src/mpi/errhan/win_set_errhandler.c
+++ b/src/mpi/errhan/win_set_errhandler.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_set_errhandler MPI_Win_set_errhandler
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_set_errhandler as PMPI_Win_set_errhandler
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_errhandler(MPI_Win win, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_Win_set_errhandler")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_compare.c b/src/mpi/group/group_compare.c
index 077c793..ca361bf 100644
--- a/src/mpi/group/group_compare.c
+++ b/src/mpi/group/group_compare.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_compare MPI_Group_compare
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_compare as PMPI_Group_compare
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) __attribute__((weak,alias("PMPI_Group_compare")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_difference.c b/src/mpi/group/group_difference.c
index f5f2350..2232eea 100644
--- a/src/mpi/group/group_difference.c
+++ b/src/mpi/group/group_difference.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_difference MPI_Group_difference
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_difference as PMPI_Group_difference
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_difference")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_excl.c b/src/mpi/group/group_excl.c
index 3c4cdb2..c81cbd9 100644
--- a/src/mpi/group/group_excl.c
+++ b/src/mpi/group/group_excl.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_excl MPI_Group_excl
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_excl as PMPI_Group_excl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_excl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_excl")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_free.c b/src/mpi/group/group_free.c
index bfc632c..f292449 100644
--- a/src/mpi/group/group_free.c
+++ b/src/mpi/group/group_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_free MPI_Group_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_free as PMPI_Group_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_free(MPI_Group *group) __attribute__((weak,alias("PMPI_Group_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_incl.c b/src/mpi/group/group_incl.c
index 3d46d9d..913dc27 100644
--- a/src/mpi/group/group_incl.c
+++ b/src/mpi/group/group_incl.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_incl MPI_Group_incl
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_incl as PMPI_Group_incl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_incl")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_intersection.c b/src/mpi/group/group_intersection.c
index 9026623..7f662d7 100644
--- a/src/mpi/group/group_intersection.c
+++ b/src/mpi/group/group_intersection.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_intersection MPI_Group_intersection
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_intersection as PMPI_Group_intersection
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_intersection")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_range_excl.c b/src/mpi/group/group_range_excl.c
index 13d1ae3..9950217 100644
--- a/src/mpi/group/group_range_excl.c
+++ b/src/mpi/group/group_range_excl.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_range_excl MPI_Group_range_excl
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_range_excl as PMPI_Group_range_excl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_range_excl")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_range_incl.c b/src/mpi/group/group_range_incl.c
index 50a0e93..9cace13 100644
--- a/src/mpi/group/group_range_incl.c
+++ b/src/mpi/group/group_range_incl.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_range_incl MPI_Group_range_incl
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_range_incl as PMPI_Group_range_incl
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_range_incl")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_rank.c b/src/mpi/group/group_rank.c
index 396ed33..6d6c2ef 100644
--- a/src/mpi/group/group_rank.c
+++ b/src/mpi/group/group_rank.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_rank MPI_Group_rank
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_rank as PMPI_Group_rank
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_rank(MPI_Group group, int *rank) __attribute__((weak,alias("PMPI_Group_rank")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_size.c b/src/mpi/group/group_size.c
index b44df12..eddb427 100644
--- a/src/mpi/group/group_size.c
+++ b/src/mpi/group/group_size.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_size MPI_Group_size
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_size as PMPI_Group_size
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_size(MPI_Group group, int *size) __attribute__((weak,alias("PMPI_Group_size")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_translate_ranks.c b/src/mpi/group/group_translate_ranks.c
index dd5d900..d0f9e3f 100644
--- a/src/mpi/group/group_translate_ranks.c
+++ b/src/mpi/group/group_translate_ranks.c
@@ -15,6 +15,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_translate_ranks MPI_Group_translate_ranks
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_translate_ranks as PMPI_Group_translate_ranks
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_translate_ranks(MPI_Group group1, int n, const int ranks1[], MPI_Group group2,
+ int ranks2[]) __attribute__((weak,alias("PMPI_Group_translate_ranks")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/group/group_union.c b/src/mpi/group/group_union.c
index 2194a7c..bf655ad 100644
--- a/src/mpi/group/group_union.c
+++ b/src/mpi/group/group_union.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Group_union MPI_Group_union
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Group_union as PMPI_Group_union
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) __attribute__((weak,alias("PMPI_Group_union")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_create.c b/src/mpi/info/info_create.c
index d1d2711..c974b9a 100644
--- a/src/mpi/info/info_create.c
+++ b/src/mpi/info/info_create.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_create MPI_Info_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_create as PMPI_Info_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_create(MPI_Info *info) __attribute__((weak,alias("PMPI_Info_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_delete.c b/src/mpi/info/info_delete.c
index c2b2be0..6571e0f 100644
--- a/src/mpi/info/info_delete.c
+++ b/src/mpi/info/info_delete.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_delete MPI_Info_delete
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_delete as PMPI_Info_delete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_delete(MPI_Info info, const char *key) __attribute__((weak,alias("PMPI_Info_delete")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_dup.c b/src/mpi/info/info_dup.c
index f838fd3..cc4d67b 100644
--- a/src/mpi/info/info_dup.c
+++ b/src/mpi/info/info_dup.c
@@ -16,6 +16,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_dup MPI_Info_dup
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_dup as PMPI_Info_dup
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_dup(MPI_Info info, MPI_Info *newinfo) __attribute__((weak,alias("PMPI_Info_dup")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_free.c b/src/mpi/info/info_free.c
index 5fabb32..7bf31d7 100644
--- a/src/mpi/info/info_free.c
+++ b/src/mpi/info/info_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_free MPI_Info_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_free as PMPI_Info_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_free(MPI_Info *info) __attribute__((weak,alias("PMPI_Info_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_get.c b/src/mpi/info/info_get.c
index 11f3aaa..690c38a 100644
--- a/src/mpi/info/info_get.c
+++ b/src/mpi/info/info_get.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_get MPI_Info_get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_get as PMPI_Info_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get(MPI_Info info, const char *key, int valuelen, char *value, int *flag) __attribute__((weak,alias("PMPI_Info_get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_getn.c b/src/mpi/info/info_getn.c
index 23c4b6c..fa1a699 100644
--- a/src/mpi/info/info_getn.c
+++ b/src/mpi/info/info_getn.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_get_nkeys MPI_Info_get_nkeys
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_get_nkeys as PMPI_Info_get_nkeys
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get_nkeys(MPI_Info info, int *nkeys) __attribute__((weak,alias("PMPI_Info_get_nkeys")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_getnth.c b/src/mpi/info/info_getnth.c
index 77199c1..5c17bf1 100644
--- a/src/mpi/info/info_getnth.c
+++ b/src/mpi/info/info_getnth.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_get_nthkey MPI_Info_get_nthkey
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_get_nthkey as PMPI_Info_get_nthkey
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get_nthkey(MPI_Info info, int n, char *key) __attribute__((weak,alias("PMPI_Info_get_nthkey")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_getvallen.c b/src/mpi/info/info_getvallen.c
index 02e5ac9..546ee4b 100644
--- a/src/mpi/info/info_getvallen.c
+++ b/src/mpi/info/info_getvallen.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_get_valuelen MPI_Info_get_valuelen
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_get_valuelen as PMPI_Info_get_valuelen
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_get_valuelen(MPI_Info info, const char *key, int *valuelen, int *flag) __attribute__((weak,alias("PMPI_Info_get_valuelen")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/info/info_set.c b/src/mpi/info/info_set.c
index 39d2055..18adebd 100644
--- a/src/mpi/info/info_set.c
+++ b/src/mpi/info/info_set.c
@@ -16,6 +16,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Info_set MPI_Info_set
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Info_set as PMPI_Info_set
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Info_set(MPI_Info info, const char *key, const char *value) __attribute__((weak,alias("PMPI_Info_set")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/abort.c b/src/mpi/init/abort.c
index bb1a63b..fabc013 100644
--- a/src/mpi/init/abort.c
+++ b/src/mpi/init/abort.c
@@ -33,6 +33,8 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Abort MPI_Abort
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Abort as PMPI_Abort
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Abort(MPI_Comm comm, int errorcode) __attribute__((weak,alias("PMPI_Abort")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/finalize.c b/src/mpi/init/finalize.c
index e22d0ff..97a4439 100644
--- a/src/mpi/init/finalize.c
+++ b/src/mpi/init/finalize.c
@@ -37,6 +37,8 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Finalize MPI_Finalize
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Finalize as PMPI_Finalize
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Finalize(void) __attribute__((weak,alias("PMPI_Finalize")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/finalized.c b/src/mpi/init/finalized.c
index b80f668..12adc24 100644
--- a/src/mpi/init/finalized.c
+++ b/src/mpi/init/finalized.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Finalized MPI_Finalized
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Finalized as PMPI_Finalized
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Finalized(int *flag) __attribute__((weak,alias("PMPI_Finalized")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/init.c b/src/mpi/init/init.c
index a5af3da..9bea820 100644
--- a/src/mpi/init/init.c
+++ b/src/mpi/init/init.c
@@ -56,6 +56,8 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Init MPI_Init
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Init as PMPI_Init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Init(int *argc, char ***argv) __attribute__((weak,alias("PMPI_Init")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/initialized.c b/src/mpi/init/initialized.c
index 8fdb7cf..07c3a4b 100644
--- a/src/mpi/init/initialized.c
+++ b/src/mpi/init/initialized.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Initialized MPI_Initialized
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Initialized as PMPI_Initialized
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Initialized(int *flag) __attribute__((weak,alias("PMPI_Initialized")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/initthread.c b/src/mpi/init/initthread.c
index fd13043..7b3f32d 100644
--- a/src/mpi/init/initthread.c
+++ b/src/mpi/init/initthread.c
@@ -68,6 +68,8 @@ cvars:
#pragma _HP_SECONDARY_DEF PMPI_Init_thread MPI_Init_thread
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Init_thread as PMPI_Init_thread
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Init_thread(int *argc, char ***argv, int required, int *provided) __attribute__((weak,alias("PMPI_Init_thread")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/ismain.c b/src/mpi/init/ismain.c
index 612ed24..47a1295 100644
--- a/src/mpi/init/ismain.c
+++ b/src/mpi/init/ismain.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Is_thread_main MPI_Is_thread_main
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Is_thread_main as PMPI_Is_thread_main
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Is_thread_main(int *flag) __attribute__((weak,alias("PMPI_Is_thread_main")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/init/querythread.c b/src/mpi/init/querythread.c
index c9966e8..ae281d8 100644
--- a/src/mpi/init/querythread.c
+++ b/src/mpi/init/querythread.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Query_thread MPI_Query_thread
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Query_thread as PMPI_Query_thread
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Query_thread(int *provided) __attribute__((weak,alias("PMPI_Query_thread")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/misc/getpname.c b/src/mpi/misc/getpname.c
index 17f9a31..26042c8 100644
--- a/src/mpi/misc/getpname.c
+++ b/src/mpi/misc/getpname.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_processor_name MPI_Get_processor_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_processor_name as PMPI_Get_processor_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_processor_name(char *name, int *resultlen) __attribute__((weak,alias("PMPI_Get_processor_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/misc/library_version.c b/src/mpi/misc/library_version.c
index fdf7ef7..3fa210c 100644
--- a/src/mpi/misc/library_version.c
+++ b/src/mpi/misc/library_version.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_library_version MPI_Get_library_version
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_library_version as PMPI_Get_library_version
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_library_version(char *version, int *resultlen) __attribute__((weak,alias("PMPI_Get_library_version")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/misc/pcontrol.c b/src/mpi/misc/pcontrol.c
index bd3bc4f..02627aa 100644
--- a/src/mpi/misc/pcontrol.c
+++ b/src/mpi/misc/pcontrol.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Pcontrol MPI_Pcontrol
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Pcontrol as PMPI_Pcontrol
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Pcontrol(const int level, ...) __attribute__((weak,alias("PMPI_Pcontrol")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/misc/version.c b/src/mpi/misc/version.c
index a839c87..995f065 100644
--- a/src/mpi/misc/version.c
+++ b/src/mpi/misc/version.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_version MPI_Get_version
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_version as PMPI_Get_version
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_version(int *version, int *subversion) __attribute__((weak,alias("PMPI_Get_version")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/bsend.c b/src/mpi/pt2pt/bsend.c
index f432a2e..7049ced 100644
--- a/src/mpi/pt2pt/bsend.c
+++ b/src/mpi/pt2pt/bsend.c
@@ -15,6 +15,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Bsend MPI_Bsend
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Bsend as PMPI_Bsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm) __attribute__((weak,alias("PMPI_Bsend")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/bsend_init.c b/src/mpi/pt2pt/bsend_init.c
index 2ad2319..b6e6e63 100644
--- a/src/mpi/pt2pt/bsend_init.c
+++ b/src/mpi/pt2pt/bsend_init.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Bsend_init MPI_Bsend_init
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Bsend_init as PMPI_Bsend_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Bsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Bsend_init")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/bufattach.c b/src/mpi/pt2pt/bufattach.c
index 96d0267..3dbf3ea 100644
--- a/src/mpi/pt2pt/bufattach.c
+++ b/src/mpi/pt2pt/bufattach.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Buffer_attach MPI_Buffer_attach
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Buffer_attach as PMPI_Buffer_attach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Buffer_attach(void *buffer, int size) __attribute__((weak,alias("PMPI_Buffer_attach")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/buffree.c b/src/mpi/pt2pt/buffree.c
index 2c65e40..29ba64e 100644
--- a/src/mpi/pt2pt/buffree.c
+++ b/src/mpi/pt2pt/buffree.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Buffer_detach MPI_Buffer_detach
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Buffer_detach as PMPI_Buffer_detach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Buffer_detach(void *buffer_addr, int *size) __attribute__((weak,alias("PMPI_Buffer_detach")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/cancel.c b/src/mpi/pt2pt/cancel.c
index cdfa810..b16c156 100644
--- a/src/mpi/pt2pt/cancel.c
+++ b/src/mpi/pt2pt/cancel.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cancel MPI_Cancel
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cancel as PMPI_Cancel
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cancel(MPI_Request *request) __attribute__((weak,alias("PMPI_Cancel")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/greq_complete.c b/src/mpi/pt2pt/greq_complete.c
index 376369a..eba269c 100644
--- a/src/mpi/pt2pt/greq_complete.c
+++ b/src/mpi/pt2pt/greq_complete.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Grequest_complete MPI_Grequest_complete
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Grequest_complete as PMPI_Grequest_complete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Grequest_complete(MPI_Request request) __attribute__((weak,alias("PMPI_Grequest_complete")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/greq_start.c b/src/mpi/pt2pt/greq_start.c
index 12dcf03..3bd9a77 100644
--- a/src/mpi/pt2pt/greq_start.c
+++ b/src/mpi/pt2pt/greq_start.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Grequest_start MPI_Grequest_start
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Grequest_start as PMPI_Grequest_start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Grequest_start(MPI_Grequest_query_function *query_fn, MPI_Grequest_free_function *free_fn,
+ MPI_Grequest_cancel_function *cancel_fn, void *extra_state,
+ MPI_Request *request) __attribute__((weak,alias("PMPI_Grequest_start")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/ibsend.c b/src/mpi/pt2pt/ibsend.c
index 9bced9a..9fc7560 100644
--- a/src/mpi/pt2pt/ibsend.c
+++ b/src/mpi/pt2pt/ibsend.c
@@ -15,6 +15,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Ibsend MPI_Ibsend
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ibsend as PMPI_Ibsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ibsend")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/improbe.c b/src/mpi/pt2pt/improbe.c
index 34a1692..80cd187 100644
--- a/src/mpi/pt2pt/improbe.c
+++ b/src/mpi/pt2pt/improbe.c
@@ -13,6 +13,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Improbe MPI_Improbe
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Improbe as PMPI_Improbe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Improbe(int source, int tag, MPI_Comm comm, int *flag, MPI_Message *message,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_Improbe")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/imrecv.c b/src/mpi/pt2pt/imrecv.c
index 22e1496..3fad7c6 100644
--- a/src/mpi/pt2pt/imrecv.c
+++ b/src/mpi/pt2pt/imrecv.c
@@ -13,6 +13,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Imrecv MPI_Imrecv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Imrecv as PMPI_Imrecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Imrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
+ MPI_Request *request) __attribute__((weak,alias("PMPI_Imrecv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/iprobe.c b/src/mpi/pt2pt/iprobe.c
index 02a7a8e..7bfc17c 100644
--- a/src/mpi/pt2pt/iprobe.c
+++ b/src/mpi/pt2pt/iprobe.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Iprobe MPI_Iprobe
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Iprobe as PMPI_Iprobe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Iprobe(int source, int tag, MPI_Comm comm, int *flag, MPI_Status *status) __attribute__((weak,alias("PMPI_Iprobe")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/irecv.c b/src/mpi/pt2pt/irecv.c
index 89afa37..c9b832b 100644
--- a/src/mpi/pt2pt/irecv.c
+++ b/src/mpi/pt2pt/irecv.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Irecv MPI_Irecv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Irecv as PMPI_Irecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Irecv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/irsend.c b/src/mpi/pt2pt/irsend.c
index f7959cd..3035910 100644
--- a/src/mpi/pt2pt/irsend.c
+++ b/src/mpi/pt2pt/irsend.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Irsend MPI_Irsend
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Irsend as PMPI_Irsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Irsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Irsend")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/isend.c b/src/mpi/pt2pt/isend.c
index a0bb094..dc37463 100644
--- a/src/mpi/pt2pt/isend.c
+++ b/src/mpi/pt2pt/isend.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Isend MPI_Isend
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Isend as PMPI_Isend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Isend")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/issend.c b/src/mpi/pt2pt/issend.c
index b693c13..4924583 100644
--- a/src/mpi/pt2pt/issend.c
+++ b/src/mpi/pt2pt/issend.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Issend MPI_Issend
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Issend as PMPI_Issend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Issend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Issend")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/mprobe.c b/src/mpi/pt2pt/mprobe.c
index 18c5e9a..ec88688 100644
--- a/src/mpi/pt2pt/mprobe.c
+++ b/src/mpi/pt2pt/mprobe.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Mprobe MPI_Mprobe
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Mprobe as PMPI_Mprobe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Mprobe(int source, int tag, MPI_Comm comm, MPI_Message *message, MPI_Status *status) __attribute__((weak,alias("PMPI_Mprobe")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/mrecv.c b/src/mpi/pt2pt/mrecv.c
index 683b51f..5a2f1b6 100644
--- a/src/mpi/pt2pt/mrecv.c
+++ b/src/mpi/pt2pt/mrecv.c
@@ -13,6 +13,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Mrecv MPI_Mrecv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Mrecv as PMPI_Mrecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Mrecv(void *buf, int count, MPI_Datatype datatype, MPI_Message *message,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_Mrecv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/probe.c b/src/mpi/pt2pt/probe.c
index 1c79009..840258d 100644
--- a/src/mpi/pt2pt/probe.c
+++ b/src/mpi/pt2pt/probe.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Probe MPI_Probe
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Probe as PMPI_Probe
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) __attribute__((weak,alias("PMPI_Probe")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/recv.c b/src/mpi/pt2pt/recv.c
index 62cc222..bede1e0 100644
--- a/src/mpi/pt2pt/recv.c
+++ b/src/mpi/pt2pt/recv.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Recv MPI_Recv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Recv as PMPI_Recv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag,
+ MPI_Comm comm, MPI_Status *status) __attribute__((weak,alias("PMPI_Recv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/recv_init.c b/src/mpi/pt2pt/recv_init.c
index eea0e73..23556ce 100644
--- a/src/mpi/pt2pt/recv_init.c
+++ b/src/mpi/pt2pt/recv_init.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Recv_init MPI_Recv_init
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Recv_init as PMPI_Recv_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int source, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Recv_init")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/request_free.c b/src/mpi/pt2pt/request_free.c
index d2bfa9b..cbc9c74 100644
--- a/src/mpi/pt2pt/request_free.c
+++ b/src/mpi/pt2pt/request_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Request_free MPI_Request_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Request_free as PMPI_Request_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Request_free(MPI_Request *request) __attribute__((weak,alias("PMPI_Request_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/request_get_status.c b/src/mpi/pt2pt/request_get_status.c
index ef67bb2..4712ebf 100644
--- a/src/mpi/pt2pt/request_get_status.c
+++ b/src/mpi/pt2pt/request_get_status.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Request_get_status MPI_Request_get_status
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Request_get_status as PMPI_Request_get_status
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status) __attribute__((weak,alias("PMPI_Request_get_status")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/rsend.c b/src/mpi/pt2pt/rsend.c
index fe41c99..82394f1 100644
--- a/src/mpi/pt2pt/rsend.c
+++ b/src/mpi/pt2pt/rsend.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Rsend MPI_Rsend
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Rsend as PMPI_Rsend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm) __attribute__((weak,alias("PMPI_Rsend")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/rsend_init.c b/src/mpi/pt2pt/rsend_init.c
index 61942ab..3061168 100644
--- a/src/mpi/pt2pt/rsend_init.c
+++ b/src/mpi/pt2pt/rsend_init.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Rsend_init MPI_Rsend_init
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Rsend_init as PMPI_Rsend_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rsend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Rsend_init")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/send.c b/src/mpi/pt2pt/send.c
index e0a72fb..4671235 100644
--- a/src/mpi/pt2pt/send.c
+++ b/src/mpi/pt2pt/send.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Send MPI_Send
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Send as PMPI_Send
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm) __attribute__((weak,alias("PMPI_Send")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/send_init.c b/src/mpi/pt2pt/send_init.c
index af5ab90..3002fa9 100644
--- a/src/mpi/pt2pt/send_init.c
+++ b/src/mpi/pt2pt/send_init.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Send_init MPI_Send_init
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Send_init as PMPI_Send_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Send_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Send_init")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/sendrecv.c b/src/mpi/pt2pt/sendrecv.c
index d49c4a9..e8a1b9f 100644
--- a/src/mpi/pt2pt/sendrecv.c
+++ b/src/mpi/pt2pt/sendrecv.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Sendrecv MPI_Sendrecv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Sendrecv as PMPI_Sendrecv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Sendrecv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest,
+ int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int source, int recvtag, MPI_Comm comm, MPI_Status *status)
+ __attribute__((weak,alias("PMPI_Sendrecv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/sendrecv_rep.c b/src/mpi/pt2pt/sendrecv_rep.c
index dda4dd7..c928bec 100644
--- a/src/mpi/pt2pt/sendrecv_rep.c
+++ b/src/mpi/pt2pt/sendrecv_rep.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Sendrecv_replace MPI_Sendrecv_replace
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Sendrecv_replace as PMPI_Sendrecv_replace
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int dest,
+ int sendtag, int source, int recvtag, MPI_Comm comm,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_Sendrecv_replace")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/ssend.c b/src/mpi/pt2pt/ssend.c
index 9b14f1b..197a4fd 100644
--- a/src/mpi/pt2pt/ssend.c
+++ b/src/mpi/pt2pt/ssend.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Ssend MPI_Ssend
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ssend as PMPI_Ssend
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ssend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm) __attribute__((weak,alias("PMPI_Ssend")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/ssend_init.c b/src/mpi/pt2pt/ssend_init.c
index 0796c8d..92470a6 100644
--- a/src/mpi/pt2pt/ssend_init.c
+++ b/src/mpi/pt2pt/ssend_init.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Ssend_init MPI_Ssend_init
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ssend_init as PMPI_Ssend_init
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ssend_init(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,
+ MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ssend_init")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/start.c b/src/mpi/pt2pt/start.c
index 6e82688..0ff9a9c 100644
--- a/src/mpi/pt2pt/start.c
+++ b/src/mpi/pt2pt/start.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Start MPI_Start
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Start as PMPI_Start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Start(MPI_Request *request) __attribute__((weak,alias("PMPI_Start")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/startall.c b/src/mpi/pt2pt/startall.c
index 734f032..27b9148 100644
--- a/src/mpi/pt2pt/startall.c
+++ b/src/mpi/pt2pt/startall.c
@@ -18,6 +18,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Startall MPI_Startall
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Startall as PMPI_Startall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Startall(int count, MPI_Request array_of_requests[]) __attribute__((weak,alias("PMPI_Startall")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/status_set_cancelled.c b/src/mpi/pt2pt/status_set_cancelled.c
index db1cae0..05ff76c 100644
--- a/src/mpi/pt2pt/status_set_cancelled.c
+++ b/src/mpi/pt2pt/status_set_cancelled.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Status_set_cancelled MPI_Status_set_cancelled
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Status_set_cancelled as PMPI_Status_set_cancelled
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Status_set_cancelled(MPI_Status *status, int flag) __attribute__((weak,alias("PMPI_Status_set_cancelled")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/test.c b/src/mpi/pt2pt/test.c
index 3602dbe..5b5d325 100644
--- a/src/mpi/pt2pt/test.c
+++ b/src/mpi/pt2pt/test.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Test MPI_Test
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Test as PMPI_Test
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) __attribute__((weak,alias("PMPI_Test")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/test_cancelled.c b/src/mpi/pt2pt/test_cancelled.c
index 216ba24..f73a474 100644
--- a/src/mpi/pt2pt/test_cancelled.c
+++ b/src/mpi/pt2pt/test_cancelled.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Test_cancelled MPI_Test_cancelled
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Test_cancelled as PMPI_Test_cancelled
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Test_cancelled(const MPI_Status *status, int *flag) __attribute__((weak,alias("PMPI_Test_cancelled")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/testall.c b/src/mpi/pt2pt/testall.c
index f797d30..8bd65fe 100644
--- a/src/mpi/pt2pt/testall.c
+++ b/src/mpi/pt2pt/testall.c
@@ -18,6 +18,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Testall MPI_Testall
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Testall as PMPI_Testall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Testall(int count, MPI_Request array_of_requests[], int *flag,
+ MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Testall")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/testany.c b/src/mpi/pt2pt/testany.c
index 7cc9da7..a3f0595 100644
--- a/src/mpi/pt2pt/testany.c
+++ b/src/mpi/pt2pt/testany.c
@@ -18,6 +18,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Testany MPI_Testany
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Testany as PMPI_Testany
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Testany(int count, MPI_Request array_of_requests[], int *indx, int *flag,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_Testany")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/testsome.c b/src/mpi/pt2pt/testsome.c
index fd1c15c..58c1275 100644
--- a/src/mpi/pt2pt/testsome.c
+++ b/src/mpi/pt2pt/testsome.c
@@ -18,6 +18,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Testsome MPI_Testsome
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Testsome as PMPI_Testsome
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Testsome(int incount, MPI_Request array_of_requests[], int *outcount,
+ int array_of_indices[], MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Testsome")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/wait.c b/src/mpi/pt2pt/wait.c
index e4322cc..2d609ac 100644
--- a/src/mpi/pt2pt/wait.c
+++ b/src/mpi/pt2pt/wait.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Wait MPI_Wait
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Wait as PMPI_Wait
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Wait(MPI_Request *request, MPI_Status *status) __attribute__((weak,alias("PMPI_Wait")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/waitall.c b/src/mpi/pt2pt/waitall.c
index 6c27cce..ccdd329 100644
--- a/src/mpi/pt2pt/waitall.c
+++ b/src/mpi/pt2pt/waitall.c
@@ -19,6 +19,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Waitall MPI_Waitall
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Waitall as PMPI_Waitall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Waitall(int count, MPI_Request array_of_requests[], MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Waitall")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/waitany.c b/src/mpi/pt2pt/waitany.c
index 4345786..7bb37d7 100644
--- a/src/mpi/pt2pt/waitany.c
+++ b/src/mpi/pt2pt/waitany.c
@@ -18,6 +18,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Waitany MPI_Waitany
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Waitany as PMPI_Waitany
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Waitany(int count, MPI_Request array_of_requests[], int *indx, MPI_Status *status) __attribute__((weak,alias("PMPI_Waitany")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/pt2pt/waitsome.c b/src/mpi/pt2pt/waitsome.c
index e171b2b..00b9449 100644
--- a/src/mpi/pt2pt/waitsome.c
+++ b/src/mpi/pt2pt/waitsome.c
@@ -18,6 +18,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Waitsome MPI_Waitsome
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Waitsome as PMPI_Waitsome
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Waitsome(int incount, MPI_Request array_of_requests[], int *outcount,
+ int array_of_indices[], MPI_Status array_of_statuses[]) __attribute__((weak,alias("PMPI_Waitsome")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/accumulate.c b/src/mpi/rma/accumulate.c
index 5ca38d8..93ff2f9 100644
--- a/src/mpi/rma/accumulate.c
+++ b/src/mpi/rma/accumulate.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Accumulate MPI_Accumulate
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Accumulate as PMPI_Accumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Accumulate(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
+ __attribute__((weak,alias("PMPI_Accumulate")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/alloc_mem.c b/src/mpi/rma/alloc_mem.c
index f6dd1e4..cdfad3f 100644
--- a/src/mpi/rma/alloc_mem.c
+++ b/src/mpi/rma/alloc_mem.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Alloc_mem MPI_Alloc_mem
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Alloc_mem as PMPI_Alloc_mem
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr) __attribute__((weak,alias("PMPI_Alloc_mem")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/compare_and_swap.c b/src/mpi/rma/compare_and_swap.c
index 04bf12e..ecd4921 100644
--- a/src/mpi/rma/compare_and_swap.c
+++ b/src/mpi/rma/compare_and_swap.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Compare_and_swap MPI_Compare_and_swap
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Compare_and_swap as PMPI_Compare_and_swap
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Compare_and_swap(const void *origin_addr, const void *compare_addr,
+ void *result_addr, MPI_Datatype datatype, int target_rank,
+ MPI_Aint target_disp, MPI_Win win)
+ __attribute__((weak,alias("PMPI_Compare_and_swap")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/fetch_and_op.c b/src/mpi/rma/fetch_and_op.c
index db40704..4ce6f8f 100644
--- a/src/mpi/rma/fetch_and_op.c
+++ b/src/mpi/rma/fetch_and_op.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Fetch_and_op MPI_Fetch_and_op
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Fetch_and_op as PMPI_Fetch_and_op
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Fetch_and_op(const void *origin_addr, void *result_addr,
+ MPI_Datatype datatype, int target_rank, MPI_Aint target_disp,
+ MPI_Op op, MPI_Win win)
+ __attribute__((weak,alias("PMPI_Fetch_and_op")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/free_mem.c b/src/mpi/rma/free_mem.c
index 32320d7..313da39 100644
--- a/src/mpi/rma/free_mem.c
+++ b/src/mpi/rma/free_mem.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Free_mem MPI_Free_mem
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Free_mem as PMPI_Free_mem
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Free_mem(void *base) __attribute__((weak,alias("PMPI_Free_mem")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/get.c b/src/mpi/rma/get.c
index ae3d568..e8ba531 100644
--- a/src/mpi/rma/get.c
+++ b/src/mpi/rma/get.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Get MPI_Get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get as PMPI_Get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get(void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Win win) __attribute__((weak,alias("PMPI_Get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/get_accumulate.c b/src/mpi/rma/get_accumulate.c
index 4660212..8f58b20 100644
--- a/src/mpi/rma/get_accumulate.c
+++ b/src/mpi/rma/get_accumulate.c
@@ -14,6 +14,12 @@
#pragma _HP_SECONDARY_DEF PMPI_Get_accumulate MPI_Get_accumulate
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Get_accumulate as PMPI_Get_accumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Get_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr, int result_count,
+ MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win)
+ __attribute__((weak,alias("PMPI_Get_accumulate")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/put.c b/src/mpi/rma/put.c
index 9444011..1d4dc75 100644
--- a/src/mpi/rma/put.c
+++ b/src/mpi/rma/put.c
@@ -14,6 +14,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Put MPI_Put
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Put as PMPI_Put
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Put(const void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
+ int target_rank, MPI_Aint target_disp, int target_count,
+ MPI_Datatype target_datatype, MPI_Win win) __attribute__((weak,alias("PMPI_Put")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/raccumulate.c b/src/mpi/rma/raccumulate.c
index 4906991..6f5f5da 100644
--- a/src/mpi/rma/raccumulate.c
+++ b/src/mpi/rma/raccumulate.c
@@ -14,6 +14,12 @@
#pragma _HP_SECONDARY_DEF PMPI_Raccumulate MPI_Raccumulate
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Raccumulate as PMPI_Raccumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Raccumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Raccumulate")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/rget.c b/src/mpi/rma/rget.c
index 33edc79..3536d1b 100644
--- a/src/mpi/rma/rget.c
+++ b/src/mpi/rma/rget.c
@@ -14,6 +14,12 @@
#pragma _HP_SECONDARY_DEF PMPI_Rget MPI_Rget
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Rget as PMPI_Rget
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rget(void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Win win,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Rget")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/rget_accumulate.c b/src/mpi/rma/rget_accumulate.c
index b3a47be..55196ba 100644
--- a/src/mpi/rma/rget_accumulate.c
+++ b/src/mpi/rma/rget_accumulate.c
@@ -14,6 +14,13 @@
#pragma _HP_SECONDARY_DEF PMPI_Rget_accumulate MPI_Rget_accumulate
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Rget_accumulate as PMPI_Rget_accumulate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rget_accumulate(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, void *result_addr, int result_count,
+ MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Rget_accumulate")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/rput.c b/src/mpi/rma/rput.c
index 48c3052..a6f79aa 100644
--- a/src/mpi/rma/rput.c
+++ b/src/mpi/rma/rput.c
@@ -14,6 +14,12 @@
#pragma _HP_SECONDARY_DEF PMPI_Rput MPI_Rput
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Rput as PMPI_Rput
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Rput(const void *origin_addr, int origin_count,
+ MPI_Datatype origin_datatype, int target_rank, MPI_Aint target_disp,
+ int target_count, MPI_Datatype target_datatype, MPI_Win win,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Rput")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_allocate.c b/src/mpi/rma/win_allocate.c
index e39a15d..47c797a 100644
--- a/src/mpi/rma/win_allocate.c
+++ b/src/mpi/rma/win_allocate.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_allocate MPI_Win_allocate
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_allocate as PMPI_Win_allocate
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_allocate(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, void *baseptr,
+ MPI_Win *win) __attribute__((weak,alias("PMPI_Win_allocate")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_allocate_shared.c b/src/mpi/rma/win_allocate_shared.c
index 828c216..fac911f 100644
--- a/src/mpi/rma/win_allocate_shared.c
+++ b/src/mpi/rma/win_allocate_shared.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_allocate_shared MPI_Win_allocate_shared
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_allocate_shared as PMPI_Win_allocate_shared
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_allocate_shared(MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
+ void *baseptr, MPI_Win *win) __attribute__((weak,alias("PMPI_Win_allocate_shared")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_attach.c b/src/mpi/rma/win_attach.c
index a86cbc8..06164cc 100644
--- a/src/mpi/rma/win_attach.c
+++ b/src/mpi/rma/win_attach.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_attach MPI_Win_attach
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_attach as PMPI_Win_attach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_attach(MPI_Win win, void *base, MPI_Aint size) __attribute__((weak,alias("PMPI_Win_attach")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_complete.c b/src/mpi/rma/win_complete.c
index d5a302c..0787e64 100644
--- a/src/mpi/rma/win_complete.c
+++ b/src/mpi/rma/win_complete.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_complete MPI_Win_complete
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_complete as PMPI_Win_complete
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_complete(MPI_Win win) __attribute__((weak,alias("PMPI_Win_complete")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_create.c b/src/mpi/rma/win_create.c
index b921532..5cb8d73 100644
--- a/src/mpi/rma/win_create.c
+++ b/src/mpi/rma/win_create.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_create MPI_Win_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_create as PMPI_Win_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm,
+ MPI_Win *win) __attribute__((weak,alias("PMPI_Win_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_create_dynamic.c b/src/mpi/rma/win_create_dynamic.c
index 51bb279..a0d9ba3 100644
--- a/src/mpi/rma/win_create_dynamic.c
+++ b/src/mpi/rma/win_create_dynamic.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_create_dynamic MPI_Win_create_dynamic
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_create_dynamic as PMPI_Win_create_dynamic
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_create_dynamic(MPI_Info info, MPI_Comm comm, MPI_Win *win) __attribute__((weak,alias("PMPI_Win_create_dynamic")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_detach.c b/src/mpi/rma/win_detach.c
index 48ea14c..13812ce 100644
--- a/src/mpi/rma/win_detach.c
+++ b/src/mpi/rma/win_detach.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_detach MPI_Win_detach
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_detach as PMPI_Win_detach
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_detach(MPI_Win win, const void *base) __attribute__((weak,alias("PMPI_Win_detach")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_fence.c b/src/mpi/rma/win_fence.c
index 601f1b8..5314ee5 100644
--- a/src/mpi/rma/win_fence.c
+++ b/src/mpi/rma/win_fence.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_fence MPI_Win_fence
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_fence as PMPI_Win_fence
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_fence(int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_fence")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_flush.c b/src/mpi/rma/win_flush.c
index 6bad81e..2a58fbc 100644
--- a/src/mpi/rma/win_flush.c
+++ b/src/mpi/rma/win_flush.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_flush MPI_Win_flush
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_flush as PMPI_Win_flush
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush(int rank, MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_flush_all.c b/src/mpi/rma/win_flush_all.c
index 52f28b5..60da14d 100644
--- a/src/mpi/rma/win_flush_all.c
+++ b/src/mpi/rma/win_flush_all.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_flush_all MPI_Win_flush_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_flush_all as PMPI_Win_flush_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush_all(MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush_all")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_flush_local.c b/src/mpi/rma/win_flush_local.c
index b089edc..68c7370 100644
--- a/src/mpi/rma/win_flush_local.c
+++ b/src/mpi/rma/win_flush_local.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_flush_local MPI_Win_flush_local
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_flush_local as PMPI_Win_flush_local
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush_local(int rank, MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush_local")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_flush_local_all.c b/src/mpi/rma/win_flush_local_all.c
index ccf0975..3ef129e 100644
--- a/src/mpi/rma/win_flush_local_all.c
+++ b/src/mpi/rma/win_flush_local_all.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_flush_local_all MPI_Win_flush_local_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_flush_local_all as PMPI_Win_flush_local_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_flush_local_all(MPI_Win win) __attribute__((weak,alias("PMPI_Win_flush_local_all")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_free.c b/src/mpi/rma/win_free.c
index 3c45447..bb36778 100644
--- a/src/mpi/rma/win_free.c
+++ b/src/mpi/rma/win_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_free MPI_Win_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_free as PMPI_Win_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_free(MPI_Win *win) __attribute__((weak,alias("PMPI_Win_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_get_group.c b/src/mpi/rma/win_get_group.c
index 2421351..5db66d5 100644
--- a/src/mpi/rma/win_get_group.c
+++ b/src/mpi/rma/win_get_group.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_get_group MPI_Win_get_group
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_get_group as PMPI_Win_get_group
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_group(MPI_Win win, MPI_Group *group) __attribute__((weak,alias("PMPI_Win_get_group")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_get_info.c b/src/mpi/rma/win_get_info.c
index 69a3d34..31cb305 100644
--- a/src/mpi/rma/win_get_info.c
+++ b/src/mpi/rma/win_get_info.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_get_info MPI_Win_get_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_get_info as PMPI_Win_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_info(MPI_Win win, MPI_Info *info_used) __attribute__((weak,alias("PMPI_Win_get_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_get_name.c b/src/mpi/rma/win_get_name.c
index f0206d6..10900d1 100644
--- a/src/mpi/rma/win_get_name.c
+++ b/src/mpi/rma/win_get_name.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_get_name MPI_Win_get_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_get_name as PMPI_Win_get_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_get_name(MPI_Win win, char *win_name, int *resultlen) __attribute__((weak,alias("PMPI_Win_get_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_lock.c b/src/mpi/rma/win_lock.c
index 604c19a..c1cc4e1 100644
--- a/src/mpi/rma/win_lock.c
+++ b/src/mpi/rma/win_lock.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_lock MPI_Win_lock
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_lock as PMPI_Win_lock
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_lock")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_lock_all.c b/src/mpi/rma/win_lock_all.c
index 233505b..4175330 100644
--- a/src/mpi/rma/win_lock_all.c
+++ b/src/mpi/rma/win_lock_all.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_lock_all MPI_Win_lock_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_lock_all as PMPI_Win_lock_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_lock_all(int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_lock_all")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_post.c b/src/mpi/rma/win_post.c
index fa7a76d..cdc8593 100644
--- a/src/mpi/rma/win_post.c
+++ b/src/mpi/rma/win_post.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_post MPI_Win_post
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_post as PMPI_Win_post
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_post(MPI_Group group, int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_post")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_set_info.c b/src/mpi/rma/win_set_info.c
index bfcb5b2..bab6f18 100644
--- a/src/mpi/rma/win_set_info.c
+++ b/src/mpi/rma/win_set_info.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_set_info MPI_Win_set_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_set_info as PMPI_Win_set_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_info(MPI_Win win, MPI_Info info) __attribute__((weak,alias("PMPI_Win_set_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_set_name.c b/src/mpi/rma/win_set_name.c
index 806f584..b04f415 100644
--- a/src/mpi/rma/win_set_name.c
+++ b/src/mpi/rma/win_set_name.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_set_name MPI_Win_set_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_set_name as PMPI_Win_set_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_set_name(MPI_Win win, const char *win_name) __attribute__((weak,alias("PMPI_Win_set_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_shared_query.c b/src/mpi/rma/win_shared_query.c
index 75f8a30..e699dd6 100644
--- a/src/mpi/rma/win_shared_query.c
+++ b/src/mpi/rma/win_shared_query.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_shared_query MPI_Win_shared_query
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_shared_query as PMPI_Win_shared_query
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_shared_query(MPI_Win win, int rank, MPI_Aint *size, int *disp_unit, void *baseptr) __attribute__((weak,alias("PMPI_Win_shared_query")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_start.c b/src/mpi/rma/win_start.c
index 50e7fed..9c54e57 100644
--- a/src/mpi/rma/win_start.c
+++ b/src/mpi/rma/win_start.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_start MPI_Win_start
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_start as PMPI_Win_start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_start(MPI_Group group, int assert, MPI_Win win) __attribute__((weak,alias("PMPI_Win_start")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_sync.c b/src/mpi/rma/win_sync.c
index f3e2f08..624fd04 100644
--- a/src/mpi/rma/win_sync.c
+++ b/src/mpi/rma/win_sync.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_sync MPI_Win_sync
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_sync as PMPI_Win_sync
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_sync(MPI_Win win) __attribute__((weak,alias("PMPI_Win_sync")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_test.c b/src/mpi/rma/win_test.c
index ad36927..a89d903 100644
--- a/src/mpi/rma/win_test.c
+++ b/src/mpi/rma/win_test.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_test MPI_Win_test
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_test as PMPI_Win_test
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_test(MPI_Win win, int *flag) __attribute__((weak,alias("PMPI_Win_test")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_unlock.c b/src/mpi/rma/win_unlock.c
index cbb8be7..cb5ed14 100644
--- a/src/mpi/rma/win_unlock.c
+++ b/src/mpi/rma/win_unlock.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_unlock MPI_Win_unlock
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_unlock as PMPI_Win_unlock
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_unlock(int rank, MPI_Win win) __attribute__((weak,alias("PMPI_Win_unlock")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_unlock_all.c b/src/mpi/rma/win_unlock_all.c
index 7661918..c7577c5 100644
--- a/src/mpi/rma/win_unlock_all.c
+++ b/src/mpi/rma/win_unlock_all.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_unlock_all MPI_Win_unlock_all
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_unlock_all as PMPI_Win_unlock_all
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_unlock_all(MPI_Win win) __attribute__((weak,alias("PMPI_Win_unlock_all")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/rma/win_wait.c b/src/mpi/rma/win_wait.c
index 5fca70d..0b5b0e2 100644
--- a/src/mpi/rma/win_wait.c
+++ b/src/mpi/rma/win_wait.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Win_wait MPI_Win_wait
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Win_wait as PMPI_Win_wait
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Win_wait(MPI_Win win) __attribute__((weak,alias("PMPI_Win_wait")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/romio/include/mpio.h.in b/src/mpi/romio/include/mpio.h.in
index 5ad085f..d4c7ed7 100644
--- a/src/mpi/romio/include/mpio.h.in
+++ b/src/mpi/romio/include/mpio.h.in
@@ -120,122 +120,122 @@ typedef int MPI_Fint;
/* Section 9.2 */
/* Begin Prototypes */
-int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh) MPICH_ATTR_WEAK_ALIAS("PMPI_File_open");
-int MPI_File_close(MPI_File *fh) MPICH_ATTR_WEAK_ALIAS("PMPI_File_close");
-int MPI_File_delete(const char *filename, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_File_delete");
-int MPI_File_set_size(MPI_File fh, MPI_Offset size) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_size");
-int MPI_File_preallocate(MPI_File fh, MPI_Offset size) MPICH_ATTR_WEAK_ALIAS("PMPI_File_preallocate");
-int MPI_File_get_size(MPI_File fh, MPI_Offset *size) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_size");
-int MPI_File_get_group(MPI_File fh, MPI_Group *group) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_group");
-int MPI_File_get_amode(MPI_File fh, int *amode) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_amode");
-int MPI_File_set_info(MPI_File fh, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_info");
-int MPI_File_get_info(MPI_File fh, MPI_Info *info_used) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_info");
+int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh);
+int MPI_File_close(MPI_File *fh);
+int MPI_File_delete(const char *filename, MPI_Info info);
+int MPI_File_set_size(MPI_File fh, MPI_Offset size);
+int MPI_File_preallocate(MPI_File fh, MPI_Offset size);
+int MPI_File_get_size(MPI_File fh, MPI_Offset *size);
+int MPI_File_get_group(MPI_File fh, MPI_Group *group);
+int MPI_File_get_amode(MPI_File fh, int *amode);
+int MPI_File_set_info(MPI_File fh, MPI_Info info);
+int MPI_File_get_info(MPI_File fh, MPI_Info *info_used);
/* Section 9.3 */
int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype,
- const char *datarep, MPI_Info info) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_view");
+ const char *datarep, MPI_Info info);
int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype,
- char *datarep) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_view");
+ char *datarep);
/* Section 9.4.2 */
int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at_all");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
int MPI_File_write_at(MPI_File fh, MPI_Offset offset, const void * buf, int count,
MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at_all");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
/* nonblocking calls currently use MPIO_Request, because generalized
requests not yet implemented. For the same reason, MPIO_Test and
MPIO_Wait are used to test and wait on nonblocking I/O requests */
int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iread_at");
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, const void *buf, int count,
MPI_Datatype datatype, MPIO_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iwrite_at");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
/* Section 9.4.3 */
int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_all");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_write(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_write_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_all");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
/* nonblocking calls currently use MPIO_Request, because generalized
requests not yet implemented. For the same reason, MPIO_Test and
MPIO_Wait are used to test and wait on nonblocking I/O requests */
int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iread");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_iwrite(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iwrite");
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
-int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence) MPICH_ATTR_WEAK_ALIAS("PMPI_File_seek");
-int MPI_File_get_position(MPI_File fh, MPI_Offset *offset) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_position");
-int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_byte_offset");
+int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence);
+int MPI_File_get_position(MPI_File fh, MPI_Offset *offset);
+int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp);
/* Section 9.4.4 */
int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_shared");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_shared");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iread_shared");
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_iwrite_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_iwrite_shared");
+ MPIO_Request *request) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_ordered");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
int MPI_File_write_ordered(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
- MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_ordered");
-int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence) MPICH_ATTR_WEAK_ALIAS("PMPI_File_seek_shared");
-int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_position_shared");
+ MPI_Status *status) MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence);
+int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset);
/* Section 9.4.5 */
int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count,
- MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at_all_begin");
-int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_at_all_end");
+ MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status);
int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf, int count,
- MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at_all_begin");
-int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_at_all_end");
+ MPI_Datatype datatype) MPICH_ATTR_POINTER_WITH_TYPE_TAG(3,5);
+int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status);
int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_all_begin");
-int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_all_end");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status);
int MPI_File_write_all_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_all_begin");
-int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_all_end");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status);
int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_ordered_begin");
-int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_read_ordered_end");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status);
int MPI_File_write_ordered_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
- MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_ordered_begin");
-int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status) MPICH_ATTR_WEAK_ALIAS("PMPI_File_write_ordered_end");
+ MPICH_ATTR_POINTER_WITH_TYPE_TAG(2,4);
+int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status);
/* Section 9.5.1 */
-int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_type_extent");
+int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent);
/* Section 9.5.3 */
int MPI_Register_datarep(const char *datarep, MPI_Datarep_conversion_function *read_conversion_fn,
MPI_Datarep_conversion_function *write_conversion_fn,
- MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) MPICH_ATTR_WEAK_ALIAS("PMPI_Register_datarep");
+ MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state);
/* Section 9.6.1 */
-int MPI_File_set_atomicity(MPI_File fh, int flag) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_atomicity");
-int MPI_File_get_atomicity(MPI_File fh, int *flag) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_atomicity");
-int MPI_File_sync(MPI_File fh) MPICH_ATTR_WEAK_ALIAS("PMPI_File_sync");
+int MPI_File_set_atomicity(MPI_File fh, int flag);
+int MPI_File_get_atomicity(MPI_File fh, int *flag);
+int MPI_File_sync(MPI_File fh);
/* Section 4.13.3 */
#ifndef MPICH
/* MPICH provides these definitions */
-int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_set_errhandler");
-int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) MPICH_ATTR_WEAK_ALIAS("PMPI_File_get_errhandler");
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler);
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler);
#endif
/* End Prototypes */
@@ -265,8 +265,8 @@ int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsi
#endif
#endif
/* above needed for some versions of mpi.h in MPICH!! */
-MPI_File MPI_File_f2c(MPI_Fint file) MPICH_ATTR_WEAK_ALIAS("PMPI_File_f2c");
-MPI_Fint MPI_File_c2f(MPI_File file) MPICH_ATTR_WEAK_ALIAS("PMPI_File_c2f");
+MPI_File MPI_File_f2c(MPI_Fint file);
+MPI_Fint MPI_File_c2f(MPI_File file);
#ifndef HAVE_MPI_GREQUEST
diff --git a/src/mpi/romio/mpi-io/close.c b/src/mpi/romio/mpi-io/close.c
index 4b277c2..cb1df99 100644
--- a/src/mpi/romio/mpi-io/close.c
+++ b/src/mpi/romio/mpi-io/close.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_close as PMPI_File_close
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_close(MPI_File *fh) __attribute__((weak,alias("PMPI_File_close")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/delete.c b/src/mpi/romio/mpi-io/delete.c
index ed49e44..7335136 100644
--- a/src/mpi/romio/mpi-io/delete.c
+++ b/src/mpi/romio/mpi-io/delete.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_delete as PMPI_File_delete
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_delete(const char *filename, MPI_Info info) __attribute__((weak,alias("PMPI_File_delete")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/file_c2f.c b/src/mpi/romio/mpi-io/file_c2f.c
index 236cceb..4eaae9f 100644
--- a/src/mpi/romio/mpi-io/file_c2f.c
+++ b/src/mpi/romio/mpi-io/file_c2f.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_c2f as PMPI_File_c2f
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+MPI_Fint MPI_File_c2f(MPI_File fh) __attribute__((weak,alias("PMPI_File_c2f")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/file_f2c.c b/src/mpi/romio/mpi-io/file_f2c.c
index 68d89cc..b6b4896 100644
--- a/src/mpi/romio/mpi-io/file_f2c.c
+++ b/src/mpi/romio/mpi-io/file_f2c.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_f2c as PMPI_File_f2c
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+MPI_File MPI_File_f2c(MPI_Fint fh) __attribute__((weak,alias("PMPI_File_f2c")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/fsync.c b/src/mpi/romio/mpi-io/fsync.c
index 0e55ab3..d9ffe3f 100644
--- a/src/mpi/romio/mpi-io/fsync.c
+++ b/src/mpi/romio/mpi-io/fsync.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_sync as PMPI_File_sync
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_sync(MPI_File fh) __attribute__((weak,alias("PMPI_File_sync")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_amode.c b/src/mpi/romio/mpi-io/get_amode.c
index 395b034..4770c83 100644
--- a/src/mpi/romio/mpi-io/get_amode.c
+++ b/src/mpi/romio/mpi-io/get_amode.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_amode as PMPI_File_get_amode
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_amode(MPI_File fh, int *amode) __attribute__((weak,alias("PMPI_File_get_amode")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_atom.c b/src/mpi/romio/mpi-io/get_atom.c
index 37d2f8d..1a9eae1 100644
--- a/src/mpi/romio/mpi-io/get_atom.c
+++ b/src/mpi/romio/mpi-io/get_atom.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_atomicity as PMPI_File_get_atomicity
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_atomicity(MPI_File fh, int *flag) __attribute__((weak,alias("PMPI_File_get_atomicity")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_bytoff.c b/src/mpi/romio/mpi-io/get_bytoff.c
index 7c95ed8..f5cb452 100644
--- a/src/mpi/romio/mpi-io/get_bytoff.c
+++ b/src/mpi/romio/mpi-io/get_bytoff.c
@@ -17,6 +17,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_byte_offset as PMPI_File_get_byte_offset
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_byte_offset(MPI_File fh, MPI_Offset offset, MPI_Offset *disp) __attribute__((weak,alias("PMPI_File_get_byte_offset")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_errh.c b/src/mpi/romio/mpi-io/get_errh.c
index 80ee428..5a4d9ee 100644
--- a/src/mpi/romio/mpi-io/get_errh.c
+++ b/src/mpi/romio/mpi-io/get_errh.c
@@ -17,6 +17,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_errhandler as PMPI_File_get_errhandler
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_errhandler(MPI_File file, MPI_Errhandler *errhandler) __attribute__((weak,alias("PMPI_File_get_errhandler")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_extent.c b/src/mpi/romio/mpi-io/get_extent.c
index 60dcd57..31a841c 100644
--- a/src/mpi/romio/mpi-io/get_extent.c
+++ b/src/mpi/romio/mpi-io/get_extent.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_type_extent as PMPI_File_get_type_extent
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_type_extent(MPI_File fh, MPI_Datatype datatype, MPI_Aint *extent) __attribute__((weak,alias("PMPI_File_get_type_extent")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_group.c b/src/mpi/romio/mpi-io/get_group.c
index dbc6e8d..4d82ed8 100644
--- a/src/mpi/romio/mpi-io/get_group.c
+++ b/src/mpi/romio/mpi-io/get_group.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_group as PMPI_File_get_group
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_group(MPI_File fh, MPI_Group *group) __attribute__((weak,alias("PMPI_File_get_group")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_info.c b/src/mpi/romio/mpi-io/get_info.c
index 334cd58..1d0b397 100644
--- a/src/mpi/romio/mpi-io/get_info.c
+++ b/src/mpi/romio/mpi-io/get_info.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_info as PMPI_File_get_info
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_info(MPI_File fh, MPI_Info *info_used) __attribute__((weak,alias("PMPI_File_get_info")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_posn.c b/src/mpi/romio/mpi-io/get_posn.c
index 0c7a54f..49d8e49 100644
--- a/src/mpi/romio/mpi-io/get_posn.c
+++ b/src/mpi/romio/mpi-io/get_posn.c
@@ -17,6 +17,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_position as PMPI_File_get_position
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_position(MPI_File fh, MPI_Offset *offset) __attribute__((weak,alias("PMPI_File_get_position")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_posn_sh.c b/src/mpi/romio/mpi-io/get_posn_sh.c
index 051ea65..c6172c9 100644
--- a/src/mpi/romio/mpi-io/get_posn_sh.c
+++ b/src/mpi/romio/mpi-io/get_posn_sh.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_position_shared as PMPI_File_get_position_shared
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_position_shared(MPI_File fh, MPI_Offset *offset) __attribute__((weak,alias("PMPI_File_get_position_shared")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_size.c b/src/mpi/romio/mpi-io/get_size.c
index 1582380..d7836c2 100644
--- a/src/mpi/romio/mpi-io/get_size.c
+++ b/src/mpi/romio/mpi-io/get_size.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_size as PMPI_File_get_size
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_size(MPI_File fh, MPI_Offset *size) __attribute__((weak,alias("PMPI_File_get_size")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/get_view.c b/src/mpi/romio/mpi-io/get_view.c
index 8829090..f2d2889 100644
--- a/src/mpi/romio/mpi-io/get_view.c
+++ b/src/mpi/romio/mpi-io/get_view.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_get_view as PMPI_File_get_view
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype,
+ char *datarep) __attribute__((weak,alias("PMPI_File_get_view")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iread.c b/src/mpi/romio/mpi-io/iread.c
index 861e7eb..beca4aa 100644
--- a/src/mpi/romio/mpi-io/iread.c
+++ b/src/mpi/romio/mpi-io/iread.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_iread as PMPI_File_iread
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request)
+ __attribute__((weak,alias("PMPI_File_iread")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iread_at.c b/src/mpi/romio/mpi-io/iread_at.c
index 8e9b0b2..29bda84 100644
--- a/src/mpi/romio/mpi-io/iread_at.c
+++ b/src/mpi/romio/mpi-io/iread_at.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_iread_at as PMPI_File_iread_at
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
+ MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iread_at")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iread_sh.c b/src/mpi/romio/mpi-io/iread_sh.c
index a9564ed..b671346 100644
--- a/src/mpi/romio/mpi-io/iread_sh.c
+++ b/src/mpi/romio/mpi-io/iread_sh.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_iread_shared as PMPI_File_iread_shared
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iread_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+ MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iread_shared")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iwrite.c b/src/mpi/romio/mpi-io/iwrite.c
index fa50fbe..cd4f69f 100644
--- a/src/mpi/romio/mpi-io/iwrite.c
+++ b/src/mpi/romio/mpi-io/iwrite.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_iwrite as PMPI_File_iwrite
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iwrite(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+ MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iwrite")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iwrite_at.c b/src/mpi/romio/mpi-io/iwrite_at.c
index 05f0b39..10862bd 100644
--- a/src/mpi/romio/mpi-io/iwrite_at.c
+++ b/src/mpi/romio/mpi-io/iwrite_at.c
@@ -16,6 +16,10 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_iwrite_at as PMPI_File_iwrite_at
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iwrite_at(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+ MPI_Datatype datatype, MPIO_Request *request)
+ __attribute__((weak,alias("PMPI_File_iwrite_at")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/iwrite_sh.c b/src/mpi/romio/mpi-io/iwrite_sh.c
index 4221d33..c436221 100644
--- a/src/mpi/romio/mpi-io/iwrite_sh.c
+++ b/src/mpi/romio/mpi-io/iwrite_sh.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_iwrite_shared as PMPI_File_iwrite_shared
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_iwrite_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+ MPIO_Request *request) __attribute__((weak,alias("PMPI_File_iwrite_shared")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/open.c b/src/mpi/romio/mpi-io/open.c
index 2d72dae..27a3e84 100644
--- a/src/mpi/romio/mpi-io/open.c
+++ b/src/mpi/romio/mpi-io/open.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_open as PMPI_File_open
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh) __attribute__((weak,alias("PMPI_File_open")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/prealloc.c b/src/mpi/romio/mpi-io/prealloc.c
index 9e5d2c6..3853f8d 100644
--- a/src/mpi/romio/mpi-io/prealloc.c
+++ b/src/mpi/romio/mpi-io/prealloc.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_preallocate as PMPI_File_preallocate
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_preallocate(MPI_File fh, MPI_Offset size) __attribute__((weak,alias("PMPI_File_preallocate")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/rd_atallb.c b/src/mpi/romio/mpi-io/rd_atallb.c
index 44f54e4..a7120b3 100644
--- a/src/mpi/romio/mpi-io/rd_atallb.c
+++ b/src/mpi/romio/mpi-io/rd_atallb.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_at_all_begin as PMPI_File_read_at_all_begin
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at_all_begin(MPI_File fh, MPI_Offset offset, void *buf, int count,
+ MPI_Datatype datatype) __attribute__((weak,alias("PMPI_File_read_at_all_begin")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/rd_atalle.c b/src/mpi/romio/mpi-io/rd_atalle.c
index 0715e6a..207d5ba 100644
--- a/src/mpi/romio/mpi-io/rd_atalle.c
+++ b/src/mpi/romio/mpi-io/rd_atalle.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_at_all_end as PMPI_File_read_at_all_end
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at_all_end(MPI_File fh, void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_at_all_end")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read.c b/src/mpi/romio/mpi-io/read.c
index d531a47..ff109bd 100644
--- a/src/mpi/romio/mpi-io/read.c
+++ b/src/mpi/romio/mpi-io/read.c
@@ -15,6 +15,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read as PMPI_File_read
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
+ __attribute__((weak,alias("PMPI_File_read")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_all.c b/src/mpi/romio/mpi-io/read_all.c
index 641d58d..72ea518 100644
--- a/src/mpi/romio/mpi-io/read_all.c
+++ b/src/mpi/romio/mpi-io/read_all.c
@@ -15,6 +15,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_all as PMPI_File_read_all
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status)
+ __attribute__((weak,alias("PMPI_File_read_all")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_allb.c b/src/mpi/romio/mpi-io/read_allb.c
index 743424d..3f0fd90 100644
--- a/src/mpi/romio/mpi-io/read_allb.c
+++ b/src/mpi/romio/mpi-io/read_allb.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_all_begin as PMPI_File_read_all_begin
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
+ __attribute__((weak,alias("PMPI_File_read_all_begin")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_alle.c b/src/mpi/romio/mpi-io/read_alle.c
index 820cab6..a86c465 100644
--- a/src/mpi/romio/mpi-io/read_alle.c
+++ b/src/mpi/romio/mpi-io/read_alle.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_all_end as PMPI_File_read_all_end
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_all_end")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_at.c b/src/mpi/romio/mpi-io/read_at.c
index 72e593d..53dc8c4 100644
--- a/src/mpi/romio/mpi-io/read_at.c
+++ b/src/mpi/romio/mpi-io/read_at.c
@@ -15,6 +15,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_at as PMPI_File_read_at
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_at")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_atall.c b/src/mpi/romio/mpi-io/read_atall.c
index 13932b1..2bed66b 100644
--- a/src/mpi/romio/mpi-io/read_atall.c
+++ b/src/mpi/romio/mpi-io/read_atall.c
@@ -16,6 +16,10 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_at_all as PMPI_File_read_at_all
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void * buf, int count,
+ MPI_Datatype datatype, MPI_Status *status)
+ __attribute__((weak,alias("PMPI_File_read_at_all")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_ord.c b/src/mpi/romio/mpi-io/read_ord.c
index 5dc5abd..5bfe77c 100644
--- a/src/mpi/romio/mpi-io/read_ord.c
+++ b/src/mpi/romio/mpi-io/read_ord.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_ordered as PMPI_File_read_ordered
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_ordered(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_ordered")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_ordb.c b/src/mpi/romio/mpi-io/read_ordb.c
index 5dd9772..32971f1 100644
--- a/src/mpi/romio/mpi-io/read_ordb.c
+++ b/src/mpi/romio/mpi-io/read_ordb.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_ordered_begin as PMPI_File_read_ordered_begin
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_ordered_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype)
+ __attribute__((weak,alias("PMPI_File_read_ordered_begin")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_orde.c b/src/mpi/romio/mpi-io/read_orde.c
index 4d2db52..5bf853e 100644
--- a/src/mpi/romio/mpi-io/read_orde.c
+++ b/src/mpi/romio/mpi-io/read_orde.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_ordered_end as PMPI_File_read_ordered_end
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_ordered_end(MPI_File fh, void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_ordered_end")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/read_sh.c b/src/mpi/romio/mpi-io/read_sh.c
index 952180e..8f2ed6d 100644
--- a/src/mpi/romio/mpi-io/read_sh.c
+++ b/src/mpi/romio/mpi-io/read_sh.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_read_shared as PMPI_File_read_shared
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_read_shared(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_File_read_shared")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/register_datarep.c b/src/mpi/romio/mpi-io/register_datarep.c
index c2dba7b..b6f1d68 100644
--- a/src/mpi/romio/mpi-io/register_datarep.c
+++ b/src/mpi/romio/mpi-io/register_datarep.c
@@ -16,6 +16,10 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Register_datarep as PMPI_Register_datarep
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Register_datarep(const char *datarep, MPI_Datarep_conversion_function *read_conversion_fn,
+ MPI_Datarep_conversion_function *write_conversion_fn,
+ MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) __attribute__((weak,alias("PMPI_Register_datarep")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/seek.c b/src/mpi/romio/mpi-io/seek.c
index a67c119..c4ed20f 100644
--- a/src/mpi/romio/mpi-io/seek.c
+++ b/src/mpi/romio/mpi-io/seek.c
@@ -17,6 +17,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_seek as PMPI_File_seek
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_seek(MPI_File fh, MPI_Offset offset, int whence) __attribute__((weak,alias("PMPI_File_seek")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/seek_sh.c b/src/mpi/romio/mpi-io/seek_sh.c
index d104be5..772852c 100644
--- a/src/mpi/romio/mpi-io/seek_sh.c
+++ b/src/mpi/romio/mpi-io/seek_sh.c
@@ -15,6 +15,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_seek_shared as PMPI_File_seek_shared
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_seek_shared(MPI_File fh, MPI_Offset offset, int whence) __attribute__((weak,alias("PMPI_File_seek_shared")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_atom.c b/src/mpi/romio/mpi-io/set_atom.c
index 55be27f..2012116 100644
--- a/src/mpi/romio/mpi-io/set_atom.c
+++ b/src/mpi/romio/mpi-io/set_atom.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_set_atomicity as PMPI_File_set_atomicity
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_atomicity(MPI_File fh, int flag) __attribute__((weak,alias("PMPI_File_set_atomicity")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_errh.c b/src/mpi/romio/mpi-io/set_errh.c
index 3e2d879..793f480 100644
--- a/src/mpi/romio/mpi-io/set_errh.c
+++ b/src/mpi/romio/mpi-io/set_errh.c
@@ -17,6 +17,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_set_errhandler as PMPI_File_set_errhandler
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_errhandler(MPI_File file, MPI_Errhandler errhandler) __attribute__((weak,alias("PMPI_File_set_errhandler")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_info.c b/src/mpi/romio/mpi-io/set_info.c
index 13437cc..1d95f2c 100644
--- a/src/mpi/romio/mpi-io/set_info.c
+++ b/src/mpi/romio/mpi-io/set_info.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_set_info as PMPI_File_set_info
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_info(MPI_File fh, MPI_Info info) __attribute__((weak,alias("PMPI_File_set_info")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_size.c b/src/mpi/romio/mpi-io/set_size.c
index b5c4e93..74c3f6c 100644
--- a/src/mpi/romio/mpi-io/set_size.c
+++ b/src/mpi/romio/mpi-io/set_size.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_set_size as PMPI_File_set_size
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_size(MPI_File fh, MPI_Offset size) __attribute__((weak,alias("PMPI_File_set_size")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/set_view.c b/src/mpi/romio/mpi-io/set_view.c
index 482b9ac..7f871c7 100644
--- a/src/mpi/romio/mpi-io/set_view.c
+++ b/src/mpi/romio/mpi-io/set_view.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_set_view as PMPI_File_set_view
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype,
+ const char *datarep, MPI_Info info) __attribute__((weak,alias("PMPI_File_set_view")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/wr_atallb.c b/src/mpi/romio/mpi-io/wr_atallb.c
index 17de197..83eb28b 100644
--- a/src/mpi/romio/mpi-io/wr_atallb.c
+++ b/src/mpi/romio/mpi-io/wr_atallb.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_at_all_begin as PMPI_File_write_at_all_begin
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at_all_begin(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+ MPI_Datatype datatype) __attribute__((weak,alias("PMPI_File_write_at_all_begin")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/wr_atalle.c b/src/mpi/romio/mpi-io/wr_atalle.c
index 50b4732..fa2ab51 100644
--- a/src/mpi/romio/mpi-io/wr_atalle.c
+++ b/src/mpi/romio/mpi-io/wr_atalle.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_at_all_end as PMPI_File_write_at_all_end
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at_all_end(MPI_File fh, const void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_at_all_end")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write.c b/src/mpi/romio/mpi-io/write.c
index 2544db3..899991d 100644
--- a/src/mpi/romio/mpi-io/write.c
+++ b/src/mpi/romio/mpi-io/write.c
@@ -15,6 +15,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write as PMPI_File_write
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_File_write")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_all.c b/src/mpi/romio/mpi-io/write_all.c
index f4307bb..ab77a95 100644
--- a/src/mpi/romio/mpi-io/write_all.c
+++ b/src/mpi/romio/mpi-io/write_all.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_all as PMPI_File_write_all
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_all(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_all")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_allb.c b/src/mpi/romio/mpi-io/write_allb.c
index adeeeee..4678477 100644
--- a/src/mpi/romio/mpi-io/write_allb.c
+++ b/src/mpi/romio/mpi-io/write_allb.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_all_begin as PMPI_File_write_all_begin
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_all_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
+ __attribute__((weak,alias("PMPI_File_write_all_begin")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_alle.c b/src/mpi/romio/mpi-io/write_alle.c
index 28972f1..8b999a1 100644
--- a/src/mpi/romio/mpi-io/write_alle.c
+++ b/src/mpi/romio/mpi-io/write_alle.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_all_end as PMPI_File_write_all_end
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_all_end(MPI_File fh, const void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_all_end")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_at.c b/src/mpi/romio/mpi-io/write_at.c
index db1066d..4362322 100644
--- a/src/mpi/romio/mpi-io/write_at.c
+++ b/src/mpi/romio/mpi-io/write_at.c
@@ -15,6 +15,10 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_at as PMPI_File_write_at
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at(MPI_File fh, MPI_Offset offset, const void * buf, int count,
+ MPI_Datatype datatype, MPI_Status *status)
+ __attribute__((weak,alias("PMPI_File_write_at")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_atall.c b/src/mpi/romio/mpi-io/write_atall.c
index 8f8328d..6f815cd 100644
--- a/src/mpi/romio/mpi-io/write_atall.c
+++ b/src/mpi/romio/mpi-io/write_atall.c
@@ -16,6 +16,10 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_at_all as PMPI_File_write_at_all
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, const void *buf, int count,
+ MPI_Datatype datatype, MPI_Status *status)
+ __attribute__((weak,alias("PMPI_File_write_at_all")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_ord.c b/src/mpi/romio/mpi-io/write_ord.c
index 3bd45ee..60c14f3 100644
--- a/src/mpi/romio/mpi-io/write_ord.c
+++ b/src/mpi/romio/mpi-io/write_ord.c
@@ -17,6 +17,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_ordered as PMPI_File_write_ordered
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_ordered(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_ordered")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_ordb.c b/src/mpi/romio/mpi-io/write_ordb.c
index 1f16f45..77bbab0 100644
--- a/src/mpi/romio/mpi-io/write_ordb.c
+++ b/src/mpi/romio/mpi-io/write_ordb.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_ordered_begin as PMPI_File_write_ordered_begin
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_ordered_begin(MPI_File fh, const void *buf, int count, MPI_Datatype datatype)
+ __attribute__((weak,alias("PMPI_File_write_ordered_begin")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_orde.c b/src/mpi/romio/mpi-io/write_orde.c
index c8db36c..a0a6eea 100644
--- a/src/mpi/romio/mpi-io/write_orde.c
+++ b/src/mpi/romio/mpi-io/write_orde.c
@@ -16,6 +16,8 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_ordered_end as PMPI_File_write_ordered_end
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_ordered_end(MPI_File fh, const void *buf, MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_ordered_end")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/romio/mpi-io/write_sh.c b/src/mpi/romio/mpi-io/write_sh.c
index 622dd27..fc2b7b2 100644
--- a/src/mpi/romio/mpi-io/write_sh.c
+++ b/src/mpi/romio/mpi-io/write_sh.c
@@ -16,6 +16,9 @@
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_File_write_shared as PMPI_File_write_shared
/* end of weak pragmas */
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_File_write_shared(MPI_File fh, const void *buf, int count, MPI_Datatype datatype,
+ MPI_Status *status) __attribute__((weak,alias("PMPI_File_write_shared")));
#endif
/* Include mapping from MPI->PMPI */
diff --git a/src/mpi/spawn/close_port.c b/src/mpi/spawn/close_port.c
index 209a09a..8f23382 100644
--- a/src/mpi/spawn/close_port.c
+++ b/src/mpi/spawn/close_port.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Close_port MPI_Close_port
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Close_port as PMPI_Close_port
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Close_port(const char *port_name) __attribute__((weak,alias("PMPI_Close_port")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/comm_accept.c b/src/mpi/spawn/comm_accept.c
index d28d31a..dccf247 100644
--- a/src/mpi/spawn/comm_accept.c
+++ b/src/mpi/spawn/comm_accept.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_accept MPI_Comm_accept
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_accept as PMPI_Comm_accept
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_accept(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
+ MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_accept")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/comm_connect.c b/src/mpi/spawn/comm_connect.c
index a4da953..141f3b4 100644
--- a/src/mpi/spawn/comm_connect.c
+++ b/src/mpi/spawn/comm_connect.c
@@ -13,6 +13,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_connect MPI_Comm_connect
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_connect as PMPI_Comm_connect
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_connect(const char *port_name, MPI_Info info, int root, MPI_Comm comm,
+ MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Comm_connect")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/comm_disconnect.c b/src/mpi/spawn/comm_disconnect.c
index d3f932d..8a50774 100644
--- a/src/mpi/spawn/comm_disconnect.c
+++ b/src/mpi/spawn/comm_disconnect.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_disconnect MPI_Comm_disconnect
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_disconnect as PMPI_Comm_disconnect
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_disconnect(MPI_Comm *comm) __attribute__((weak,alias("PMPI_Comm_disconnect")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/comm_get_parent.c b/src/mpi/spawn/comm_get_parent.c
index b16a624..b851a96 100644
--- a/src/mpi/spawn/comm_get_parent.c
+++ b/src/mpi/spawn/comm_get_parent.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_get_parent MPI_Comm_get_parent
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_get_parent as PMPI_Comm_get_parent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_get_parent(MPI_Comm *parent) __attribute__((weak,alias("PMPI_Comm_get_parent")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/comm_join.c b/src/mpi/spawn/comm_join.c
index bf00d7c..2bbccf6 100644
--- a/src/mpi/spawn/comm_join.c
+++ b/src/mpi/spawn/comm_join.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_join MPI_Comm_join
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_join as PMPI_Comm_join
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_join(int fd, MPI_Comm *intercomm) __attribute__((weak,alias("PMPI_Comm_join")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/comm_spawn.c b/src/mpi/spawn/comm_spawn.c
index 9c5bf9d..49c307d 100644
--- a/src/mpi/spawn/comm_spawn.c
+++ b/src/mpi/spawn/comm_spawn.c
@@ -13,6 +13,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_spawn MPI_Comm_spawn
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_spawn as PMPI_Comm_spawn
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_spawn(const char *command, char *argv[], int maxprocs, MPI_Info info, int root,
+ MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) __attribute__((weak,alias("PMPI_Comm_spawn")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/comm_spawn_multiple.c b/src/mpi/spawn/comm_spawn_multiple.c
index ac5ff47..4d22ee4 100644
--- a/src/mpi/spawn/comm_spawn_multiple.c
+++ b/src/mpi/spawn/comm_spawn_multiple.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Comm_spawn_multiple MPI_Comm_spawn_multiple
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Comm_spawn_multiple as PMPI_Comm_spawn_multiple
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Comm_spawn_multiple(int count, char *array_of_commands[], char **array_of_argv[],
+ const int array_of_maxprocs[], const MPI_Info array_of_info[],
+ int root, MPI_Comm comm, MPI_Comm *intercomm, int array_of_errcodes[]) __attribute__((weak,alias("PMPI_Comm_spawn_multiple")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/lookup_name.c b/src/mpi/spawn/lookup_name.c
index abb5ebc..8204688 100644
--- a/src/mpi/spawn/lookup_name.c
+++ b/src/mpi/spawn/lookup_name.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Lookup_name MPI_Lookup_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Lookup_name as PMPI_Lookup_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Lookup_name(const char *service_name, MPI_Info info, char *port_name) __attribute__((weak,alias("PMPI_Lookup_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/open_port.c b/src/mpi/spawn/open_port.c
index 486d070..37699d1 100644
--- a/src/mpi/spawn/open_port.c
+++ b/src/mpi/spawn/open_port.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Open_port MPI_Open_port
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Open_port as PMPI_Open_port
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Open_port(MPI_Info info, char *port_name) __attribute__((weak,alias("PMPI_Open_port")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/publish_name.c b/src/mpi/spawn/publish_name.c
index ce6157a..c804caa 100644
--- a/src/mpi/spawn/publish_name.c
+++ b/src/mpi/spawn/publish_name.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Publish_name MPI_Publish_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Publish_name as PMPI_Publish_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Publish_name(const char *service_name, MPI_Info info, const char *port_name) __attribute__((weak,alias("PMPI_Publish_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/spawn/unpublish_name.c b/src/mpi/spawn/unpublish_name.c
index 2074741..fba560e 100644
--- a/src/mpi/spawn/unpublish_name.c
+++ b/src/mpi/spawn/unpublish_name.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Unpublish_name MPI_Unpublish_name
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Unpublish_name as PMPI_Unpublish_name
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Unpublish_name(const char *service_name, MPI_Info info, const char *port_name) __attribute__((weak,alias("PMPI_Unpublish_name")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/timer/wtick.c b/src/mpi/timer/wtick.c
index da61d58..1aff3c2 100644
--- a/src/mpi/timer/wtick.c
+++ b/src/mpi/timer/wtick.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Wtick MPI_Wtick
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Wtick as PMPI_Wtick
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+double MPI_Wtick(void) __attribute__((weak,alias("PMPI_Wtick")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/timer/wtime.c b/src/mpi/timer/wtime.c
index c5ab6ed..a0338f0 100644
--- a/src/mpi/timer/wtime.c
+++ b/src/mpi/timer/wtime.c
@@ -12,6 +12,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Wtime MPI_Wtime
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Wtime as PMPI_Wtime
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+double MPI_Wtime(void) __attribute__((weak,alias("PMPI_Wtime")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cart_coords.c b/src/mpi/topo/cart_coords.c
index 948b9a6..6b3a3c5 100644
--- a/src/mpi/topo/cart_coords.c
+++ b/src/mpi/topo/cart_coords.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cart_coords MPI_Cart_coords
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cart_coords as PMPI_Cart_coords
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]) __attribute__((weak,alias("PMPI_Cart_coords")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cart_create.c b/src/mpi/topo/cart_create.c
index 8fab4ae..494557a 100644
--- a/src/mpi/topo/cart_create.c
+++ b/src/mpi/topo/cart_create.c
@@ -15,6 +15,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Cart_create MPI_Cart_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cart_create as PMPI_Cart_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_create(MPI_Comm comm_old, int ndims, const int dims[], const int periods[],
+ int reorder, MPI_Comm *comm_cart) __attribute__((weak,alias("PMPI_Cart_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cart_get.c b/src/mpi/topo/cart_get.c
index 96eab9c..8b0c95b 100644
--- a/src/mpi/topo/cart_get.c
+++ b/src/mpi/topo/cart_get.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cart_get MPI_Cart_get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cart_get as PMPI_Cart_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_get(MPI_Comm comm, int maxdims, int dims[], int periods[], int coords[]) __attribute__((weak,alias("PMPI_Cart_get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cart_map.c b/src/mpi/topo/cart_map.c
index 641b36c..000df13 100644
--- a/src/mpi/topo/cart_map.c
+++ b/src/mpi/topo/cart_map.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cart_map MPI_Cart_map
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cart_map as PMPI_Cart_map
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_map(MPI_Comm comm, int ndims, const int dims[], const int periods[], int *newrank) __attribute__((weak,alias("PMPI_Cart_map")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cart_rank.c b/src/mpi/topo/cart_rank.c
index 2984045..c730bb2 100644
--- a/src/mpi/topo/cart_rank.c
+++ b/src/mpi/topo/cart_rank.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cart_rank MPI_Cart_rank
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cart_rank as PMPI_Cart_rank
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_rank(MPI_Comm comm, const int coords[], int *rank) __attribute__((weak,alias("PMPI_Cart_rank")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cart_shift.c b/src/mpi/topo/cart_shift.c
index 723c8df..66d4007 100644
--- a/src/mpi/topo/cart_shift.c
+++ b/src/mpi/topo/cart_shift.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cart_shift MPI_Cart_shift
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cart_shift as PMPI_Cart_shift
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) __attribute__((weak,alias("PMPI_Cart_shift")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cart_sub.c b/src/mpi/topo/cart_sub.c
index 8baf90d..551ed89 100644
--- a/src/mpi/topo/cart_sub.c
+++ b/src/mpi/topo/cart_sub.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cart_sub MPI_Cart_sub
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cart_sub as PMPI_Cart_sub
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm) __attribute__((weak,alias("PMPI_Cart_sub")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/cartdim_get.c b/src/mpi/topo/cartdim_get.c
index 0119d20..7f28efb 100644
--- a/src/mpi/topo/cartdim_get.c
+++ b/src/mpi/topo/cartdim_get.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Cartdim_get MPI_Cartdim_get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Cartdim_get as PMPI_Cartdim_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Cartdim_get(MPI_Comm comm, int *ndims) __attribute__((weak,alias("PMPI_Cartdim_get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/dims_create.c b/src/mpi/topo/dims_create.c
index 0a04ac0..ba9ae91 100644
--- a/src/mpi/topo/dims_create.c
+++ b/src/mpi/topo/dims_create.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Dims_create MPI_Dims_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Dims_create as PMPI_Dims_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dims_create(int nnodes, int ndims, int dims[]) __attribute__((weak,alias("PMPI_Dims_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/dist_gr_create.c b/src/mpi/topo/dist_gr_create.c
index 76e13ba..1252087 100644
--- a/src/mpi/topo/dist_gr_create.c
+++ b/src/mpi/topo/dist_gr_create.c
@@ -15,6 +15,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Dist_graph_create MPI_Dist_graph_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Dist_graph_create as PMPI_Dist_graph_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_create(MPI_Comm comm_old, int n, const int sources[], const int degrees[],
+ const int destinations[], const int weights[], MPI_Info info,
+ int reorder, MPI_Comm *comm_dist_graph) __attribute__((weak,alias("PMPI_Dist_graph_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/dist_gr_create_adj.c b/src/mpi/topo/dist_gr_create_adj.c
index b5c84bc..215c18a 100644
--- a/src/mpi/topo/dist_gr_create_adj.c
+++ b/src/mpi/topo/dist_gr_create_adj.c
@@ -15,6 +15,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Dist_graph_create_adjacent MPI_Dist_graph_create_adjacent
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Dist_graph_create_adjacent as PMPI_Dist_graph_create_adjacent
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, const int sources[],
+ const int sourceweights[], int outdegree,
+ const int destinations[], const int destweights[],
+ MPI_Info info, int reorder, MPI_Comm *comm_dist_graph) __attribute__((weak,alias("PMPI_Dist_graph_create_adjacent")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/dist_gr_neighb.c b/src/mpi/topo/dist_gr_neighb.c
index 56d2c72..d9cb333 100644
--- a/src/mpi/topo/dist_gr_neighb.c
+++ b/src/mpi/topo/dist_gr_neighb.c
@@ -15,6 +15,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Dist_graph_neighbors MPI_Dist_graph_neighbors
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Dist_graph_neighbors as PMPI_Dist_graph_neighbors
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_neighbors(MPI_Comm comm, int maxindegree, int sources[], int sourceweights[],
+ int maxoutdegree, int destinations[], int destweights[]) __attribute__((weak,alias("PMPI_Dist_graph_neighbors")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/dist_gr_neighb_count.c b/src/mpi/topo/dist_gr_neighb_count.c
index 78b4488..b0da3af 100644
--- a/src/mpi/topo/dist_gr_neighb_count.c
+++ b/src/mpi/topo/dist_gr_neighb_count.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Dist_graph_neighbors_count MPI_Dist_graph_neighbors_count
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Dist_graph_neighbors_count as PMPI_Dist_graph_neighbors_count
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Dist_graph_neighbors_count(MPI_Comm comm, int *indegree, int *outdegree, int *weighted) __attribute__((weak,alias("PMPI_Dist_graph_neighbors_count")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/graph_get.c b/src/mpi/topo/graph_get.c
index 79a48f4..7b8d97a 100644
--- a/src/mpi/topo/graph_get.c
+++ b/src/mpi/topo/graph_get.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Graph_get MPI_Graph_get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Graph_get as PMPI_Graph_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int indx[], int edges[]) __attribute__((weak,alias("PMPI_Graph_get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/graph_map.c b/src/mpi/topo/graph_map.c
index b693bd4..a518e17 100644
--- a/src/mpi/topo/graph_map.c
+++ b/src/mpi/topo/graph_map.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Graph_map MPI_Graph_map
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Graph_map as PMPI_Graph_map
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_map(MPI_Comm comm, int nnodes, const int indx[], const int edges[], int *newrank) __attribute__((weak,alias("PMPI_Graph_map")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/graph_nbr.c b/src/mpi/topo/graph_nbr.c
index 2e0fd56..2b0aaa1 100644
--- a/src/mpi/topo/graph_nbr.c
+++ b/src/mpi/topo/graph_nbr.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Graph_neighbors MPI_Graph_neighbors
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Graph_neighbors as PMPI_Graph_neighbors
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[]) __attribute__((weak,alias("PMPI_Graph_neighbors")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/graphcreate.c b/src/mpi/topo/graphcreate.c
index ed70c1f..4cb4ff5 100644
--- a/src/mpi/topo/graphcreate.c
+++ b/src/mpi/topo/graphcreate.c
@@ -15,6 +15,9 @@
#pragma _HP_SECONDARY_DEF PMPI_Graph_create MPI_Graph_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Graph_create as PMPI_Graph_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int indx[], const int edges[],
+ int reorder, MPI_Comm *comm_graph) __attribute__((weak,alias("PMPI_Graph_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/graphdimsget.c b/src/mpi/topo/graphdimsget.c
index 08f3797..cdf7e00 100644
--- a/src/mpi/topo/graphdimsget.c
+++ b/src/mpi/topo/graphdimsget.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Graphdims_get MPI_Graphdims_get
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Graphdims_get as PMPI_Graphdims_get
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges) __attribute__((weak,alias("PMPI_Graphdims_get")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/graphnbrcnt.c b/src/mpi/topo/graphnbrcnt.c
index 7c227b8..c601520 100644
--- a/src/mpi/topo/graphnbrcnt.c
+++ b/src/mpi/topo/graphnbrcnt.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Graph_neighbors_count MPI_Graph_neighbors_count
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Graph_neighbors_count as PMPI_Graph_neighbors_count
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) __attribute__((weak,alias("PMPI_Graph_neighbors_count")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/inhb_allgather.c b/src/mpi/topo/inhb_allgather.c
index e911408..8729486 100644
--- a/src/mpi/topo/inhb_allgather.c
+++ b/src/mpi/topo/inhb_allgather.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Ineighbor_allgather MPI_Ineighbor_allgather
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ineighbor_allgather as PMPI_Ineighbor_allgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ineighbor_allgather")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/inhb_allgatherv.c b/src/mpi/topo/inhb_allgatherv.c
index a8f663f..5ea2111 100644
--- a/src/mpi/topo/inhb_allgatherv.c
+++ b/src/mpi/topo/inhb_allgatherv.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Ineighbor_allgatherv MPI_Ineighbor_allgatherv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ineighbor_allgatherv as PMPI_Ineighbor_allgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ineighbor_allgatherv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/inhb_alltoall.c b/src/mpi/topo/inhb_alltoall.c
index 1bc1d0e..9d94772 100644
--- a/src/mpi/topo/inhb_alltoall.c
+++ b/src/mpi/topo/inhb_alltoall.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Ineighbor_alltoall MPI_Ineighbor_alltoall
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ineighbor_alltoall as PMPI_Ineighbor_alltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ineighbor_alltoall")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/inhb_alltoallv.c b/src/mpi/topo/inhb_alltoallv.c
index 0066fa7..330fdf4 100644
--- a/src/mpi/topo/inhb_alltoallv.c
+++ b/src/mpi/topo/inhb_alltoallv.c
@@ -14,6 +14,12 @@
#pragma _HP_SECONDARY_DEF PMPI_Ineighbor_alltoallv MPI_Ineighbor_alltoallv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ineighbor_alltoallv as PMPI_Ineighbor_alltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm,
+ MPI_Request *request)
+ __attribute__((weak,alias("PMPI_Ineighbor_alltoallv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/inhb_alltoallw.c b/src/mpi/topo/inhb_alltoallw.c
index d3ffba4..1d0dc2f 100644
--- a/src/mpi/topo/inhb_alltoallw.c
+++ b/src/mpi/topo/inhb_alltoallw.c
@@ -14,6 +14,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Ineighbor_alltoallw MPI_Ineighbor_alltoallw
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Ineighbor_alltoallw as PMPI_Ineighbor_alltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Ineighbor_alltoallw(const void *sendbuf, const int sendcounts[],
+ const MPI_Aint sdispls[], const MPI_Datatype sendtypes[],
+ void *recvbuf, const int recvcounts[], const MPI_Aint rdispls[],
+ const MPI_Datatype recvtypes[], MPI_Comm comm, MPI_Request *request) __attribute__((weak,alias("PMPI_Ineighbor_alltoallw")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/nhb_allgather.c b/src/mpi/topo/nhb_allgather.c
index 32c031a..2d0c91d 100644
--- a/src/mpi/topo/nhb_allgather.c
+++ b/src/mpi/topo/nhb_allgather.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Neighbor_allgather MPI_Neighbor_allgather
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Neighbor_allgather as PMPI_Neighbor_allgather
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Neighbor_allgather")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/nhb_allgatherv.c b/src/mpi/topo/nhb_allgatherv.c
index 1800b5f..2b91abb 100644
--- a/src/mpi/topo/nhb_allgatherv.c
+++ b/src/mpi/topo/nhb_allgatherv.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Neighbor_allgatherv MPI_Neighbor_allgatherv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Neighbor_allgatherv as PMPI_Neighbor_allgatherv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int recvcounts[], const int displs[],
+ MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Neighbor_allgatherv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/nhb_alltoall.c b/src/mpi/topo/nhb_alltoall.c
index 13b4be9..b5c9520 100644
--- a/src/mpi/topo/nhb_alltoall.c
+++ b/src/mpi/topo/nhb_alltoall.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Neighbor_alltoall MPI_Neighbor_alltoall
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Neighbor_alltoall as PMPI_Neighbor_alltoall
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Neighbor_alltoall")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/nhb_alltoallv.c b/src/mpi/topo/nhb_alltoallv.c
index da8b6f7..9451ba1 100644
--- a/src/mpi/topo/nhb_alltoallv.c
+++ b/src/mpi/topo/nhb_alltoallv.c
@@ -13,6 +13,11 @@
#pragma _HP_SECONDARY_DEF PMPI_Neighbor_alltoallv MPI_Neighbor_alltoallv
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Neighbor_alltoallv as PMPI_Neighbor_alltoallv
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[],
+ MPI_Datatype sendtype, void *recvbuf, const int recvcounts[],
+ const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
+ __attribute__((weak,alias("PMPI_Neighbor_alltoallv")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/nhb_alltoallw.c b/src/mpi/topo/nhb_alltoallw.c
index cba1ff8..9ebe2ce 100644
--- a/src/mpi/topo/nhb_alltoallw.c
+++ b/src/mpi/topo/nhb_alltoallw.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_Neighbor_alltoallw MPI_Neighbor_alltoallw
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Neighbor_alltoallw as PMPI_Neighbor_alltoallw
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Neighbor_alltoallw(const void *sendbuf, const int sendcounts[], const MPI_Aint sdispls[],
+ const MPI_Datatype sendtypes[], void *recvbuf, const int recvcounts[],
+ const MPI_Aint rdispls[], const MPI_Datatype recvtypes[], MPI_Comm comm) __attribute__((weak,alias("PMPI_Neighbor_alltoallw")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi/topo/topo_test.c b/src/mpi/topo/topo_test.c
index 952a1b5..e9f1a6c 100644
--- a/src/mpi/topo/topo_test.c
+++ b/src/mpi/topo/topo_test.c
@@ -15,6 +15,8 @@
#pragma _HP_SECONDARY_DEF PMPI_Topo_test MPI_Topo_test
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_Topo_test as PMPI_Topo_test
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_Topo_test(MPI_Comm comm, int *status) __attribute__((weak,alias("PMPI_Topo_test")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cat_changed.c b/src/mpi_t/cat_changed.c
index 27f8746..2ca22fc 100644
--- a/src/mpi_t/cat_changed.c
+++ b/src/mpi_t/cat_changed.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_category_changed MPI_T_category_changed
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_category_changed as PMPI_T_category_changed
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_changed(int *stamp) __attribute__((weak,alias("PMPI_T_category_changed")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cat_get_categories.c b/src/mpi_t/cat_get_categories.c
index fae2981..eaf94a3 100644
--- a/src/mpi_t/cat_get_categories.c
+++ b/src/mpi_t/cat_get_categories.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_category_get_categories MPI_T_category_get_categories
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_category_get_categories as PMPI_T_category_get_categories
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_categories(int cat_index, int len, int indices[]) __attribute__((weak,alias("PMPI_T_category_get_categories")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cat_get_cvars.c b/src/mpi_t/cat_get_cvars.c
index 61450f4..0bb525f 100644
--- a/src/mpi_t/cat_get_cvars.c
+++ b/src/mpi_t/cat_get_cvars.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_category_get_cvars MPI_T_category_get_cvars
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_category_get_cvars as PMPI_T_category_get_cvars
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_cvars(int cat_index, int len, int indices[]) __attribute__((weak,alias("PMPI_T_category_get_cvars")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cat_get_info.c b/src/mpi_t/cat_get_info.c
index cf31801..782cbe5 100644
--- a/src/mpi_t/cat_get_info.c
+++ b/src/mpi_t/cat_get_info.c
@@ -13,6 +13,9 @@
#pragma _HP_SECONDARY_DEF PMPI_T_category_get_info MPI_T_category_get_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_category_get_info as PMPI_T_category_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_info(int cat_index, char *name, int *name_len, char *desc, int *desc_len,
+ int *num_cvars, int *num_pvars, int *num_categories) __attribute__((weak,alias("PMPI_T_category_get_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cat_get_num.c b/src/mpi_t/cat_get_num.c
index 8a3efca..beda624 100644
--- a/src/mpi_t/cat_get_num.c
+++ b/src/mpi_t/cat_get_num.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_category_get_num MPI_T_category_get_num
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_category_get_num as PMPI_T_category_get_num
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_num(int *num_cat) __attribute__((weak,alias("PMPI_T_category_get_num")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cat_get_pvars.c b/src/mpi_t/cat_get_pvars.c
index 39ed836..c189097 100644
--- a/src/mpi_t/cat_get_pvars.c
+++ b/src/mpi_t/cat_get_pvars.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_category_get_pvars MPI_T_category_get_pvars
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_category_get_pvars as PMPI_T_category_get_pvars
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_category_get_pvars(int cat_index, int len, int indices[]) __attribute__((weak,alias("PMPI_T_category_get_pvars")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cvar_get_info.c b/src/mpi_t/cvar_get_info.c
index 31ec7b1..dc5fef0 100644
--- a/src/mpi_t/cvar_get_info.c
+++ b/src/mpi_t/cvar_get_info.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_T_cvar_get_info MPI_T_cvar_get_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_cvar_get_info as PMPI_T_cvar_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_get_info(int cvar_index, char *name, int *name_len, int *verbosity,
+ MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
+ int *binding, int *scope) __attribute__((weak,alias("PMPI_T_cvar_get_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cvar_get_num.c b/src/mpi_t/cvar_get_num.c
index 0ff8aab..bd55221 100644
--- a/src/mpi_t/cvar_get_num.c
+++ b/src/mpi_t/cvar_get_num.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_cvar_get_num MPI_T_cvar_get_num
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_cvar_get_num as PMPI_T_cvar_get_num
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_get_num(int *num_cvar) __attribute__((weak,alias("PMPI_T_cvar_get_num")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cvar_handle_alloc.c b/src/mpi_t/cvar_handle_alloc.c
index 9232915..e0ea9fa 100644
--- a/src/mpi_t/cvar_handle_alloc.c
+++ b/src/mpi_t/cvar_handle_alloc.c
@@ -13,6 +13,9 @@
#pragma _HP_SECONDARY_DEF PMPI_T_cvar_handle_alloc MPI_T_cvar_handle_alloc
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_cvar_handle_alloc as PMPI_T_cvar_handle_alloc
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_handle_alloc(int cvar_index, void *obj_handle, MPI_T_cvar_handle *handle,
+ int *count) __attribute__((weak,alias("PMPI_T_cvar_handle_alloc")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cvar_handle_free.c b/src/mpi_t/cvar_handle_free.c
index 271be20..d5fe45e 100644
--- a/src/mpi_t/cvar_handle_free.c
+++ b/src/mpi_t/cvar_handle_free.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_cvar_handle_free MPI_T_cvar_handle_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_cvar_handle_free as PMPI_T_cvar_handle_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_handle_free(MPI_T_cvar_handle *handle) __attribute__((weak,alias("PMPI_T_cvar_handle_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cvar_read.c b/src/mpi_t/cvar_read.c
index c71e524..19413ae 100644
--- a/src/mpi_t/cvar_read.c
+++ b/src/mpi_t/cvar_read.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_cvar_read MPI_T_cvar_read
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_cvar_read as PMPI_T_cvar_read
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_read(MPI_T_cvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_cvar_read")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/cvar_write.c b/src/mpi_t/cvar_write.c
index d571680..519f11f 100644
--- a/src/mpi_t/cvar_write.c
+++ b/src/mpi_t/cvar_write.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_cvar_write MPI_T_cvar_write
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_cvar_write as PMPI_T_cvar_write
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_cvar_write(MPI_T_cvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_cvar_write")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/enum_get_info.c b/src/mpi_t/enum_get_info.c
index afd134e..0a85c64 100644
--- a/src/mpi_t/enum_get_info.c
+++ b/src/mpi_t/enum_get_info.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_enum_get_info MPI_T_enum_get_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_enum_get_info as PMPI_T_enum_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_enum_get_info(MPI_T_enum enumtype, int *num, char *name, int *name_len) __attribute__((weak,alias("PMPI_T_enum_get_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/enum_get_item.c b/src/mpi_t/enum_get_item.c
index dda7433..4820b8e 100644
--- a/src/mpi_t/enum_get_item.c
+++ b/src/mpi_t/enum_get_item.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_enum_get_item MPI_T_enum_get_item
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_enum_get_item as PMPI_T_enum_get_item
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_enum_get_item(MPI_T_enum enumtype, int indx, int *value, char *name, int *name_len) __attribute__((weak,alias("PMPI_T_enum_get_item")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/mpit_finalize.c b/src/mpi_t/mpit_finalize.c
index 0321cd0..5e2e1aa 100644
--- a/src/mpi_t/mpit_finalize.c
+++ b/src/mpi_t/mpit_finalize.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_finalize MPI_T_finalize
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_finalize as PMPI_T_finalize
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_finalize(void) __attribute__((weak,alias("PMPI_T_finalize")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/mpit_initthread.c b/src/mpi_t/mpit_initthread.c
index 1e7fcba..7b09dfe 100644
--- a/src/mpi_t/mpit_initthread.c
+++ b/src/mpi_t/mpit_initthread.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_init_thread MPI_T_init_thread
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_init_thread as PMPI_T_init_thread
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_init_thread(int required, int *provided) __attribute__((weak,alias("PMPI_T_init_thread")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_get_info.c b/src/mpi_t/pvar_get_info.c
index 3dcd179..a229edf 100644
--- a/src/mpi_t/pvar_get_info.c
+++ b/src/mpi_t/pvar_get_info.c
@@ -13,6 +13,10 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_get_info MPI_T_pvar_get_info
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_get_info as PMPI_T_pvar_get_info
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_get_info(int pvar_index, char *name, int *name_len, int *verbosity, int *var_class,
+ MPI_Datatype *datatype, MPI_T_enum *enumtype, char *desc, int *desc_len,
+ int *binding, int *readonly, int *continuous, int *atomic) __attribute__((weak,alias("PMPI_T_pvar_get_info")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_get_num.c b/src/mpi_t/pvar_get_num.c
index 4e66600..858c1b4 100644
--- a/src/mpi_t/pvar_get_num.c
+++ b/src/mpi_t/pvar_get_num.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_get_num MPI_T_pvar_get_num
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_get_num as PMPI_T_pvar_get_num
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_get_num(int *num_pvar) __attribute__((weak,alias("PMPI_T_pvar_get_num")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_handle_alloc.c b/src/mpi_t/pvar_handle_alloc.c
index ec1883a..31edd9a 100644
--- a/src/mpi_t/pvar_handle_alloc.c
+++ b/src/mpi_t/pvar_handle_alloc.c
@@ -14,6 +14,9 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_handle_alloc MPI_T_pvar_handle_alloc
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_handle_alloc as PMPI_T_pvar_handle_alloc
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_handle_alloc(MPI_T_pvar_session session, int pvar_index, void *obj_handle,
+ MPI_T_pvar_handle *handle, int *count) __attribute__((weak,alias("PMPI_T_pvar_handle_alloc")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_handle_free.c b/src/mpi_t/pvar_handle_free.c
index bc7a6de..0aa5117 100644
--- a/src/mpi_t/pvar_handle_free.c
+++ b/src/mpi_t/pvar_handle_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_handle_free MPI_T_pvar_handle_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_handle_free as PMPI_T_pvar_handle_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_handle_free(MPI_T_pvar_session session, MPI_T_pvar_handle *handle) __attribute__((weak,alias("PMPI_T_pvar_handle_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_read.c b/src/mpi_t/pvar_read.c
index 3c3ba7f..54956ab 100644
--- a/src/mpi_t/pvar_read.c
+++ b/src/mpi_t/pvar_read.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_read MPI_T_pvar_read
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_read as PMPI_T_pvar_read
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_read(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_pvar_read")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_readreset.c b/src/mpi_t/pvar_readreset.c
index bd87dd4..23751aa 100644
--- a/src/mpi_t/pvar_readreset.c
+++ b/src/mpi_t/pvar_readreset.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_readreset MPI_T_pvar_readreset
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_readreset as PMPI_T_pvar_readreset
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_readreset(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_pvar_readreset")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_reset.c b/src/mpi_t/pvar_reset.c
index c835e64..aea3655 100644
--- a/src/mpi_t/pvar_reset.c
+++ b/src/mpi_t/pvar_reset.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_reset MPI_T_pvar_reset
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_reset as PMPI_T_pvar_reset
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_reset(MPI_T_pvar_session session, MPI_T_pvar_handle handle) __attribute__((weak,alias("PMPI_T_pvar_reset")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_session_create.c b/src/mpi_t/pvar_session_create.c
index db59286..1777cd5 100644
--- a/src/mpi_t/pvar_session_create.c
+++ b/src/mpi_t/pvar_session_create.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_session_create MPI_T_pvar_session_create
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_session_create as PMPI_T_pvar_session_create
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_session_create(MPI_T_pvar_session *session) __attribute__((weak,alias("PMPI_T_pvar_session_create")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_session_free.c b/src/mpi_t/pvar_session_free.c
index 9a2064d..3cade54 100644
--- a/src/mpi_t/pvar_session_free.c
+++ b/src/mpi_t/pvar_session_free.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_session_free MPI_T_pvar_session_free
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_session_free as PMPI_T_pvar_session_free
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_session_free(MPI_T_pvar_session *session) __attribute__((weak,alias("PMPI_T_pvar_session_free")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_start.c b/src/mpi_t/pvar_start.c
index 84ac78c..3a700ad 100644
--- a/src/mpi_t/pvar_start.c
+++ b/src/mpi_t/pvar_start.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_start MPI_T_pvar_start
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_start as PMPI_T_pvar_start
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_start(MPI_T_pvar_session session, MPI_T_pvar_handle handle) __attribute__((weak,alias("PMPI_T_pvar_start")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_stop.c b/src/mpi_t/pvar_stop.c
index 10a2081..8473316 100644
--- a/src/mpi_t/pvar_stop.c
+++ b/src/mpi_t/pvar_stop.c
@@ -14,6 +14,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_stop MPI_T_pvar_stop
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_stop as PMPI_T_pvar_stop
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_stop(MPI_T_pvar_session session, MPI_T_pvar_handle handle) __attribute__((weak,alias("PMPI_T_pvar_stop")));
#endif
/* -- End Profiling Symbol Block */
diff --git a/src/mpi_t/pvar_write.c b/src/mpi_t/pvar_write.c
index 309f7ba..23ff0e2 100644
--- a/src/mpi_t/pvar_write.c
+++ b/src/mpi_t/pvar_write.c
@@ -13,6 +13,8 @@
#pragma _HP_SECONDARY_DEF PMPI_T_pvar_write MPI_T_pvar_write
#elif defined(HAVE_PRAGMA_CRI_DUP)
#pragma _CRI duplicate MPI_T_pvar_write as PMPI_T_pvar_write
+#elif defined(HAVE_WEAK_ATTRIBUTE)
+int MPI_T_pvar_write(MPI_T_pvar_session session, MPI_T_pvar_handle handle, void *buf) __attribute__((weak,alias("PMPI_T_pvar_write")));
#endif
/* -- End Profiling Symbol Block */
http://git.mpich.org/mpich.git/commitdiff/0011344aee9fadd4c2e879da9b14e764b…
commit 0011344aee9fadd4c2e879da9b14e764bfbf837a
Author: Antonio J. Pena <apenya(a)mcs.anl.gov>
Date: Mon Mar 17 16:22:19 2014 -0500
Fix weak alias support detection
Since GCC4, it is required that when declaring a function alias,
the target function is defined in the same compilation unit.
See #2002
Signed-off-by: Ken Raffenetti <raffenet(a)mcs.anl.gov>
diff --git a/confdb/aclocal_cc.m4 b/confdb/aclocal_cc.m4
index c706151..e2dd692 100644
--- a/confdb/aclocal_cc.m4
+++ b/confdb/aclocal_cc.m4
@@ -368,7 +368,7 @@ pac_cv_attr_weak_alias,[
PAC_PUSH_FLAG([CFLAGS])
# force an error exit if the weak attribute isn't understood
CFLAGS=-Werror
-AC_TRY_COMPILE([int foo(int) __attribute__((weak,alias("__foo")));],[int a;],
+AC_TRY_COMPILE([int __foo(int a){return 0;} int foo(int) __attribute__((weak,alias("__foo")));],[int a;],
pac_cv_attr_weak_alias=yes,pac_cv_attr_weak_alias=no)
# Restore original CFLAGS
PAC_POP_FLAG([CFLAGS])])
-----------------------------------------------------------------------
Summary of changes:
confdb/aclocal_cc.m4 | 2 +-
configure.ac | 5 -
src/binding/fortran/mpif_h/buildiface | 6 +-
src/binding/fortran/use_mpi/create_f90_complex.c | 2 +
src/binding/fortran/use_mpi/create_f90_int.c | 2 +
src/binding/fortran/use_mpi/create_f90_real.c | 2 +
.../fortran/use_mpi_f08/wrappers_c/buildiface | 1 -
src/glue/romio/all_romio_symbols | 1 -
src/include/mpi.h.in | 682 ++++++++++----------
src/mpi/attr/attr_delete.c | 2 +
src/mpi/attr/attr_get.c | 2 +
src/mpi/attr/attr_put.c | 2 +
src/mpi/attr/comm_create_keyval.c | 4 +
src/mpi/attr/comm_delete_attr.c | 2 +
src/mpi/attr/comm_free_keyval.c | 2 +
src/mpi/attr/comm_get_attr.c | 2 +
src/mpi/attr/comm_set_attr.c | 2 +
src/mpi/attr/keyval_create.c | 3 +
src/mpi/attr/keyval_free.c | 2 +
src/mpi/attr/type_create_keyval.c | 4 +
src/mpi/attr/type_delete_attr.c | 2 +
src/mpi/attr/type_free_keyval.c | 2 +
src/mpi/attr/type_get_attr.c | 2 +
src/mpi/attr/type_set_attr.c | 2 +
src/mpi/attr/win_create_keyval.c | 4 +
src/mpi/attr/win_delete_attr.c | 2 +
src/mpi/attr/win_free_keyval.c | 2 +
src/mpi/attr/win_get_attr.c | 2 +
src/mpi/attr/win_set_attr.c | 2 +
src/mpi/coll/allgather.c | 4 +
src/mpi/coll/allgatherv.c | 4 +
src/mpi/coll/allreduce.c | 4 +
src/mpi/coll/alltoall.c | 4 +
src/mpi/coll/alltoallv.c | 5 +
src/mpi/coll/alltoallw.c | 4 +
src/mpi/coll/barrier.c | 2 +
src/mpi/coll/bcast.c | 3 +
src/mpi/coll/exscan.c | 4 +
src/mpi/coll/gather.c | 4 +
src/mpi/coll/gatherv.c | 5 +
src/mpi/coll/iallgather.c | 4 +
src/mpi/coll/iallgatherv.c | 5 +
src/mpi/coll/iallreduce.c | 4 +
src/mpi/coll/ialltoall.c | 4 +
src/mpi/coll/ialltoallv.c | 6 +
src/mpi/coll/ialltoallw.c | 5 +
src/mpi/coll/ibarrier.c | 2 +
src/mpi/coll/ibcast.c | 3 +
src/mpi/coll/iexscan.c | 4 +
src/mpi/coll/igather.c | 5 +
src/mpi/coll/igatherv.c | 5 +
src/mpi/coll/ired_scat.c | 4 +
src/mpi/coll/ired_scat_block.c | 5 +
src/mpi/coll/ireduce.c | 4 +
src/mpi/coll/iscan.c | 4 +
src/mpi/coll/iscatter.c | 5 +
src/mpi/coll/iscatterv.c | 5 +
src/mpi/coll/op_commutative.c | 2 +
src/mpi/coll/op_create.c | 2 +
src/mpi/coll/op_free.c | 2 +
src/mpi/coll/red_scat.c | 4 +
src/mpi/coll/red_scat_block.c | 4 +
src/mpi/coll/reduce.c | 4 +
src/mpi/coll/reduce_local.c | 4 +
src/mpi/coll/scan.c | 4 +
src/mpi/coll/scatter.c | 4 +
src/mpi/coll/scatterv.c | 5 +
src/mpi/comm/comm_compare.c | 2 +
src/mpi/comm/comm_create.c | 2 +
src/mpi/comm/comm_create_group.c | 2 +
src/mpi/comm/comm_dup.c | 2 +
src/mpi/comm/comm_dup_with_info.c | 2 +
src/mpi/comm/comm_free.c | 2 +
src/mpi/comm/comm_get_info.c | 2 +
src/mpi/comm/comm_get_name.c | 2 +
src/mpi/comm/comm_group.c | 2 +
src/mpi/comm/comm_group_failed.c | 2 +
src/mpi/comm/comm_idup.c | 2 +
src/mpi/comm/comm_rank.c | 2 +
src/mpi/comm/comm_reenable_anysource.c | 2 +
src/mpi/comm/comm_remote_group.c | 2 +
src/mpi/comm/comm_remote_group_failed.c | 2 +
src/mpi/comm/comm_remote_size.c | 2 +
src/mpi/comm/comm_set_info.c | 2 +
src/mpi/comm/comm_set_name.c | 2 +
src/mpi/comm/comm_size.c | 2 +
src/mpi/comm/comm_split.c | 2 +
src/mpi/comm/comm_split_type.c | 2 +
src/mpi/comm/comm_test_inter.c | 2 +
src/mpi/comm/intercomm_create.c | 3 +
src/mpi/comm/intercomm_merge.c | 2 +
src/mpi/datatype/address.c | 2 +
src/mpi/datatype/get_address.c | 2 +
src/mpi/datatype/get_count.c | 2 +
src/mpi/datatype/get_elements.c | 2 +
src/mpi/datatype/get_elements_x.c | 2 +
src/mpi/datatype/pack.c | 3 +
src/mpi/datatype/pack_external.c | 4 +
src/mpi/datatype/pack_external_size.c | 3 +
src/mpi/datatype/pack_size.c | 2 +
src/mpi/datatype/status_set_elements.c | 2 +
src/mpi/datatype/status_set_elements_x.c | 2 +
src/mpi/datatype/type_commit.c | 2 +
src/mpi/datatype/type_contiguous.c | 2 +
src/mpi/datatype/type_create_darray.c | 5 +
src/mpi/datatype/type_create_hindexed.c | 4 +
src/mpi/datatype/type_create_hindexed_block.c | 4 +
src/mpi/datatype/type_create_hvector.c | 3 +
src/mpi/datatype/type_create_indexed_block.c | 3 +
src/mpi/datatype/type_create_resized.c | 3 +
src/mpi/datatype/type_create_struct.c | 4 +
src/mpi/datatype/type_create_subarray.c | 4 +
src/mpi/datatype/type_dup.c | 2 +
src/mpi/datatype/type_extent.c | 2 +
src/mpi/datatype/type_free.c | 2 +
src/mpi/datatype/type_get_contents.c | 4 +
src/mpi/datatype/type_get_envelope.c | 3 +
src/mpi/datatype/type_get_extent.c | 2 +
src/mpi/datatype/type_get_extent_x.c | 2 +
src/mpi/datatype/type_get_name.c | 2 +
src/mpi/datatype/type_get_true_extent.c | 2 +
src/mpi/datatype/type_get_true_extent_x.c | 2 +
src/mpi/datatype/type_hindexed.c | 4 +
src/mpi/datatype/type_hvector.c | 3 +
src/mpi/datatype/type_indexed.c | 4 +
src/mpi/datatype/type_lb.c | 2 +
src/mpi/datatype/type_match_size.c | 2 +
src/mpi/datatype/type_set_name.c | 2 +
src/mpi/datatype/type_size.c | 2 +
src/mpi/datatype/type_size_x.c | 2 +
src/mpi/datatype/type_struct.c | 4 +
src/mpi/datatype/type_ub.c | 2 +
src/mpi/datatype/type_vector.c | 3 +
src/mpi/datatype/unpack.c | 3 +
src/mpi/datatype/unpack_external.c | 4 +
src/mpi/errhan/add_error_class.c | 2 +
src/mpi/errhan/add_error_code.c | 2 +
src/mpi/errhan/add_error_string.c | 2 +
src/mpi/errhan/comm_call_errhandler.c | 2 +
src/mpi/errhan/comm_create_errhandler.c | 3 +
src/mpi/errhan/comm_get_errhandler.c | 2 +
src/mpi/errhan/comm_set_errhandler.c | 2 +
src/mpi/errhan/errhandler_create.c | 2 +
src/mpi/errhan/errhandler_free.c | 2 +
src/mpi/errhan/errhandler_get.c | 2 +
src/mpi/errhan/errhandler_set.c | 2 +
src/mpi/errhan/error_class.c | 2 +
src/mpi/errhan/error_string.c | 2 +
src/mpi/errhan/file_call_errhandler.c | 2 +
src/mpi/errhan/file_create_errhandler.c | 3 +
src/mpi/errhan/file_get_errhandler.c | 2 +
src/mpi/errhan/file_set_errhandler.c | 2 +
src/mpi/errhan/win_call_errhandler.c | 2 +
src/mpi/errhan/win_create_errhandler.c | 3 +
src/mpi/errhan/win_get_errhandler.c | 2 +
src/mpi/errhan/win_set_errhandler.c | 2 +
src/mpi/group/group_compare.c | 2 +
src/mpi/group/group_difference.c | 2 +
src/mpi/group/group_excl.c | 2 +
src/mpi/group/group_free.c | 2 +
src/mpi/group/group_incl.c | 2 +
src/mpi/group/group_intersection.c | 2 +
src/mpi/group/group_range_excl.c | 2 +
src/mpi/group/group_range_incl.c | 2 +
src/mpi/group/group_rank.c | 2 +
src/mpi/group/group_size.c | 2 +
src/mpi/group/group_translate_ranks.c | 3 +
src/mpi/group/group_union.c | 2 +
src/mpi/info/info_create.c | 2 +
src/mpi/info/info_delete.c | 2 +
src/mpi/info/info_dup.c | 2 +
src/mpi/info/info_free.c | 2 +
src/mpi/info/info_get.c | 2 +
src/mpi/info/info_getn.c | 2 +
src/mpi/info/info_getnth.c | 2 +
src/mpi/info/info_getvallen.c | 2 +
src/mpi/info/info_set.c | 2 +
src/mpi/init/abort.c | 2 +
src/mpi/init/finalize.c | 2 +
src/mpi/init/finalized.c | 2 +
src/mpi/init/init.c | 2 +
src/mpi/init/initialized.c | 2 +
src/mpi/init/initthread.c | 2 +
src/mpi/init/ismain.c | 2 +
src/mpi/init/querythread.c | 2 +
src/mpi/misc/getpname.c | 2 +
src/mpi/misc/library_version.c | 2 +
src/mpi/misc/pcontrol.c | 2 +
src/mpi/misc/version.c | 2 +
src/mpi/pt2pt/bsend.c | 3 +
src/mpi/pt2pt/bsend_init.c | 3 +
src/mpi/pt2pt/bufattach.c | 2 +
src/mpi/pt2pt/buffree.c | 2 +
src/mpi/pt2pt/cancel.c | 2 +
src/mpi/pt2pt/greq_complete.c | 2 +
src/mpi/pt2pt/greq_start.c | 4 +
src/mpi/pt2pt/ibsend.c | 3 +
src/mpi/pt2pt/improbe.c | 3 +
src/mpi/pt2pt/imrecv.c | 3 +
src/mpi/pt2pt/iprobe.c | 2 +
src/mpi/pt2pt/irecv.c | 3 +
src/mpi/pt2pt/irsend.c | 3 +
src/mpi/pt2pt/isend.c | 3 +
src/mpi/pt2pt/issend.c | 3 +
src/mpi/pt2pt/mprobe.c | 2 +
src/mpi/pt2pt/mrecv.c | 3 +
src/mpi/pt2pt/probe.c | 2 +
src/mpi/pt2pt/recv.c | 3 +
src/mpi/pt2pt/recv_init.c | 3 +
src/mpi/pt2pt/request_free.c | 2 +
src/mpi/pt2pt/request_get_status.c | 2 +
src/mpi/pt2pt/rsend.c | 3 +
src/mpi/pt2pt/rsend_init.c | 3 +
src/mpi/pt2pt/send.c | 3 +
src/mpi/pt2pt/send_init.c | 3 +
src/mpi/pt2pt/sendrecv.c | 5 +
src/mpi/pt2pt/sendrecv_rep.c | 4 +
src/mpi/pt2pt/ssend.c | 3 +
src/mpi/pt2pt/ssend_init.c | 3 +
src/mpi/pt2pt/start.c | 2 +
src/mpi/pt2pt/startall.c | 2 +
src/mpi/pt2pt/status_set_cancelled.c | 2 +
src/mpi/pt2pt/test.c | 2 +
src/mpi/pt2pt/test_cancelled.c | 2 +
src/mpi/pt2pt/testall.c | 3 +
src/mpi/pt2pt/testany.c | 3 +
src/mpi/pt2pt/testsome.c | 3 +
src/mpi/pt2pt/wait.c | 2 +
src/mpi/pt2pt/waitall.c | 2 +
src/mpi/pt2pt/waitany.c | 2 +
src/mpi/pt2pt/waitsome.c | 3 +
src/mpi/rma/accumulate.c | 5 +
src/mpi/rma/alloc_mem.c | 2 +
src/mpi/rma/compare_and_swap.c | 5 +
src/mpi/rma/fetch_and_op.c | 5 +
src/mpi/rma/free_mem.c | 2 +
src/mpi/rma/get.c | 4 +
src/mpi/rma/get_accumulate.c | 6 +
src/mpi/rma/put.c | 4 +
src/mpi/rma/raccumulate.c | 6 +
src/mpi/rma/rget.c | 6 +
src/mpi/rma/rget_accumulate.c | 7 +
src/mpi/rma/rput.c | 6 +
src/mpi/rma/win_allocate.c | 3 +
src/mpi/rma/win_allocate_shared.c | 3 +
src/mpi/rma/win_attach.c | 2 +
src/mpi/rma/win_complete.c | 2 +
src/mpi/rma/win_create.c | 3 +
src/mpi/rma/win_create_dynamic.c | 2 +
src/mpi/rma/win_detach.c | 2 +
src/mpi/rma/win_fence.c | 2 +
src/mpi/rma/win_flush.c | 2 +
src/mpi/rma/win_flush_all.c | 2 +
src/mpi/rma/win_flush_local.c | 2 +
src/mpi/rma/win_flush_local_all.c | 2 +
src/mpi/rma/win_free.c | 2 +
src/mpi/rma/win_get_group.c | 2 +
src/mpi/rma/win_get_info.c | 2 +
src/mpi/rma/win_get_name.c | 2 +
src/mpi/rma/win_lock.c | 2 +
src/mpi/rma/win_lock_all.c | 2 +
src/mpi/rma/win_post.c | 2 +
src/mpi/rma/win_set_info.c | 2 +
src/mpi/rma/win_set_name.c | 2 +
src/mpi/rma/win_shared_query.c | 2 +
src/mpi/rma/win_start.c | 2 +
src/mpi/rma/win_sync.c | 2 +
src/mpi/rma/win_test.c | 2 +
src/mpi/rma/win_unlock.c | 2 +
src/mpi/rma/win_unlock_all.c | 2 +
src/mpi/rma/win_wait.c | 2 +
src/mpi/romio/include/mpio.h.in | 112 ++--
src/mpi/romio/mpi-io/close.c | 2 +
src/mpi/romio/mpi-io/delete.c | 2 +
src/mpi/romio/mpi-io/file_c2f.c | 2 +
src/mpi/romio/mpi-io/file_f2c.c | 2 +
src/mpi/romio/mpi-io/fsync.c | 2 +
src/mpi/romio/mpi-io/get_amode.c | 2 +
src/mpi/romio/mpi-io/get_atom.c | 2 +
src/mpi/romio/mpi-io/get_bytoff.c | 2 +
src/mpi/romio/mpi-io/get_errh.c | 2 +
src/mpi/romio/mpi-io/get_extent.c | 2 +
src/mpi/romio/mpi-io/get_group.c | 2 +
src/mpi/romio/mpi-io/get_info.c | 2 +
src/mpi/romio/mpi-io/get_posn.c | 2 +
src/mpi/romio/mpi-io/get_posn_sh.c | 2 +
src/mpi/romio/mpi-io/get_size.c | 2 +
src/mpi/romio/mpi-io/get_view.c | 3 +
src/mpi/romio/mpi-io/iread.c | 3 +
src/mpi/romio/mpi-io/iread_at.c | 3 +
src/mpi/romio/mpi-io/iread_sh.c | 3 +
src/mpi/romio/mpi-io/iwrite.c | 3 +
src/mpi/romio/mpi-io/iwrite_at.c | 4 +
src/mpi/romio/mpi-io/iwrite_sh.c | 3 +
src/mpi/romio/mpi-io/open.c | 2 +
src/mpi/romio/mpi-io/prealloc.c | 2 +
src/mpi/romio/mpi-io/rd_atallb.c | 3 +
src/mpi/romio/mpi-io/rd_atalle.c | 2 +
src/mpi/romio/mpi-io/read.c | 3 +
src/mpi/romio/mpi-io/read_all.c | 3 +
src/mpi/romio/mpi-io/read_allb.c | 3 +
src/mpi/romio/mpi-io/read_alle.c | 2 +
src/mpi/romio/mpi-io/read_at.c | 3 +
src/mpi/romio/mpi-io/read_atall.c | 4 +
src/mpi/romio/mpi-io/read_ord.c | 3 +
src/mpi/romio/mpi-io/read_ordb.c | 3 +
src/mpi/romio/mpi-io/read_orde.c | 2 +
src/mpi/romio/mpi-io/read_sh.c | 3 +
src/mpi/romio/mpi-io/register_datarep.c | 4 +
src/mpi/romio/mpi-io/seek.c | 2 +
src/mpi/romio/mpi-io/seek_sh.c | 2 +
src/mpi/romio/mpi-io/set_atom.c | 2 +
src/mpi/romio/mpi-io/set_errh.c | 2 +
src/mpi/romio/mpi-io/set_info.c | 2 +
src/mpi/romio/mpi-io/set_size.c | 2 +
src/mpi/romio/mpi-io/set_view.c | 3 +
src/mpi/romio/mpi-io/wr_atallb.c | 3 +
src/mpi/romio/mpi-io/wr_atalle.c | 2 +
src/mpi/romio/mpi-io/write.c | 3 +
src/mpi/romio/mpi-io/write_all.c | 3 +
src/mpi/romio/mpi-io/write_allb.c | 3 +
src/mpi/romio/mpi-io/write_alle.c | 2 +
src/mpi/romio/mpi-io/write_at.c | 4 +
src/mpi/romio/mpi-io/write_atall.c | 4 +
src/mpi/romio/mpi-io/write_ord.c | 3 +
src/mpi/romio/mpi-io/write_ordb.c | 3 +
src/mpi/romio/mpi-io/write_orde.c | 2 +
src/mpi/romio/mpi-io/write_sh.c | 3 +
src/mpi/spawn/close_port.c | 2 +
src/mpi/spawn/comm_accept.c | 3 +
src/mpi/spawn/comm_connect.c | 3 +
src/mpi/spawn/comm_disconnect.c | 2 +
src/mpi/spawn/comm_get_parent.c | 2 +
src/mpi/spawn/comm_join.c | 2 +
src/mpi/spawn/comm_spawn.c | 3 +
src/mpi/spawn/comm_spawn_multiple.c | 4 +
src/mpi/spawn/lookup_name.c | 2 +
src/mpi/spawn/open_port.c | 2 +
src/mpi/spawn/publish_name.c | 2 +
src/mpi/spawn/unpublish_name.c | 2 +
src/mpi/timer/wtick.c | 2 +
src/mpi/timer/wtime.c | 2 +
src/mpi/topo/cart_coords.c | 2 +
src/mpi/topo/cart_create.c | 3 +
src/mpi/topo/cart_get.c | 2 +
src/mpi/topo/cart_map.c | 2 +
src/mpi/topo/cart_rank.c | 2 +
src/mpi/topo/cart_shift.c | 2 +
src/mpi/topo/cart_sub.c | 2 +
src/mpi/topo/cartdim_get.c | 2 +
src/mpi/topo/dims_create.c | 2 +
src/mpi/topo/dist_gr_create.c | 4 +
src/mpi/topo/dist_gr_create_adj.c | 5 +
src/mpi/topo/dist_gr_neighb.c | 3 +
src/mpi/topo/dist_gr_neighb_count.c | 2 +
src/mpi/topo/graph_get.c | 2 +
src/mpi/topo/graph_map.c | 2 +
src/mpi/topo/graph_nbr.c | 2 +
src/mpi/topo/graphcreate.c | 3 +
src/mpi/topo/graphdimsget.c | 2 +
src/mpi/topo/graphnbrcnt.c | 2 +
src/mpi/topo/inhb_allgather.c | 5 +
src/mpi/topo/inhb_allgatherv.c | 5 +
src/mpi/topo/inhb_alltoall.c | 5 +
src/mpi/topo/inhb_alltoallv.c | 6 +
src/mpi/topo/inhb_alltoallw.c | 5 +
src/mpi/topo/nhb_allgather.c | 4 +
src/mpi/topo/nhb_allgatherv.c | 5 +
src/mpi/topo/nhb_alltoall.c | 4 +
src/mpi/topo/nhb_alltoallv.c | 5 +
src/mpi/topo/nhb_alltoallw.c | 4 +
src/mpi/topo/topo_test.c | 2 +
src/mpi_t/cat_changed.c | 2 +
src/mpi_t/cat_get_categories.c | 2 +
src/mpi_t/cat_get_cvars.c | 2 +
src/mpi_t/cat_get_info.c | 3 +
src/mpi_t/cat_get_num.c | 2 +
src/mpi_t/cat_get_pvars.c | 2 +
src/mpi_t/cvar_get_info.c | 4 +
src/mpi_t/cvar_get_num.c | 2 +
src/mpi_t/cvar_handle_alloc.c | 3 +
src/mpi_t/cvar_handle_free.c | 2 +
src/mpi_t/cvar_read.c | 2 +
src/mpi_t/cvar_write.c | 2 +
src/mpi_t/enum_get_info.c | 2 +
src/mpi_t/enum_get_item.c | 2 +
src/mpi_t/mpit_finalize.c | 2 +
src/mpi_t/mpit_initthread.c | 2 +
src/mpi_t/pvar_get_info.c | 4 +
src/mpi_t/pvar_get_num.c | 2 +
src/mpi_t/pvar_handle_alloc.c | 3 +
src/mpi_t/pvar_handle_free.c | 2 +
src/mpi_t/pvar_read.c | 2 +
src/mpi_t/pvar_readreset.c | 2 +
src/mpi_t/pvar_reset.c | 2 +
src/mpi_t/pvar_session_create.c | 2 +
src/mpi_t/pvar_session_free.c | 2 +
src/mpi_t/pvar_start.c | 2 +
src/mpi_t/pvar_stop.c | 2 +
src/mpi_t/pvar_write.c | 2 +
400 files changed, 1452 insertions(+), 409 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-62-gaa1b034
by noreply@mpich.org 07 Jul '14
by noreply@mpich.org 07 Jul '14
07 Jul '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 aa1b034353ca4c1ffbfe4d25cb69b62bbe9dee77 (commit)
from 3ac0b20ed99578c7997df48f210fce9fbc1ea891 (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/aa1b034353ca4c1ffbfe4d25cb69b62bb…
commit aa1b034353ca4c1ffbfe4d25cb69b62bbe9dee77
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Thu Jun 12 09:10:04 2014 -0400
MPI_Iallgather has no validity check for sendcount
(ibm) D198243
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
Signed-off-by: Wesley Bland <wbland(a)anl.gov>
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index f45c291..29b8cc1 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -673,6 +673,7 @@ int MPI_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
{
if (sendbuf != MPI_IN_PLACE)
MPIR_ERRTEST_DATATYPE(sendtype, "sendtype", mpi_errno);
+ MPIR_ERRTEST_COUNT(sendcount, mpi_errno);
MPIR_ERRTEST_DATATYPE(recvtype, "recvtype", mpi_errno);
MPIR_ERRTEST_COMM(comm, mpi_errno);
-----------------------------------------------------------------------
Summary of changes:
src/mpi/coll/iallgather.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-61-g3ac0b20
by noreply@mpich.org 07 Jul '14
by noreply@mpich.org 07 Jul '14
07 Jul '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 3ac0b20ed99578c7997df48f210fce9fbc1ea891 (commit)
from b61fc70291f34acf1995ca3988207af5038f927b (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/3ac0b20ed99578c7997df48f210fce9fb…
commit 3ac0b20ed99578c7997df48f210fce9fbc1ea891
Author: Wesley Bland <wbland(a)anl.gov>
Date: Sun Jul 6 12:17:39 2014 -0500
Fix collective alias checks to look for zero-sized buffers
If the size of the input buffers is 0, don't bother to check if they are
aliased.
Fixes #2124
Signed-off-by: Antonio J. Pena <apenya(a)mcs.anl.gov>
diff --git a/src/mpi/coll/exscan.c b/src/mpi/coll/exscan.c
index 3df9fe1..6d143e4 100644
--- a/src/mpi/coll/exscan.c
+++ b/src/mpi/coll/exscan.c
@@ -371,7 +371,7 @@ int MPI_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datat
}
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (sendbuf != MPI_IN_PLACE)
+ if (sendbuf != MPI_IN_PLACE && count != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
}
MPID_END_ERROR_CHECKS;
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index 97ef8cb..6f9eab0 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -306,7 +306,7 @@ int MPI_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype data
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (sendbuf != MPI_IN_PLACE)
+ if (sendbuf != MPI_IN_PLACE && count != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, etc) */
}
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index c9d86b7..d805195 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -1082,6 +1082,7 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
int mpi_errno = MPI_SUCCESS;
MPID_Comm *comm_ptr = NULL;
MPID_MPI_STATE_DECL(MPID_STATE_MPI_IREDUCE_SCATTER);
+ int i = 0;
MPIU_THREAD_CS_ENTER(ALLFUNC,);
MPID_MPI_FUNC_ENTER(MPID_STATE_MPI_IREDUCE_SCATTER);
@@ -1134,7 +1135,9 @@ int MPI_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE)
+ while (i < comm_ptr->remote_size && recvcounts[i] == 0) ++i;
+
+ if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE && i < comm_ptr->remote_size)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
/* TODO more checks may be appropriate (counts, in_place, etc) */
}
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index 6ca9c55..e75fc36 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -1035,7 +1035,7 @@ int MPI_Ireduce_scatter_block(const void *sendbuf, void *recvbuf,
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE)
+ if (comm_ptr->comm_kind == MPID_INTRACOMM && sendbuf != MPI_IN_PLACE && recvcount != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
/* TODO more checks may be appropriate (counts, in_place, etc) */
}
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index e0338fd..2c8f82c 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -442,7 +442,7 @@ int MPI_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype dataty
MPIR_ERRTEST_ARGNULL(request,"request", mpi_errno);
- if (sendbuf != MPI_IN_PLACE)
+ if (sendbuf != MPI_IN_PLACE && count != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
/* TODO more checks may be appropriate (counts, in_place, etc) */
}
diff --git a/src/mpi/coll/red_scat.c b/src/mpi/coll/red_scat.c
index 2221b04..ba58240 100644
--- a/src/mpi/coll/red_scat.c
+++ b/src/mpi/coll/red_scat.c
@@ -1174,7 +1174,7 @@ int MPI_Reduce_scatter(const void *sendbuf, void *recvbuf, const int recvcounts[
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcounts[comm_ptr->rank], mpi_errno);
if (comm_ptr->comm_kind == MPID_INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, sum, mpi_errno);
- } else if (sendbuf != MPI_IN_PLACE)
+ } else if (sendbuf != MPI_IN_PLACE && sum != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
MPIR_ERRTEST_USERBUFFER(recvbuf,recvcounts[comm_ptr->rank],datatype,mpi_errno);
diff --git a/src/mpi/coll/red_scat_block.c b/src/mpi/coll/red_scat_block.c
index b5cf449..b3a8757 100644
--- a/src/mpi/coll/red_scat_block.c
+++ b/src/mpi/coll/red_scat_block.c
@@ -1138,7 +1138,7 @@ int MPI_Reduce_scatter_block(const void *sendbuf, void *recvbuf,
MPIR_ERRTEST_RECVBUF_INPLACE(recvbuf, recvcount, mpi_errno);
if (comm_ptr->comm_kind == MPID_INTERCOMM) {
MPIR_ERRTEST_SENDBUF_INPLACE(sendbuf, recvcount, mpi_errno);
- } else if (sendbuf != MPI_IN_PLACE)
+ } else if (sendbuf != MPI_IN_PLACE && recvcount != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno)
MPIR_ERRTEST_USERBUFFER(recvbuf,recvcount,datatype,mpi_errno);
diff --git a/src/mpi/coll/scan.c b/src/mpi/coll/scan.c
index ee826f6..da6cda3 100644
--- a/src/mpi/coll/scan.c
+++ b/src/mpi/coll/scan.c
@@ -549,7 +549,7 @@ int MPI_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
}
if (mpi_errno != MPI_SUCCESS) goto fn_fail;
- if (sendbuf != MPI_IN_PLACE)
+ if (sendbuf != MPI_IN_PLACE && count != 0)
MPIR_ERRTEST_ALIAS_COLL(sendbuf, recvbuf, mpi_errno);
}
MPID_END_ERROR_CHECKS;
-----------------------------------------------------------------------
Summary of changes:
src/mpi/coll/exscan.c | 2 +-
src/mpi/coll/iexscan.c | 2 +-
src/mpi/coll/ired_scat.c | 5 ++++-
src/mpi/coll/ired_scat_block.c | 2 +-
src/mpi/coll/iscan.c | 2 +-
src/mpi/coll/red_scat.c | 2 +-
src/mpi/coll/red_scat_block.c | 2 +-
src/mpi/coll/scan.c | 2 +-
8 files changed, 11 insertions(+), 8 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-60-gb61fc70
by noreply@mpich.org 07 Jul '14
by noreply@mpich.org 07 Jul '14
07 Jul '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 b61fc70291f34acf1995ca3988207af5038f927b (commit)
via 82d16bac6c2e0d26042b4ff282e1e8e98830ae34 (commit)
from 6b62d390c90af7acdd740bc076c847ce9e8b44c2 (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/b61fc70291f34acf1995ca3988207af50…
commit b61fc70291f34acf1995ca3988207af5038f927b
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Sun May 19 00:17:55 2013 -0500
Hydra-specific patches for hwloc.
Picked up the relevant parts of [a460c1ee], [dab3166d], and [1eb07c6e].
Signed-off-by: Antonio J. Pena <apenya(a)mcs.anl.gov>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
index ca9c00c..9c58e93 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
@@ -9,10 +9,10 @@ ACLOCAL_AMFLAGS = -I ./config
SUBDIRS = src include
if HWLOC_BUILD_STANDALONE
-SUBDIRS += utils tests
+# SUBDIRS += utils tests
# We need doc/ if HWLOC_BUILD_DOXYGEN, or during make install if HWLOC_INSTALL_DOXYGEN.
# There's no INSTALL_SUBDIRS, so always enter doc/ and check HWLOC_BUILD/INSTALL_DOXYGEN there
-SUBDIRS += doc
+# SUBDIRS += doc
endif
# Do not let automake automatically add the non-standalone dirs to the
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
index df42802..c73edc2 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
@@ -1,2 +1,9 @@
-:
-autoreconf ${autoreconf_args:-"-ivf"}
+#!/bin/sh
+
+if [ -n "$MPICH_AUTOTOOLS_DIR" ] ; then
+ autoreconf=${MPICH_AUTOTOOLS_DIR}/autoreconf
+else
+ autoreconf=${AUTORECONF:-autoreconf}
+fi
+
+$autoreconf ${autoreconf_args:-"-ivf"}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c
index 40cda64..6e04290 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c
@@ -98,7 +98,7 @@ static int hwloc_append_diff_obj_attr_string(hwloc_obj_t obj,
static int hwloc_append_diff_obj_attr_uint64(hwloc_obj_t obj,
hwloc_topology_diff_obj_attr_type_t type,
- hwloc_uint64_t index,
+ hwloc_uint64_t idx,
hwloc_uint64_t oldvalue,
hwloc_uint64_t newvalue,
hwloc_topology_diff_t *firstdiffp,
@@ -118,7 +118,7 @@ static int hwloc_append_diff_obj_attr_uint64(hwloc_obj_t obj,
newdiff->obj_attr.obj_depth = obj->depth;
newdiff->obj_attr.obj_index = obj->logical_index;
newdiff->obj_attr.diff.uint64.type = type;
- newdiff->obj_attr.diff.uint64.index = index;
+ newdiff->obj_attr.diff.uint64.index = idx;
newdiff->obj_attr.diff.uint64.oldvalue = oldvalue;
newdiff->obj_attr.diff.uint64.newvalue = newvalue;
hwloc_append_diff(newdiff, firstdiffp, lastdiffp);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
index a42b4f3..13f3f18 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
@@ -2727,7 +2727,7 @@ look_sysfsnode(struct hwloc_topology *topology,
for (index_ = 0; index_ < nbnodes; index_++) {
char nodepath[SYSFS_NUMA_NODE_PATH_LEN];
hwloc_bitmap_t cpuset;
- hwloc_obj_t node, res_obj;
+ hwloc_obj_t node, res_obj __hwloc_attribute_unused;
osnode = indexes[index_];
@@ -4688,7 +4688,7 @@ hwloc_look_linuxfs_pci(struct hwloc_backend *backend)
unsigned os_index;
char path[64];
char value[16];
- size_t read;
+ size_t read __hwloc_attribute_unused;
FILE *file;
if (sscanf(dirent->d_name, "%04x:%02x:%02x.%01x", &domain, &bus, &dev, &func) != 4)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
index cf1d3a1..9335009 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
@@ -1405,7 +1405,7 @@ hwloc_export_obj_userdata_base64(void *reserved,
hwloc__xml_export_state_t state = reserved;
size_t encoded_length;
char *encoded_buffer;
- int ret;
+ int ret __hwloc_attribute_unused;
if (name && hwloc__xml_export_check_buffer(name, strlen(name)) < 0) {
errno = EINVAL;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
index d5d1c84..09545e0 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
@@ -1055,17 +1055,19 @@ hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t paren
if (obj->cpuset && (!curcpuset || hwloc__object_cpusets_compare_first(obj, *current) < 0)) {
static int reported = 0;
if (!reported && !hwloc_hide_errors()) {
- char *a = "NULL", *b;
- if (curcpuset)
- hwloc_bitmap_asprintf(&a, curcpuset);
+ char *a, *b;
hwloc_bitmap_asprintf(&b, obj->cpuset);
fprintf(stderr, "****************************************************************************\n");
fprintf(stderr, "* hwloc has encountered an out-of-order topology discovery.\n");
- fprintf(stderr, "* An object with (complete) cpuset %s was inserted after object with %s\n", b, a);
+ if (curcpuset) {
+ hwloc_bitmap_asprintf(&a, curcpuset);
+ fprintf(stderr, "* An object with (complete) cpuset %s was inserted after object with %s\n", b, a);
+ free(a);
+ } else {
+ fprintf(stderr, "* An object with (complete) cpuset %s was inserted after object with NULL\n", b);
+ }
fprintf(stderr, "* Please check that your input topology (XML file, etc.) is valid.\n");
fprintf(stderr, "****************************************************************************\n");
- if (curcpuset)
- free(a);
free(b);
reported = 1;
}
http://git.mpich.org/mpich.git/commitdiff/82d16bac6c2e0d26042b4ff282e1e8e98…
commit 82d16bac6c2e0d26042b4ff282e1e8e98830ae34
Author: Pavan Balaji <balaji(a)anl.gov>
Date: Sat Jul 5 06:18:16 2014 -0500
Upgraded to hwloc-1.9
No reviewer.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
index d41f485..ca9c00c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009 inria. All rights reserved.
+# Copyright © 2009-2014 Inria. All rights reserved.
# Copyright © 2009 Université Bordeaux 1
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -9,10 +9,10 @@ ACLOCAL_AMFLAGS = -I ./config
SUBDIRS = src include
if HWLOC_BUILD_STANDALONE
-# SUBDIRS += utils tests
+SUBDIRS += utils tests
# We need doc/ if HWLOC_BUILD_DOXYGEN, or during make install if HWLOC_INSTALL_DOXYGEN.
# There's no INSTALL_SUBDIRS, so always enter doc/ and check HWLOC_BUILD/INSTALL_DOXYGEN there
-# SUBDIRS += doc
+SUBDIRS += doc
endif
# Do not let automake automatically add the non-standalone dirs to the
@@ -41,40 +41,23 @@ EXTRA_DIST = \
config/hwloc_get_version.sh \
config/distscript.csh
+# Only install entire visual studio subdirectory if we're building in standalone mode
if HWLOC_BUILD_STANDALONE
-#
-# Double check that we generated both the doxygen docs and a new copy
-# of the top-level README file.
-#
-cannot-dist:
- @echo "ERROR: Did not build both of the doxygen docs and README."
- @echo "ERROR: This tarball is not complete!"
- @echo "ERROR: Cowardly refusing to complete successfully..."
- @exit 1
+EXTRA_DIST += contrib/windows
+endif
-# Refuse to make dist if we can't make the doxygen stuff (note that
-# BUILD_DOXYGEN will automatically be false if we're not building
-# standalone).
-if !HWLOC_BUILD_DOXYGEN
-dist-hook: cannot-dist
-else
-if !HWLOC_BUILD_README
-dist-hook: cannot-dist
-else
+if HWLOC_BUILD_STANDALONE
dist-hook:
csh "$(top_srcdir)/config/distscript.csh" "$(top_srcdir)" "$(distdir)" "$(HWLOC_VERSION)"
-endif HWLOC_BUILD_README
-endif HWLOC_BUILD_DOXYGEN
endif HWLOC_BUILD_STANDALONE
#
-# Build the top-level README file
+# Build the documenation and top-level README file
#
-
if HWLOC_BUILD_STANDALONE
.PHONY: doc readme
doc readme:
- $(MAKE) -C doc readme
+ $(MAKE) -C doc
endif HWLOC_BUILD_STANDALONE
if HWLOC_BUILD_STANDALONE
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS b/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
index 9ff170f..93426da 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
@@ -1,5 +1,5 @@
Copyright © 2009 CNRS
-Copyright © 2009-2013 Inria. All rights reserved.
+Copyright © 2009-2014 Inria. All rights reserved.
Copyright © 2009-2013 Université Bordeaux 1
Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
@@ -17,6 +17,76 @@ bug fixes (and other actions) for each version of hwloc since version
in v0.9.1).
+Version 1.9.0
+-------------
+* API
+ + Add hwloc_obj_type_sscanf() to extend hwloc_obj_type_of_string() with
+ type-specific attributes such as Cache/Group depth and Cache type.
+ hwloc_obj_type_of_string() is moved to hwloc/deprecated.h.
+ + Add hwloc_linux_get_tid_last_cpu_location() for retrieving the
+ last CPU where a Linux thread given by TID ran.
+ + Add hwloc_distrib() to extend the old hwloc_distribute[v]() functions.
+ hwloc_distribute[v]() is moved to hwloc/deprecated.h.
+ + Don't mix total and local memory when displaying verbose object attributes
+ with hwloc_obj_attr_snprintf() or in lstopo.
+* Backends
+ + Add CPUVendor, CPUModelNumber and CPUFamilyNumber info attributes for
+ x86, ia64 and Xeon Phi sockets on Linux, to extend the x86-specific
+ support added in v1.8.1. Requested by Ralph Castain.
+ + Add many CPU- and Platform-related info attributes on ARM and POWER
+ platforms, in the Machine and Socket objects.
+ + Add CUDA info attributes describing the number of multiprocessors and
+ cores and the size of the global, shared and L2 cache memories in CUDA
+ OS devices.
+ + Add OpenCL info attributes describing the number of compute units and
+ the global memory size in OpenCL OS devices.
+ + The synthetic backend now accepts extended types such as L2Cache, L1i or
+ Group3. lstopo also exports synthetic strings using these extended types.
+* Tools
+ + lstopo
+ - Do not overwrite output files by default anymore.
+ Pass -f or --force to enforce it.
+ - Display OpenCL, CUDA and Xeon Phi numbers of cores and memory sizes
+ in the graphical output.
+ - Fix export to stdout when specifying a Cairo-based output type
+ with --of.
+ + hwloc-ps
+ - Add -e or --get-last-cpu-location to report where processes/threads
+ run instead of where they are bound.
+ - Report locations as likely-more-useful objects such as Cores or Sockets
+ instead of Caches when possible.
+ + hwloc-bind
+ - Fix failure on Windows when not using --pid.
+ - Add -e as a synonym to --get-last-cpu-location.
+ + hwloc-distrib
+ - Add --reverse to distribute using last objects first and singlify
+ into last bits first. Thanks to Jirka Hladky for the suggestion.
+ + hwloc-info
+ - Report unified caches when looking for data or instruction cache
+ ancestor objects.
+* Misc
+ + Add experimental Visual Studio support under contrib/windows.
+ Thanks to Eloi Gaudry for his help and for providing the first draft.
+ + Fix some overzealous assertions and warnings about the ordering of
+ objects on a level with respect to cpusets. The ordering is only
+ guaranteed for complete cpusets (based on the first bit in sets).
+ + Fix some memory leaks when importing xml diffs and when exporting a
+ "too complex" entry.
+
+
+Version 1.8.1
+-------------
+* Fix the cpuid code on Windows 64bits so that the x86 backend gets
+ enabled as expected and can populate CPU information.
+ Thanks to Robin Scher for reporting the problem.
+* Add CPUVendor/CPUModelNumber/CPUFamilyNumber attributes when running
+ on x86 architecture. Thanks to Ralph Castain for the suggestion.
+* Work around buggy BIOS reporting duplicate NUMA nodes on Linux.
+ Thanks to Jeff Becker for reporting the problem and testing the patch.
+* Add a name to the lstopo graphical window. Thanks to Michael Prokop
+ for reporting the issue.
+
+
Version 1.8.0
-------------
* New components
@@ -330,7 +400,7 @@ Version 1.5.0
- Packagers splitting lstopo and lstopo-no-graphics into different
packages are advised to use the alternatives system so that lstopo
points to the best available binary.
- + Instruction caches are enabled in lstopo by default. User --no-icaches
+ + Instruction caches are enabled in lstopo by default. Use --no-icaches
to disable them.
+ Add -t/--threads to show threads in hwloc-ps.
* Removal of obsolete components
@@ -398,7 +468,7 @@ Version 1.4.1
* Fix helpers converting from Linux libnuma to hwloc (hwloc/linux-libnuma.h)
in case of out-of-order NUMA node ids.
* Fix some overzealous assertions in the distance grouping code.
-* Workaround BIOS reporting empty I/O locality in cuda and openfabrics
+* Workaround BIOS reporting empty I/O locality in CUDA and OpenFabrics
helpers on Linux. Thanks to Albert Solernou for reporting the problem.
* Install a valgrind suppressions file hwloc-valgrind.supp (see the FAQ).
* Fix memory binding documentation. Thanks to Karl Napf for reporting the
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/README b/src/pm/hydra/tools/topo/hwloc/hwloc/README
index 4628e34..babe22d 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/README
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/README
@@ -25,7 +25,8 @@ using PLPA has already switched to hwloc.
hwloc supports the following operating systems:
* Linux (including old kernels not having sysfs topology information, with
- knowledge of cpusets, offline CPUs, ScaleMP vSMP, and Kerrighed support)
+ knowledge of cpusets, offline CPUs, ScaleMP vSMP, NumaScale NumaConnect,
+ and Kerrighed support)
* Solaris
* AIX
* Darwin / OS X
@@ -678,7 +679,7 @@ the most recent version of the BIOS for your machine.
If those things fail, contact us on the mailing list for additional help.
Please attach the output of lstopo after having given the --enable-debug option
to ./configure and rebuilt completely, to get debugging output. Also attach the
-/proc + /sys tarball generated by the installed script hwloc-gather-topology.sh
+/proc + /sys tarball generated by the installed script hwloc-gather-topology
when submitting problems about Linux, or send the output of kstat cpu_info in
the Solaris case, or the output of sysctl hw in the Darwin or BSD cases.
@@ -717,7 +718,3 @@ The documentation chapters include
Make sure to have had a look at those too!
--------------------------------------------------------------------------------
-
-Generated on Tue Sep 10 2013 16:08:12 for Hardware Locality (hwloc) by
-doxygen 1.8.4
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION b/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
index 66a0341..f146c49 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
@@ -12,7 +12,7 @@ snapshot_version=gitclone
# <major>.<minor>.<release>. If release is zero, then it is omitted.
major=1
-minor=8
+minor=9
release=0
# greek is used for alpha or beta release tags. If it is non-empty,
@@ -39,4 +39,4 @@ date="Unreleased developer copy"
# 2. Version numbers are described in the Libtool current:revision:age
# format.
-libhwloc_so_version=9:0:4
+libhwloc_so_version=10:0:5
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
index c73edc2..df42802 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
@@ -1,9 +1,2 @@
-#!/bin/sh
-
-if [ -n "$MPICH_AUTOTOOLS_DIR" ] ; then
- autoreconf=${MPICH_AUTOTOOLS_DIR}/autoreconf
-else
- autoreconf=${AUTORECONF:-autoreconf}
-fi
-
-$autoreconf ${autoreconf_args:-"-ivf"}
+:
+autoreconf ${autoreconf_args:-"-ivf"}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh b/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh
index e528223..720783e 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh
@@ -10,7 +10,7 @@
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
-# Copyright © 2010 inria. All rights reserved.
+# Copyright © 2010-2014 Inria. All rights reserved.
# Copyright © 2009-2013 Cisco Systems, Inc. All rights reserved.
# $COPYRIGHT$
#
@@ -39,14 +39,6 @@ endif
#========================================================================
-if ("$srcdir" != "$builddir") then
- set vpath=1
- set vpath_msg=yes
-else
- set vpath=0
- set vpath_msg=no
-endif
-
set start=`date`
cat <<EOF
@@ -54,7 +46,6 @@ Creating hwloc distribution
In directory: `pwd`
Srcdir: $srcdir
Builddir: $builddir
-VPATH: $vpath_msg
Version: $HWLOC_VERSION
Started: $start
@@ -68,59 +59,20 @@ if (! -d "$distdir") then
exit 1
endif
-#
-# VPATH builds only work if the srcdir has valid docs already built.
-# If we're VPATH and the srcdir doesn't have valid docs, then fail.
-#
-
-if ($vpath == 1 && ! -d $srcdir/doc/doxygen-doc) then
- echo "*** This is a VPATH 'make dist', but the srcdir does not already"
- echo "*** have a doxygen-doc tree built. hwloc's config/distscript.csh"
- echo "*** requores the docs to be built in the srcdir before executing"
- echo "*** 'make dist' in a VPATH build."
+if (! -d $srcdir/doc/doxygen-doc) then
+ echo "*** The srcdir does not already have a doxygen-doc tree built."
+ echo "*** hwloc's config/distscript.csh requires the docs to be built"
+ echo "*** in the srcdir before executing 'make dist'."
exit 1
endif
-#
-# If we're not VPATH, force the generation of new doxygen documentation
-#
-
-if ($vpath == 0) then
- # Not VPATH
- echo "*** Making new doxygen documentation (doxygen-doc tree)"
- echo "*** Directory: srcdir: $srcdir, distdir: $distdir, pwd: `pwd`"
- cd doc
- # We're still in the src tree, so kill any previous doxygen-docs
- # tree and make a new one.
- chmod -R a=rwx doxygen-doc
- rm -rf doxygen-doc
- make
- if ($status != 0) then
- echo ERROR: generating doxygen docs failed
- echo ERROR: cannot continue
- exit 1
- endif
-
- # Make new README file
- echo "*** Making new README"
- make readme
- if ($status != 0) then
- echo ERROR: generating new README failed
- echo ERROR: cannot continue
- exit 1
- endif
-else
- echo "*** This is a VPATH build; assuming that the doxygen docs and REAME"
- echo "*** are current in the srcdir (i.e., we'll just copy those)"
-endif
-
echo "*** Copying doxygen-doc tree to dist..."
echo "*** Directory: srcdir: $srcdir, distdir: $distdir, pwd: `pwd`"
-chmod -R a=rwx $distdir/doc/doxygen-doc
-echo rm -rf $distdir/doc/doxygen-doc
-rm -rf $distdir/doc/doxygen-doc
-echo cp -rpf $srcdir/doc/doxygen-doc $distdir/doc
-cp -rpf $srcdir/doc/doxygen-doc $distdir/doc
+chmod -R a=rwx $distdir/doc/doxygen-doc/
+echo rm -rf $distdir/doc/doxygen-doc/
+rm -rf $distdir/doc/doxygen-doc/
+echo cp -rpf $srcdir/doc/doxygen-doc/ $distdir/doc
+cp -rpf $srcdir/doc/doxygen-doc/ $distdir/doc
echo "*** Copying new README"
ls -lf $distdir/README
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4 b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
index 3806933..ef3c53e 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
@@ -1,6 +1,6 @@
dnl -*- Autoconf -*-
dnl
-dnl Copyright © 2009-2013 Inria. All rights reserved.
+dnl Copyright © 2009-2014 Inria. All rights reserved.
dnl Copyright (c) 2009-2012 Université Bordeaux 1
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
@@ -991,27 +991,42 @@ EOF])
fi
# don't add LIBS/CFLAGS/REQUIRES yet, depends on plugins
- # Try to compile the cpuid inlines
- AC_MSG_CHECKING([for cpuid])
+ # Try to compile the x86 cpuid inlines
+ AC_MSG_CHECKING([for x86 cpuid])
old_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -I$HWLOC_top_srcdir/include"
+ # We need hwloc_uint64_t but we can't use hwloc/autogen/config.h before configure ends.
+ # So pass #include/#define manually here for now.
+ CPUID_CHECK_HEADERS=
+ CPUID_CHECK_DEFINE=
+ if test "x$hwloc_windows" = xyes; then
+ X86_CPUID_CHECK_HEADERS="#include <windows.h>"
+ X86_CPUID_CHECK_DEFINE="#define hwloc_uint64_t DWORDLONG"
+ else
+ X86_CPUID_CHECK_DEFINE="#define hwloc_uint64_t uint64_t"
+ if test "x$ac_cv_header_stdint_h" = xyes; then
+ X86_CPUID_CHECK_HEADERS="#include <stdint.h>"
+ fi
+ fi
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <stdio.h>
+ $X86_CPUID_CHECK_HEADERS
+ $X86_CPUID_CHECK_DEFINE
#define __hwloc_inline
- #include <private/cpuid.h>
+ #include <private/cpuid-x86.h>
]], [[
- if (hwloc_have_cpuid()) {
+ if (hwloc_have_x86_cpuid()) {
unsigned eax = 0, ebx, ecx = 0, edx;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
- printf("highest cpuid %x\n", eax);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
+ printf("highest x86 cpuid %x\n", eax);
return 0;
}
]])],
[AC_MSG_RESULT([yes])
- AC_DEFINE(HWLOC_HAVE_CPUID, 1, [Define to 1 if you have cpuid])
- hwloc_have_cpuid=yes],
+ AC_DEFINE(HWLOC_HAVE_X86_CPUID, 1, [Define to 1 if you have x86 cpuid])
+ hwloc_have_x86_cpuid=yes],
[AC_MSG_RESULT([no])])
- if test "x$hwloc_have_cpuid" = xyes; then
+ if test "x$hwloc_have_x86_cpuid" = xyes; then
hwloc_components="$hwloc_components x86"
fi
CPPFLAGS="$old_CPPFLAGS"
@@ -1241,7 +1256,7 @@ AC_DEFUN([HWLOC_DO_AM_CONDITIONALS],[
AM_CONDITIONAL([HWLOC_HAVE_X86_32], [test "x$hwloc_x86_32" = "xyes"])
AM_CONDITIONAL([HWLOC_HAVE_X86_64], [test "x$hwloc_x86_64" = "xyes"])
- AM_CONDITIONAL([HWLOC_HAVE_CPUID], [test "x$hwloc_have_cpuid" = "xyes"])
+ AM_CONDITIONAL([HWLOC_HAVE_X86_CPUID], [test "x$hwloc_have_x86_cpuid" = "xyes"])
AM_CONDITIONAL([HWLOC_HAVE_PLUGINS], [test "x$hwloc_have_plugins" = "xyes"])
AM_CONDITIONAL([HWLOC_PCI_BUILD_STATIC], [test "x$hwloc_pci_component" = "xstatic"])
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4 b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
index bfc3f36..55ac182 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
@@ -1,6 +1,6 @@
dnl -*- Autoconf -*-
dnl
-dnl Copyright (c) 2009-2012 Inria. All rights reserved.
+dnl Copyright (c) 2009-2014 Inria. All rights reserved.
dnl Copyright (c) 2009, 2011 Université Bordeaux 1
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
@@ -9,7 +9,7 @@ dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
-dnl Copyright © 2010-2012 Inria. All rights reserved.
+dnl Copyright © 2010-2014 Inria. All rights reserved.
dnl Copyright © 2006-2011 Cisco Systems, Inc. All rights reserved.
dnl
dnl See COPYING in top-level directory.
@@ -117,8 +117,10 @@ EOF
AC_MSG_CHECKING([if this is a developer build])
AS_IF([test ! -d "$srcdir/.hg" -a ! -d "$srcdir/.git"],
- [AC_MSG_RESULT([no (doxygen generation is optional)])],
- [AC_MSG_RESULT([yes])])
+ [AC_MSG_RESULT([no (doxygen generation is optional)])
+ test "x$enable_doxygen" = x && enable_doxygen=no],
+ [AC_MSG_RESULT([yes])
+ test "x$enable_doxygen" = x && enable_doxygen=yes])
# Generating the doxygen output requires a few tools. If we
# don't have all of them, refuse the build the docs.
@@ -190,7 +192,7 @@ EOF
# See if we want to install the doxygen docs
AC_MSG_CHECKING([if will install doxygen docs])
AS_IF([test "x$hwloc_generate_doxs" = "xyes" -o \
- -f "$srcdir/doc/doxygen-doc/man/man3/hwloc_distribute.3" -a \
+ -f "$srcdir/doc/doxygen-doc/man/man3/hwloc_distrib.3" -a \
-f "$srcdir/doc/doxygen-doc/hwloc-a4.pdf" -a \
-f "$srcdir/doc/doxygen-doc/hwloc-letter.pdf"],
[hwloc_install_doxs=yes],
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/hwloc-windows-build.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/hwloc-windows-build.sh
new file mode 100755
index 0000000..2b29aff
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/hwloc-windows-build.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+#
+# Copyright © 20012-2014 Inria. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+set -e
+set -x
+
+oldPATH=$PATH
+
+tarball=$(ls -tr hwloc-*.tar.gz | tail -1)
+basename=$(basename $tarball .tar.gz)
+version=$(echo $basename | cut -d- -f2)
+
+test -d $basename && chmod -R u+rwX $basename && rm -rf $basename
+tar xfz $tarball
+
+mkdir ${basename}/build32
+cd ${basename}/build32
+winball=hwloc-win32-build-${version}
+prefix=${PWD}/../${winball}
+export PATH=/c/Builds:/c/Builds/mingw32/bin/:/c/Builds/mingw64/bin/:/c/Builds/mingw32/i686-w64-mingw32/lib:"/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin":"/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE":$oldPATH
+../configure --prefix=$prefix --enable-static --host=i686-w64-mingw32 CC_FOR_BUILD=x86_64-w64-mingw32-gcc
+make
+make install
+#make install-winball || true # not needed anymore in v1.7+
+make check
+utils/lstopo-no-graphics -v
+cd ..
+zip -r ../${winball}.zip ${winball}
+test -f ${winball}/lib/libhwloc.lib || false
+cd ..
+
+
+mkdir ${basename}/build64
+cd ${basename}/build64
+winball=hwloc-win64-build-${version}
+prefix=${PWD}/../${winball}
+export PATH=/c/Builds:/c/Builds/mingw64/bin/:/c/Builds/mingw32/i686-w64-mingw32/lib/:"/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin":"/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE":$oldPATH
+../configure --prefix=$prefix --enable-static --host=x86_64-w64-mingw32
+make
+make install
+#make install-winball || true # not needed anymore in v1.7+
+make check
+utils/lstopo-no-graphics -v
+cd ..
+zip -r ../${winball}.zip ${winball}
+test -f ${winball}/lib/libhwloc.lib || false
+cd ..
+
+PATH=$oldPATH
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball
index 485e686..7c6011a 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball
@@ -27,7 +27,7 @@
# Version of auto tools that we want
#
-AM_TARGET_VERSION=1.14
+AM_TARGET_VERSION=1.14.1
AC_TARGET_VERSION=2.69
LT_TARGET_VERSION=2.4.2
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/README.txt b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/README.txt
new file mode 100644
index 0000000..70f5339
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/README.txt
@@ -0,0 +1,10 @@
+Github doesn't send good diff emails, so we do it ourselves.
+
+On mtt.open-mpi.org, we have a git clone from github. We then also
+have a local naked git clone that has a post-receive hook that sends
+diff emails.
+
+So via cron, we git pull from github, and then git push to the local
+naked git repo, which then triggers sending the emails.
+
+It's not perfect, but it seems to be good enough.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/github-send-commit-mails.pl b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/github-send-commit-mails.pl
new file mode 100755
index 0000000..58f8cf7
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/github-send-commit-mails.pl
@@ -0,0 +1,42 @@
+#!/usr/bin/env perl
+
+use strict;
+
+use Cwd;
+
+die "Must specify location of source git repo"
+ if ($#ARGV < 0);
+
+sub doit {
+ my ($cmd, $repo) = @_;
+
+ my $rc;
+ my $outfile = "/tmp/github-send-email-tmp.$$";
+ unlink($outfile);
+ $rc = system("$cmd >$outfile 2>&1");
+ if (0 != $rc) {
+ print "Command failed:
+
+Command: $cmd
+Repo: $repo
+Output:\n";
+ open(IN, $outfile);
+ print $_
+ while (<IN>);
+ close(IN);
+ die "Aborting";
+ }
+ unlink($outfile);
+}
+
+foreach my $src_repo (@ARGV) {
+ die "Specified location of source git repo is invalid"
+ if (! -d $src_repo);
+ chdir($src_repo);
+ die "Could not chdir to $src_repo"
+ if (getcwd() != $src_repo);
+
+ doit("/u/mpiteam/git/local/bin/git fetch", $src_repo);
+ doit("/u/mpiteam/git/local/bin/git push email", $src_repo);
+}
+
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/build-server/hwloc-nightly-tarball.sh b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/build-server/hwloc-nightly-tarball.sh
new file mode 100755
index 0000000..d3912a9
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/build-server/hwloc-nightly-tarball.sh
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+#####
+#
+# Configuration options
+#
+#####
+
+# e-mail address to send results to
+results_addr=hwloc-devel(a)open-mpi.org
+
+# git repository URL
+code_uri=https://github.com/open-mpi/hwloc.git
+raw_uri=https://raw.github.com/open-mpi/hwloc
+
+# where to put built tarballs
+outputroot=/l/osl/www/www.open-mpi.org/software/hwloc/nightly
+
+# where to find the build script
+script_uri=contrib/nightly/make_snapshot_tarball
+
+# The tarballs to make
+if [ $# -eq 0 ] ; then
+ # Branches v1.6 and earlier were not updated to build nightly
+ # snapshots from git, so only check v1.7 and later
+ branches="master v1.7"
+else
+ branches=$@
+fi
+
+# Build root - scratch space
+build_root=/home/mpiteam/hwloc/nightly-tarball-build-root
+
+export PATH=$HOME/local/bin:$PATH
+export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH
+
+#####
+#
+# Actually do stuff
+#
+#####
+
+# load the modules configuration
+. /etc/profile.d/modules.sh
+module use ~/modules
+
+# get our nightly build script
+mkdir -p $build_root
+cd $build_root
+
+# Loop making them
+for branch in $branches; do
+ # Form a URL-specific script name
+ script=$branch-`basename $script_uri`
+
+ wget --quiet --no-check-certificate --tries=10 $raw_uri/$branch/$script_uri -O $script
+ if test ! $? -eq 0 ; then
+ echo "wget of hwloc nightly tarball create script failed."
+ if test -f $script ; then
+ echo "Using older version of $script for this run."
+ else
+ echo "No build script available. Aborting."
+ exit 1
+ fi
+ fi
+ chmod +x $script
+
+ module load "autotools/hwloc-$branch"
+ module load "tex-live/hwloc-$branch"
+
+ ./$script \
+ $build_root/$branch \
+ $results_addr \
+ $outputroot/$branch \
+ $code_uri \
+ $branch \
+ >/dev/null 2>&1
+
+ module unload autotools tex-live
+done
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/make_snapshot_tarball b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/make_snapshot_tarball
index f069caa..3adbc71 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/make_snapshot_tarball
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/make_snapshot_tarball
@@ -10,7 +10,7 @@
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
-# Copyright © 2006-2013 Cisco Systems, Inc. All rights reserved.
+# Copyright © 2006-2014 Cisco Systems, Inc. All rights reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
@@ -216,6 +216,10 @@ do_command "./autogen.sh"
# do config
do_command "./configure"
+# because of the doxygen setup, we now much run "make doc" before we
+# run "make dist".
+do_command "make doc"
+
# Do make distcheck (which will invoke config/distscript.csh to set
# the right values in VERSION). distcheck does many things; we need
# to ensure it doesn't pick up any other installs via LD_LIBRARY_PATH.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
index 8b54595..4709429 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# Copyright (c) 2010-2013 Cisco Systems, Inc. All rights reserved.
-# Copyright (c) 2011-2013 Inria. All rights reserved.
+# Copyright (c) 2011-2014 Inria. All rights reserved.
# $COPYRIGHT$
#
@@ -55,6 +55,8 @@ my @tokens;
push(@tokens, "See COPYING in top-level directory");
push(@tokens, "\\\$COPYRIGHT\\\$");
+my $commit = $ARGV[0];
+
# Override the defaults if some values are set in the environment
$my_search_name = $ENV{HWLOC_COPYRIGHT_SEARCH_NAME}
if (defined($ENV{HWLOC_COPYRIGHT_SEARCH_NAME}));
@@ -83,8 +85,13 @@ print "==> Top-level hwloc dir: $top\n";
print "==> Current directory: $start\n";
my $cmd;
-$cmd = "LANG=C git status . | sed -n -e 's/^\#[ ]*modified:[ ]*/M /p' -e 's/^\#[ ]* new file:[ ]*/A /p'"
- if (-d "$top/.git" && ! -d "$top/.svn");
+if (-d "$top/.git") {
+ if ($commit) {
+ $cmd = "LANG=C git show --stat --pretty=format: $commit | sed -n -r -e 's/^[ ]*([^ ].*[^ ])[ ]*\\|[ ]*[0-9]+[ ]*\\+.*/\\1/p'"
+ } else {
+ $cmd = "LANG=C git status . | sed -n -r -e 's/^\#?[ ]*(modified|new file)[ ]*:[ ]+(.+)/\\2/p'"
+ }
+}
die "Can't find git meta dir"
if (!defined($cmd));
@@ -95,12 +102,7 @@ open(CMD, "$cmd|") || die "Can't run command";
my @files;
while (<CMD>) {
chomp;
- if ($_ =~ /^M/ || $_ =~ /^A/) {
- my ($state, $filename, $extra) = split(/\s+/, $_);
- $filename = $extra
- if ($filename eq "+");
- push(@files, $filename);
- }
+ push (@files, $_);
}
close(CMD);
@@ -195,7 +197,7 @@ foreach my $f (@files) {
my $newf = "$f.new-copyright";
unlink($newf);
open(FILE, ">$newf") || die "Can't open file: $newf";
- print FILE join(//, @lines);
+ print FILE join("", @lines);
close(FILE);
# Now replace the old one
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README
new file mode 100644
index 0000000..04a2ae9
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README
@@ -0,0 +1,33 @@
+This Visual Studio support is experimental.
+Thanks to Eloi Gaudry for contributing the first draft of files.
+
+
+No PlatformToolset is specified, so that the default target is always
+used during build.
+That means your build may not be compatible with older systems.
+Enforce a specific toolset before building if needed.
+
+
+hwloc-assembler-remote is not built because it requires a hardwired
+path to hwloc-assembler and it uses ssh.
+
+
+hwloc-ps is not built because it does nothing on Windows anyway.
+Possible code proposed by Eloi Gaudry:
+ // Get the process list snapshot
+ HANDLE hProcessSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
+ // Initialize the process entry structure
+ PROCESSENTRY32 ProcessEntry = { 0 } ;
+ ProcessEntry.dwSize = sizeof(ProcessEntry);
+ // Get the first process info
+ if (Process32First( hProcessSnapShot, &ProcessEntry)) {
+ do {
+ HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessEntry.th32ProcessID) ;
+ if (hProcess) {
+ std::cerr << ProcessEntry.th32ProcessID << "(" << ProcessEntry.szExeFile << ")" << std::endl ;
+ }
+ // check the PROCESSENTRY32 for other members.
+ } while (Process32Next(hProcessSnapShot, &ProcessEntry));
+ // Close the handle
+ CloseHandle( hProcessSnapShot ) ;
+ }
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj
new file mode 100644
index 0000000..ac2f3fd
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-bind</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-annotate.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters
new file mode 100644
index 0000000..cad9fee
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-annotate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\hwloc-calc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj
new file mode 100644
index 0000000..91eda43
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-bind</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-assembler.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj.filters
new file mode 100644
index 0000000..697ae29
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj.filters
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-assembler.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj
new file mode 100644
index 0000000..4a2b64d
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-bind</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-bind.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ <ClInclude Include="..\..\utils\hwloc-calc.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters
new file mode 100644
index 0000000..5e739fb
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-bind.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\hwloc-calc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj
new file mode 100644
index 0000000..3028a54
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-calc</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-calc.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ <ClInclude Include="..\..\utils\hwloc-calc.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters
new file mode 100644
index 0000000..99fe6bc
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-calc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\hwloc-calc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj
new file mode 100644
index 0000000..5f2bf1d
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-bind</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-diff.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters
new file mode 100644
index 0000000..e4d8e34
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-diff.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj
new file mode 100644
index 0000000..63b762d
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-bind</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-distances.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters
new file mode 100644
index 0000000..5e141c2
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-distances.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj
new file mode 100644
index 0000000..a101786
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-bind</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-distrib.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters
new file mode 100644
index 0000000..86c197b
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-distrib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj
new file mode 100644
index 0000000..955c0f2
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-info</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-info.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ <ClInclude Include="..\..\utils\hwloc-calc.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters
new file mode 100644
index 0000000..e79161a
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-info.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\hwloc-calc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj
new file mode 100644
index 0000000..813ebfe
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>hwloc-bind</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-patch.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters
new file mode 100644
index 0000000..637529a
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\hwloc-patch.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln
new file mode 100644
index 0000000..5f4f4e4
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln
@@ -0,0 +1,113 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libhwloc", "libhwloc.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB8D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lstopo-no-graphics", "lstopo-no-graphics.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB8E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-annotate", "hwloc-annotate.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB8F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-assembler", "hwloc-assembler.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB90}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-bind", "hwloc-bind.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB91}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-calc", "hwloc-calc.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB92}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-diff", "hwloc-diff.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB93}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-distances", "hwloc-distances.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB94}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-distrib", "hwloc-distrib.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB95}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-info", "hwloc-info.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB96}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hwloc-patch", "hwloc-patch.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB97}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D} = {9DE76C6D-4773-4766-9F93-69C56166CB8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lstopo", "lstopo.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB98}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB8E} = {9DE76C6D-4773-4766-9F93-69C56166CB8E}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lstopo-win", "lstopo-win.vcxproj", "{9DE76C6D-4773-4766-9F93-69C56166CB99}"
+ ProjectSection(ProjectDependencies) = postProject
+ {9DE76C6D-4773-4766-9F93-69C56166CB98} = {9DE76C6D-4773-4766-9F93-69C56166CB98}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ ReleaseDll|x64 = ReleaseDll|x64
+ ReleaseStatic|x64 = ReleaseStatic|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseDll|x64.Build.0 = ReleaseDll|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8D}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8E}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8E}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8E}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8F}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8F}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB8F}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB90}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB90}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB90}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB91}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB91}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB91}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB92}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB92}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB92}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB93}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB93}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB93}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB94}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB94}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB94}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB95}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB95}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB95}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB96}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB96}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB96}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB97}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB97}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB97}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB98}.ReleaseDll|x64.ActiveCfg = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB98}.ReleaseDll|x64.Build.0 = Release|x64
+ {9DE76C6D-4773-4766-9F93-69C56166CB98}.ReleaseStatic|x64.ActiveCfg = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h
new file mode 100644
index 0000000..5c8cea6
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+/* The configuration file */
+
+#ifndef HWLOC_CONFIG_H
+#define HWLOC_CONFIG_H
+
+#define __hwloc_restrict
+#define __hwloc_inline __inline
+
+#define __hwloc_attribute_unused
+#define __hwloc_attribute_malloc
+#define __hwloc_attribute_const
+#define __hwloc_attribute_pure
+#define __hwloc_attribute_deprecated
+
+/* Defined to 1 if you have the `windows.h' header. */
+#define HWLOC_HAVE_WINDOWS_H 1
+#define hwloc_pid_t HANDLE
+#define hwloc_thread_t HANDLE
+
+#include <windows.h>
+#include <BaseTsd.h>
+typedef DWORDLONG hwloc_uint64_t;
+typedef SSIZE_T ssize_t;
+#define snprintf _snprintf
+#define strcasecmp _stricmp
+#define strncasecmp _strnicmp
+#define strdup _strdup
+#define strtoull _strtoui64
+#define strtoll _strtoi64
+#define S_ISREG(m) ((m)&_S_IFREG)
+#define S_ISDIR( m ) (((m) & S_IFMT) == S_IFDIR)
+#define putenv _putenv
+
+#if defined( _USRDLL ) /* dynamic linkage */
+#if defined( DECLSPEC_EXPORTS )
+#define HWLOC_DECLSPEC __declspec(dllexport)
+#else
+#define HWLOC_DECLSPEC __declspec(dllimport)
+#endif
+#else /* static linkage */
+#define HWLOC_DECLSPEC
+#endif
+
+/* Whether we need to re-define all the hwloc public symbols or not */
+#define HWLOC_SYM_TRANSFORM 0
+
+/* The hwloc symbol prefix */
+#define HWLOC_SYM_PREFIX hwloc_
+
+/* The hwloc symbol prefix in all caps */
+#define HWLOC_SYM_PREFIX_CAPS HWLOC_
+
+#endif /* HWLOC_CONFIG_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj
new file mode 100644
index 0000000..8ff75ec
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8D}</ProjectGuid>
+ <RootNamespace>libhwloc</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="DebugStatic|x64">
+ <Configuration>DebugStatic</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="DebugDll|x64">
+ <Configuration>DebugDll</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseStatic|x64">
+ <Configuration>ReleaseStatic</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseDll|x64">
+ <Configuration>ReleaseDll</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDll|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugStatic|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='DebugDll|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugStatic|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugDll|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugStatic|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugDll|x64'">
+ <PreBuildEvent>
+ <Command>copy /V /Y private_config.h ..\..\include\private\autogen\config.h && copy /V /Y hwloc_config.h ..\..\include\hwloc\autogen\config.h && copy /V /Y static-components.h ..\..\src\static-components.h</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugStatic|x64'">
+ <PreBuildEvent>
+ <Command>copy /V /Y private_config.h ..\..\include\private\autogen\config.h && copy /V /Y hwloc_config.h ..\..\include\hwloc\autogen\config.h && copy /V /Y static-components.h ..\..\src\static-components.h</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseDll|x64'">
+ <PreBuildEvent>
+ <Command>copy /V /Y private_config.h ..\..\include\private\autogen\config.h && copy /V /Y hwloc_config.h ..\..\include\hwloc\autogen\config.h && copy /V /Y static-components.h ..\..\src\static-components.h</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\src</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseStatic|x64'">
+ <PreBuildEvent>
+ <Command>copy /V /Y private_config.h ..\..\include\private\autogen\config.h && copy /V /Y hwloc_config.h ..\..\include\hwloc\autogen\config.h && copy /V /Y static-components.h ..\..\src\static-components.h</Command>
+ </PreBuildEvent>
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\src</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <ImportLibrary>$(OutDir)$(ProjectName).lib</ImportLibrary>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).dll</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\src\base64.c" />
+ <ClCompile Include="..\..\src\bind.c" />
+ <ClCompile Include="..\..\src\bitmap.c" />
+ <ClCompile Include="..\..\src\components.c" />
+ <ClCompile Include="..\..\src\distances.c" />
+ <ClCompile Include="..\..\src\diff.c" />
+ <ClCompile Include="..\..\src\misc.c" />
+ <ClCompile Include="..\..\src\topology-custom.c" />
+ <ClCompile Include="..\..\src\topology-fake.c" />
+ <ClCompile Include="..\..\src\topology-noos.c" />
+ <ClCompile Include="..\..\src\topology-synthetic.c" />
+ <ClCompile Include="..\..\src\topology-windows.c" />
+ <ClCompile Include="..\..\src\topology-x86.c" />
+ <ClCompile Include="..\..\src\topology-xml-nolibxml.c" />
+ <ClCompile Include="..\..\src\topology-xml.c" />
+ <ClCompile Include="..\..\src\topology.c" />
+ <ClCompile Include="..\..\src\traversal.c" />
+ <ClCompile Include="..\..\src\dolib.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\diff.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid-x86.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters
new file mode 100644
index 0000000..2bfb4c7
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\src\base64.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\bind.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\bitmap.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\components.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\distances.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\diff.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\misc.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-custom.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-fake.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-noos.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-synthetic.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-windows.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-x86.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-xml-nolibxml.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology-xml.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\topology.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\traversal.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\src\dolib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\diff.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid-x86.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj
new file mode 100644
index 0000000..7fe3abb
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>lstopo-no-graphics</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\lstopo.c" />
+ <ClCompile Include="..\..\utils\lstopo-color.c" />
+ <ClCompile Include="..\..\utils\lstopo-draw.c" />
+ <ClCompile Include="..\..\utils\lstopo-fig.c" />
+ <ClCompile Include="..\..\utils\lstopo-text.c" />
+ <ClCompile Include="..\..\utils\lstopo-xml.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ <ClInclude Include="..\..\utils\lstopo.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters
new file mode 100644
index 0000000..6a93601
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\lstopo.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-color.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-draw.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-fig.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-text.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-xml.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\lstopo.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj
new file mode 100644
index 0000000..241e047
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>lstopo-no-graphics</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>LSTOPO_HAVE_GRAPHICS=1;PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Windows</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\lstopo.c" />
+ <ClCompile Include="..\..\utils\lstopo-color.c" />
+ <ClCompile Include="..\..\utils\lstopo-draw.c" />
+ <ClCompile Include="..\..\utils\lstopo-fig.c" />
+ <ClCompile Include="..\..\utils\lstopo-text.c" />
+ <ClCompile Include="..\..\utils\lstopo-xml.c" />
+ <ClCompile Include="..\..\utils\lstopo-windows.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ <ClInclude Include="..\..\utils\lstopo.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters
new file mode 100644
index 0000000..525684b
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\lstopo.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-color.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-draw.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-fig.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-text.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-xml.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-windows.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\lstopo.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj
new file mode 100644
index 0000000..cde3495
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{9DE76C6D-4773-4766-9F93-69C56166CB8E}</ProjectGuid>
+ <RootNamespace>lstopo-no-graphics</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <EmbedManifest>true</EmbedManifest>
+ <TargetName>$(ProjectName)-5</TargetName>
+ <IntDir>$(SolutionDir)$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <RuntimeTypeInfo>true</RuntimeTypeInfo>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>LSTOPO_HAVE_GRAPHICS=1;PSAPI_VERSION=1;WIN32;NDEBUG;WIN64;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\..\include;..\..\utils</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
+ <EnableCOMDATFolding>false</EnableCOMDATFolding>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateMapFile>false</GenerateMapFile>
+ <IgnoreSpecificDefaultLibraries>libcmt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
+ <OptimizeReferences>true</OptimizeReferences>
+ <OutputFile>$(OutDir)$(TargetName).exe</OutputFile>
+ <ProgramDatabaseFile>$(OutDir)$(ProjectName).pdb</ProgramDatabaseFile>
+ <ShowProgress>LinkVerboseLib</ShowProgress>
+ <SubSystem>Console</SubSystem>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetMachine>MachineX64</TargetMachine>
+ <LinkErrorReporting>NoErrorReport</LinkErrorReporting>
+ <AdditionalLibraryDirectories>$(SolutionDir)$(Platform)\ReleaseDll;$(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>libhwloc.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\lstopo.c" />
+ <ClCompile Include="..\..\utils\lstopo-color.c" />
+ <ClCompile Include="..\..\utils\lstopo-draw.c" />
+ <ClCompile Include="..\..\utils\lstopo-fig.c" />
+ <ClCompile Include="..\..\utils\lstopo-text.c" />
+ <ClCompile Include="..\..\utils\lstopo-xml.c" />
+ <ClCompile Include="..\..\utils\lstopo-windows.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h" />
+ <ClInclude Include="..\..\include\private\autogen\config.h" />
+ <ClInclude Include="..\..\include\hwloc.h" />
+ <ClInclude Include="..\..\include\hwloc\bitmap.h" />
+ <ClInclude Include="..\..\include\hwloc\helper.h" />
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h" />
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
+ <ClInclude Include="..\..\include\hwloc\plugins.h" />
+ <ClInclude Include="..\..\include\hwloc\rename.h" />
+ <ClInclude Include="..\..\include\private\components.h" />
+ <ClInclude Include="..\..\include\private\cpuid.h" />
+ <ClInclude Include="..\..\include\private\debug.h" />
+ <ClInclude Include="..\..\include\private\misc.h" />
+ <ClInclude Include="..\..\include\private\private.h" />
+ <ClInclude Include="..\..\include\private\xml.h" />
+ <ClInclude Include="..\..\utils\misc.h" />
+ <ClInclude Include="..\..\utils\lstopo.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters
new file mode 100644
index 0000000..525684b
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\utils\lstopo.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-color.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-draw.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-fig.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-text.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-xml.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\utils\lstopo-windows.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\include\hwloc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\bitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\myriexpress.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\plugins.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\rename.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\components.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\cpuid.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\debug.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\private.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\xml.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\private\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\hwloc\autogen\config.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\utils\lstopo.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h
new file mode 100644
index 0000000..4ba1760
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h
@@ -0,0 +1,695 @@
+/*
+ * Copyright © 2009, 2011, 2012 CNRS. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009, 2011, 2012 Université Bordeaux 1. All rights reserved.
+ * Copyright © 2009 Cisco Systems, Inc. All rights reserved.
+ * $COPYRIGHT$
+ *
+ * Additional copyrights may follow
+ *
+ * $HEADER$
+ */
+
+#ifndef HWLOC_CONFIGURE_H
+#define HWLOC_CONFIGURE_H
+
+#define DECLSPEC_EXPORTS
+
+#define HWLOC_HAVE_MSVC_CPUIDEX 1
+
+/* Define to 1 if the system has the type `CACHE_DESCRIPTOR'. */
+#define HAVE_CACHE_DESCRIPTOR 0
+
+/* Define to 1 if the system has the type `CACHE_RELATIONSHIP'. */
+#define HAVE_CACHE_RELATIONSHIP 0
+
+/* Define to 1 if you have the `clz' function. */
+/* #undef HAVE_CLZ */
+
+/* Define to 1 if you have the `clzl' function. */
+/* #undef HAVE_CLZL */
+
+/* Define to 1 if you have the <CL/cl_ext.h> header file. */
+/* #undef HAVE_CL_CL_EXT_H */
+
+/* Define to 1 if you have the `cpuset_setaffinity' function. */
+/* #undef HAVE_CPUSET_SETAFFINITY */
+
+/* Define to 1 if you have the `cpuset_setid' function. */
+/* #undef HAVE_CPUSET_SETID */
+
+/* Define to 1 if we have -lcuda */
+/* #undef HAVE_CUDA */
+
+/* Define to 1 if you have the <cuda.h> header file. */
+/* #undef HAVE_CUDA_H */
+
+/* Define to 1 if you have the <cuda_runtime_api.h> header file. */
+/* #undef HAVE_CUDA_RUNTIME_API_H */
+
+/* Define to 1 if you have the declaration of `CL_DEVICE_TOPOLOGY_AMD', and to
+ 0 if you don't. */
+/* #undef HAVE_DECL_CL_DEVICE_TOPOLOGY_AMD */
+
+/* Define to 1 if you have the declaration of `CTL_HW', and to 0 if you don't.
+ */
+/* #undef HAVE_DECL_CTL_HW */
+
+/* Define to 1 if you have the declaration of `fabsf', and to 0 if you don't.
+ */
+#define HAVE_DECL_FABSF 1
+
+/* Define to 1 if you have the declaration of `HW_NCPU', and to 0 if you
+ don't. */
+/* #undef HAVE_DECL_HW_NCPU */
+
+/* Define to 1 if you have the declaration of
+ `nvmlDeviceGetMaxPcieLinkGeneration', and to 0 if you don't. */
+/* #undef HAVE_DECL_NVMLDEVICEGETMAXPCIELINKGENERATION */
+
+/* Define to 1 if you have the declaration of `PCI_LOOKUP_NO_NUMBERS', and to
+ 0 if you don't. */
+/* #undef HAVE_DECL_PCI_LOOKUP_NO_NUMBERS */
+
+/* Define to 1 if you have the declaration of `pthread_getaffinity_np', and to
+ 0 if you don't. */
+#define HAVE_DECL_PTHREAD_GETAFFINITY_NP 0
+
+/* Define to 1 if you have the declaration of `pthread_setaffinity_np', and to
+ 0 if you don't. */
+#define HAVE_DECL_PTHREAD_SETAFFINITY_NP 0
+
+/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
+ don't. */
+#define HAVE_DECL_STRTOULL 1
+
+/* Define to 1 if you have the declaration of `_SC_LARGE_PAGESIZE', and to 0
+ if you don't. */
+#define HAVE_DECL__SC_LARGE_PAGESIZE 0
+
+/* Define to 1 if you have the declaration of `_SC_NPROCESSORS_CONF', and to 0
+ if you don't. */
+#define HAVE_DECL__SC_NPROCESSORS_CONF 0
+
+/* Define to 1 if you have the declaration of `_SC_NPROCESSORS_ONLN', and to 0
+ if you don't. */
+#define HAVE_DECL__SC_NPROCESSORS_ONLN 0
+
+/* Define to 1 if you have the declaration of `_SC_NPROC_CONF', and to 0 if
+ you don't. */
+#define HAVE_DECL__SC_NPROC_CONF 0
+
+/* Define to 1 if you have the declaration of `_SC_NPROC_ONLN', and to 0 if
+ you don't. */
+#define HAVE_DECL__SC_NPROC_ONLN 0
+
+/* Define to 1 if you have the declaration of `_SC_PAGESIZE', and to 0 if you
+ don't. */
+#define HAVE_DECL__SC_PAGESIZE 0
+
+/* Define to 1 if you have the declaration of `_SC_PAGE_SIZE', and to 0 if you
+ don't. */
+#define HAVE_DECL__SC_PAGE_SIZE 0
+
+/* Define to 1 if you have the <dirent.h> header file. */
+/* #define HAVE_DIRENT_H 1 */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+/* #undef HAVE_DLFCN_H */
+
+/* Define to 1 if you have the `ffs' function. */
+/* #undef HAVE_FFS */
+
+/* Define to 1 if you have the `ffsl' function. */
+/* #undef HAVE_FFSL */
+
+/* Define to 1 if you have the `fls' function. */
+/* #undef HAVE_FLS */
+
+/* Define to 1 if you have the `flsl' function. */
+/* #undef HAVE_FLSL */
+
+/* Define to 1 if you have the `getpagesize' function. */
+#define HAVE_GETPAGESIZE 1
+
+/* Define to 1 if the system has the type `GROUP_AFFINITY'. */
+#define HAVE_GROUP_AFFINITY 1
+
+/* Define to 1 if the system has the type `GROUP_RELATIONSHIP'. */
+#define HAVE_GROUP_RELATIONSHIP 1
+
+/* Define to 1 if you have the `host_info' function. */
+/* #undef HAVE_HOST_INFO */
+
+/* Define to 1 if you have the <infiniband/verbs.h> header file. */
+/* #undef HAVE_INFINIBAND_VERBS_H */
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if the system has the type `KAFFINITY'. */
+#define HAVE_KAFFINITY 1
+
+/* Define to 1 if you have the <kstat.h> header file. */
+/* #undef HAVE_KSTAT_H */
+
+/* Define to 1 if you have the <langinfo.h> header file. */
+/* #undef HAVE_LANGINFO_H */
+
+/* Define to 1 if we have -lgdi32 */
+#define HAVE_LIBGDI32 1
+
+/* Define to 1 if we have -libverbs */
+/* #undef HAVE_LIBIBVERBS */
+
+/* Define to 1 if we have -lkstat */
+/* #undef HAVE_LIBKSTAT */
+
+/* Define to 1 if we have -llgrp */
+/* #undef HAVE_LIBLGRP */
+
+/* Define to 1 if you have the `pci' library (-lpci). */
+/* #undef HAVE_LIBPCI */
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if the system has the type `LOGICAL_PROCESSOR_RELATIONSHIP'. */
+#define HAVE_LOGICAL_PROCESSOR_RELATIONSHIP 1
+
+/* Define to 1 if you have the <mach/mach_host.h> header file. */
+/* #undef HAVE_MACH_MACH_HOST_H */
+
+/* Define to 1 if you have the <mach/mach_init.h> header file. */
+/* #undef HAVE_MACH_MACH_INIT_H */
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#define HAVE_MALLOC_H 1
+
+/* Define to 1 if you have the `memalign' function. */
+/* #undef HAVE_MEMALIGN */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if we have -lmyriexpress */
+/* #undef HAVE_MYRIEXPRESS */
+
+/* Define to 1 if you have the <myriexpress.h> header file. */
+/* #undef HAVE_MYRIEXPRESS_H */
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+/* #undef HAVE_NL_LANGINFO */
+
+/* Define to 1 if you have the <numaif.h> header file. */
+/* #undef HAVE_NUMAIF_H */
+
+/* Define to 1 if the system has the type `NUMA_NODE_RELATIONSHIP'. */
+#define HAVE_NUMA_NODE_RELATIONSHIP 1
+
+/* Define to 1 if you have the <NVCtrl/NVCtrl.h> header file. */
+/* #undef HAVE_NVCTRL_NVCTRL_H */
+
+/* Define to 1 if you have the <nvml.h> header file. */
+/* #undef HAVE_NVML_H */
+
+/* Define to 1 if you have the `openat' function. */
+/* #undef HAVE_OPENAT */
+
+/* Define to 1 if you have the <pci/pci.h> header file. */
+/* #undef HAVE_PCI_PCI_H */
+
+/* Define to 1 if you have the <picl.h> header file. */
+/* #undef HAVE_PICL_H */
+
+/* Define to 1 if you have the `posix_memalign' function. */
+/* #undef HAVE_POSIX_MEMALIGN */
+
+/* Define to 1 if the system has the type `PROCESSOR_CACHE_TYPE'. */
+#define HAVE_PROCESSOR_CACHE_TYPE 1
+
+/* Define to 1 if the system has the type `PROCESSOR_GROUP_INFO'. */
+#define HAVE_PROCESSOR_GROUP_INFO 1
+
+/* Define to 1 if the system has the type `PROCESSOR_RELATIONSHIP'. */
+#define HAVE_PROCESSOR_RELATIONSHIP 1
+
+/* Define to 1 if the system has the type `PSAPI_WORKING_SET_EX_BLOCK'. */
+/* #undef HAVE_PSAPI_WORKING_SET_EX_BLOCK */
+
+/* Define to 1 if the system has the type `PSAPI_WORKING_SET_EX_INFORMATION'.
+ */
+/* #undef HAVE_PSAPI_WORKING_SET_EX_INFORMATION */
+
+/* Define to 1 if you have the <pthread_np.h> header file. */
+/* #undef HAVE_PTHREAD_NP_H */
+
+/* Define to 1 if the system has the type `pthread_t'. */
+/* #undef HAVE_PTHREAD_T */
+#undef HAVE_PTHREAD_T
+
+/* Define to 1 if you have the `putwc' function. */
+#define HAVE_PUTWC 1
+
+/* Define to 1 if the system has the type `RelationProcessorPackage'. */
+/* #undef HAVE_RELATIONPROCESSORPACKAGE */
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+/* #define HAVE_STRINGS_H 1*/
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#define HAVE_STRNCASECMP 1
+
+/* Define to '1' if sysctl is present and usable */
+/* #undef HAVE_SYSCTL */
+
+/* Define to '1' if sysctlbyname is present and usable */
+/* #undef HAVE_SYSCTLBYNAME */
+
+/* Define to 1 if the system has the type
+ `SYSTEM_LOGICAL_PROCESSOR_INFORMATION'. */
+#define HAVE_SYSTEM_LOGICAL_PROCESSOR_INFORMATION 1
+
+/* Define to 1 if the system has the type
+ `SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX'. */
+#define HAVE_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 1
+
+/* Define to 1 if you have the <sys/cpuset.h> header file. */
+/* #undef HAVE_SYS_CPUSET_H */
+
+/* Define to 1 if you have the <sys/lgrp_user.h> header file. */
+/* #undef HAVE_SYS_LGRP_USER_H */
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+/* #undef HAVE_SYS_MMAN_H */
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+/* #define HAVE_SYS_PARAM_H 1 */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+/* #undef HAVE_SYS_SYSCTL_H */
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+/* #undef HAVE_SYS_UTSNAME_H */
+
+/* Define to 1 if you have the `uname' function. */
+/* #undef HAVE_UNAME */
+
+/* Define to 1 if you have the <unistd.h> header file. */
+/* #define HAVE_UNISTD_H 1 */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `uselocale' function. */
+/* #undef HAVE_USELOCALE */
+
+/* Define to 1 if the system has the type `wchar_t'. */
+#define HAVE_WCHAR_T 1
+
+/* Define to 1 if you have the <X11/keysym.h> header file. */
+/* #undef HAVE_X11_KEYSYM_H */
+
+/* Define to 1 if you have the <X11/Xlib.h> header file. */
+/* #undef HAVE_X11_XLIB_H */
+
+/* Define to 1 if you have the <X11/Xutil.h> header file. */
+/* #undef HAVE_X11_XUTIL_H */
+
+/* Define to 1 if you have the <xlocale.h> header file. */
+/* #undef HAVE_XLOCALE_H */
+
+/* Define to 1 on AIX */
+/* #undef HWLOC_AIX_SYS */
+
+/* Define to 1 on BlueGene/Q */
+/* #undef HWLOC_BGQ_SYS */
+
+/* Whether C compiler supports symbol visibility or not */
+#define HWLOC_C_HAVE_VISIBILITY 0
+
+/* Define to 1 on Darwin */
+/* #undef HWLOC_DARWIN_SYS */
+
+/* Whether we are in debugging mode or not */
+/* #undef HWLOC_DEBUG */
+
+/* Define to 1 on *FREEBSD */
+/* #undef HWLOC_FREEBSD_SYS */
+
+/* Whether your compiler has __attribute__ or not */
+/* #define HWLOC_HAVE_ATTRIBUTE 1 */
+#undef HWLOC_HAVE_ATTRIBUTE
+
+/* Whether your compiler has __attribute__ aligned or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_ALIGNED 1 */
+
+/* Whether your compiler has __attribute__ always_inline or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_ALWAYS_INLINE 1 */
+
+/* Whether your compiler has __attribute__ cold or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_COLD 1 */
+
+/* Whether your compiler has __attribute__ const or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_CONST 1 */
+
+/* Whether your compiler has __attribute__ deprecated or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_DEPRECATED 1 */
+
+/* Whether your compiler has __attribute__ format or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_FORMAT 1 */
+
+/* Whether your compiler has __attribute__ hot or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_HOT 1 */
+
+/* Whether your compiler has __attribute__ malloc or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_MALLOC 1 */
+
+/* Whether your compiler has __attribute__ may_alias or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_MAY_ALIAS 1 */
+
+/* Whether your compiler has __attribute__ nonnull or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_NONNULL 1 */
+
+/* Whether your compiler has __attribute__ noreturn or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_NORETURN 1 */
+
+/* Whether your compiler has __attribute__ no_instrument_function or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_NO_INSTRUMENT_FUNCTION 1 */
+
+/* Whether your compiler has __attribute__ packed or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_PACKED 1 */
+
+/* Whether your compiler has __attribute__ pure or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_PURE 1 */
+
+/* Whether your compiler has __attribute__ sentinel or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_SENTINEL 1 */
+
+/* Whether your compiler has __attribute__ unused or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_UNUSED 1 */
+
+/* Whether your compiler has __attribute__ warn unused result or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_WARN_UNUSED_RESULT 1 */
+
+/* Whether your compiler has __attribute__ weak alias or not */
+/* #define HWLOC_HAVE_ATTRIBUTE_WEAK_ALIAS 1 */
+
+/* Define to 1 if your `ffs' function is known to be broken. */
+/* #undef HWLOC_HAVE_BROKEN_FFS */
+
+/* Define to 1 if you have the `cairo' library. */
+/* #undef HWLOC_HAVE_CAIRO */
+
+/* Define to 1 if you have the `clz' function. */
+/* #undef HWLOC_HAVE_CLZ */
+
+/* Define to 1 if you have the `clzl' function. */
+/* #undef HWLOC_HAVE_CLZL */
+
+/* Define to 1 if you have cpuid */
+/* #undef HWLOC_HAVE_CPUID */
+
+/* Define to 1 if the CPU_SET macro works */
+/* #undef HWLOC_HAVE_CPU_SET */
+
+/* Define to 1 if the CPU_SET_S macro works */
+/* #undef HWLOC_HAVE_CPU_SET_S */
+
+/* Define to 1 if you have the `cudart' SDK. */
+/* #undef HWLOC_HAVE_CUDART */
+
+/* Define to 1 if function `clz' is declared by system headers */
+/* #undef HWLOC_HAVE_DECL_CLZ */
+
+/* Define to 1 if function `clzl' is declared by system headers */
+/* #undef HWLOC_HAVE_DECL_CLZL */
+
+/* Define to 1 if function `ffs' is declared by system headers */
+/* #undef HWLOC_HAVE_DECL_FFS */
+
+/* Define to 1 if function `ffsl' is declared by system headers */
+/* #undef HWLOC_HAVE_DECL_FFSL */
+
+/* Define to 1 if function `fls' is declared by system headers */
+/* #undef HWLOC_HAVE_DECL_FLS */
+
+/* Define to 1 if function `flsl' is declared by system headers */
+/* #undef HWLOC_HAVE_DECL_FLSL */
+
+/* Define to 1 if you have the `ffs' function. */
+/* #undef HWLOC_HAVE_FFS */
+
+/* Define to 1 if you have the `ffsl' function. */
+/* #undef HWLOC_HAVE_FFSL */
+
+/* Define to 1 if you have the `fls' function. */
+/* #undef HWLOC_HAVE_FLS */
+
+/* Define to 1 if you have the `flsl' function. */
+/* #undef HWLOC_HAVE_FLSL */
+
+/* Define to 1 if you have the GL module components. */
+/* #undef HWLOC_HAVE_GL */
+
+/* Define to 1 if you have the `libpciaccess' library. */
+/* #undef HWLOC_HAVE_LIBPCIACCESS */
+
+/* Define to 1 if you have a library providing the termcap interface */
+/* #undef HWLOC_HAVE_LIBTERMCAP */
+
+/* Define to 1 if you have the `libxml2' library. */
+/* #undef HWLOC_HAVE_LIBXML2 */
+
+/* Define to 1 if building the Linux PCI component */
+/* #undef HWLOC_HAVE_LINUXPCI */
+
+/* Define to 1 if mbind is available. */
+/* #undef HWLOC_HAVE_MBIND */
+
+/* Define to 1 if migrate_pages is available. */
+/* #undef HWLOC_HAVE_MIGRATE_PAGES */
+
+/* Define to 1 if you have the `NVML' library. */
+/* #undef HWLOC_HAVE_NVML */
+
+/* Define to 1 if glibc provides the old prototype (without length) of
+ sched_setaffinity() */
+/* #undef HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+
+/* Define to 1 if you have the `OpenCL' library. */
+/* #undef HWLOC_HAVE_OPENCL */
+
+/* Define to 1 if `libpci' struct pci_dev has a `device_class' field. */
+/* #undef HWLOC_HAVE_PCIDEV_DEVICE_CLASS */
+
+/* Define to 1 if `libpci' struct pci_dev has a `domain' field. */
+/* #undef HWLOC_HAVE_PCIDEV_DOMAIN */
+
+/* Define to 1 if you have the pciutils `libpci' library. */
+/* #undef HWLOC_HAVE_PCIUTILS */
+
+/* Define to 1 if `libpci' has the `pci_find_cap' function. */
+/* #undef HWLOC_HAVE_PCI_FIND_CAP */
+
+/* Define to 1 if the hwloc library should support dynamically-loaded plugins
+ */
+/* #undef HWLOC_HAVE_PLUGINS */
+
+/* `Define to 1 if you have pthread_getthrds_np' */
+/* #undef HWLOC_HAVE_PTHREAD_GETTHRDS_NP */
+
+/* Define to 1 if pthread mutexes are available */
+/* #undef HWLOC_HAVE_PTHREAD_MUTEX */
+
+/* Define to 1 if glibc provides a prototype of sched_setaffinity() */
+#define HWLOC_HAVE_SCHED_SETAFFINITY 1
+
+/* Define to 1 if set_mempolicy is available. */
+/* #undef HWLOC_HAVE_SET_MEMPOLICY */
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HWLOC_HAVE_STDINT_H 1
+
+/* Define to 1 if you have the `windows.h' header. */
+#define HWLOC_HAVE_WINDOWS_H 1
+
+/* Define to 1 if X11 headers including Xutil.h and keysym.h are available. */
+/* #undef HWLOC_HAVE_X11_KEYSYM */
+
+/* Define to 1 if the _syscall3 macro works */
+/* #undef HWLOC_HAVE__SYSCALL3 */
+
+/* Define to 1 on HP-UX */
+/* #undef HWLOC_HPUX_SYS */
+
+/* Define to 1 on Irix */
+/* #undef HWLOC_IRIX_SYS */
+
+/* Define to 1 on Linux */
+/* #undef HWLOC_LINUX_SYS */
+
+/* Define to 1 on *NETBSD */
+/* #undef HWLOC_NETBSD_SYS */
+
+/* Define to 1 on OSF */
+/* #undef HWLOC_OSF_SYS */
+
+/* The size of `unsigned int', as computed by sizeof */
+#define HWLOC_SIZEOF_UNSIGNED_INT 4
+
+/* The size of `unsigned long', as computed by sizeof */
+#define HWLOC_SIZEOF_UNSIGNED_LONG 4
+
+/* Define to 1 on Solaris */
+/* #undef HWLOC_SOLARIS_SYS */
+
+/* The hwloc symbol prefix */
+#define HWLOC_SYM_PREFIX hwloc_
+
+/* The hwloc symbol prefix in all caps */
+#define HWLOC_SYM_PREFIX_CAPS HWLOC_
+
+/* Whether we need to re-define all the hwloc public symbols or not */
+#define HWLOC_SYM_TRANSFORM 0
+
+/* Define to 1 on unsupported systems */
+/* #undef HWLOC_UNSUPPORTED_SYS */
+
+/* Define to 1 if ncurses works, preferred over curses */
+/* #undef HWLOC_USE_NCURSES */
+
+/* Define to 1 on WINDOWS */
+#define HWLOC_WIN_SYS 1
+
+/* Define to 1 on x86_32 */
+/* #undef HWLOC_X86_32_ARCH */
+
+/* Define to 1 on x86_64 */
+#define HWLOC_X86_64_ARCH 1
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#define LT_OBJDIR ".libs/"
+
+/* Name of package */
+#define PACKAGE "hwloc"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "http://www.open-mpi.org/projects/hwloc/"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "hwloc"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "hwloc 1.7.2"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "hwloc"
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "1.7.2"
+
+/* The size of `unsigned int', as computed by sizeof. */
+#define SIZEOF_UNSIGNED_INT 4
+
+/* The size of `unsigned long', as computed by sizeof. */
+#define SIZEOF_UNSIGNED_LONG 4
+
+/* The size of `void *', as computed by sizeof. */
+#define SIZEOF_VOID_P 8
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Enable extensions on HP-UX. */
+#ifndef _HPUX_SOURCE
+# define _HPUX_SOURCE 1
+#endif
+
+
+/* Enable extensions on AIX 3, Interix. */
+/*
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+*/
+
+/* Enable GNU extensions on systems that have them. */
+/*
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+*/
+/* Enable threading extensions on Solaris. */
+/*
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+*/
+/* Enable extensions on HP NonStop. */
+/*
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+*/
+/* Enable general extensions on Solaris. */
+/*
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+*/
+
+
+/* Version number of package */
+#define VERSION "1.9"
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#define X_DISPLAY_MISSING 1
+
+/* Define to 1 if on MINIX. */
+/* #undef _MINIX */
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+ this defined. */
+/* #undef _POSIX_1_SOURCE */
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+/* #undef _POSIX_SOURCE */
+
+/* Define this to the process ID type */
+#define hwloc_pid_t HANDLE
+
+/* Define this to either strncasecmp or strncmp */
+#define hwloc_strncasecmp strncasecmp
+
+/* Define this to the thread ID type */
+#define hwloc_thread_t HANDLE
+
+
+#endif /* HWLOC_CONFIGURE_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/static-components.h b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/static-components.h
new file mode 100644
index 0000000..f0373ab
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/static-components.h
@@ -0,0 +1,17 @@
+HWLOC_DECLSPEC extern const struct hwloc_component hwloc_noos_component;
+HWLOC_DECLSPEC extern const struct hwloc_component hwloc_xml_component;
+HWLOC_DECLSPEC extern const struct hwloc_component hwloc_synthetic_component;
+HWLOC_DECLSPEC extern const struct hwloc_component hwloc_custom_component;
+HWLOC_DECLSPEC extern const struct hwloc_component hwloc_xml_nolibxml_component;
+HWLOC_DECLSPEC extern const struct hwloc_component hwloc_windows_component;
+HWLOC_DECLSPEC extern const struct hwloc_component hwloc_x86_component;
+static const struct hwloc_component * hwloc_static_components[] = {
+ &hwloc_noos_component,
+ &hwloc_xml_component,
+ &hwloc_synthetic_component,
+ &hwloc_custom_component,
+ &hwloc_xml_nolibxml_component,
+ &hwloc_windows_component,
+ &hwloc_x86_component,
+ NULL
+};
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
index 9bfee66..0b01e23 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2013 Inria. All rights reserved.
+# Copyright © 2009-2014 Inria. All rights reserved.
# Copyright © 2009-2013 Université Bordeaux 1
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -24,9 +24,6 @@ DOX_TAG = $(DOX_DIR)/$(PACKAGE).tag
# time they build after a checkout (or if something in the docs
# changes, etc.).
#
-# Note that by listing directories in EXTRA_DIST, we pick up the whole
-# tree (e.g., everything in the man and latex directories).
-#
# images already available in repository
PREBUILT_IMAGES = images/dudley.png images/emmett.png images/hagrid.png
@@ -54,6 +51,10 @@ EXTRA_DIST = \
$(PREBUILT_IMAGES) \
$(BUILT_IMAGES)
+
+
+if HWLOC_BUILD_DOXYGEN
+
#
# Files where the doxygen inputs live (i.e., dependencies). Make the
# generated tagfile depend on these files, which will force them to be
@@ -90,7 +91,6 @@ dox_inputs = $(DOX_CONFIG) \
# building standalone.
#
-if HWLOC_BUILD_DOXYGEN
BUILT_SOURCES = $(BUILT_IMAGES)
images/diagram.png: $(srcdir)/images/diagram.fig
@@ -108,7 +108,6 @@ images/diagram.eps: $(srcdir)/images/diagram.fig
exit 1; \
fi
$(FIG2DEV) -L eps $< $@
-endif
#
# Rules for running doxygen. It depends on the built images and the
@@ -117,30 +116,20 @@ endif
# of nested structurre/union declarations.
#
-RENAME_SED = \
- $(SED_I) -e 's/__hwloc_restrict/restrict/g' \
- -e 's/\\_\\-\\_\\-hwloc\\_\\-restrict/restrict/g' \
- -e 's/__hwloc_attribute_unused//g' \
- -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-unused//g' \
- -e 's/__hwloc_attribute_malloc//g' \
- -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-malloc//g' \
- -e 's/__hwloc_attribute_const//g' \
- -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-const//g' \
- -e 's/__hwloc_attribute_pure//g' \
- -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-pure//g' \
- -e 's/__hwloc_attribute_deprecated//g' \
- -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-deprecated//g' \
- -e 's/HWLOC_DECLSPEC//g' \
- -e 's/HWLOC\\_\\-DECLSPEC//g' \
- -e 's/__hwloc_inline/inline/g' \
- -e 's/\\_\\-\\_\\-hwloc\\_\\-inline/inline/g'
+#
+# Note that we want to use our own doxygen.css file; not the one that
+# doxygen installs in the HTML directory. So manually copy it over.
+# Be a little clever: only copy the doxygen.css file over if it exists
+# in DOX_HTML_DIR (which is in the build tree). If the html tree
+# doesn't exist in the build tree, then we're using an html tree in
+# the source tree, and we don't need to copy over the doxygen.css
+# because we didn't build the html tree (e.g., the html tree came
+# pre-bundled in a tarball).
+#
-if HWLOC_BUILD_DOXYGEN
$(DOX_TAG): $(BUILT_SOURCES) $(dox_inputs) $(PREBUILT_IMAGES)
rm -fr $(DOX_DIR)
$(DOXYGEN) $(DOX_CONFIG)
- -$(RENAME_SED) \
- $(DOX_DIR)/html/*.html $(DOX_DIR)/latex/*.tex $(DOX_DIR)/man/man3/*.3
@echo "Work-around spurious leading _ in doxygen filenames..."
-(cd $(DOX_DIR)/man/man3 ; \
for i in _hwloc* ; do \
@@ -151,17 +140,15 @@ $(DOX_TAG): $(BUILT_SOURCES) $(dox_inputs) $(PREBUILT_IMAGES)
@mv $(DOX_MAN_DIR)/man3/hwloc* $(DOX_MAN_DIR)/man3/HWLOC* $(DOX_DIR)/man.tmp/
@rm -rf $(DOX_MAN_DIR)/man3
@mv $(DOX_DIR)/man.tmp $(DOX_MAN_DIR)/man3
-endif
-
-www-doc-sed:
- -$(RENAME_SED) www.open-mpi.org/html/*.php
+ @echo "Copying custom doxygen.css..."
+ if test -d $(DOX_HTML_DIR) -a -f $(DOX_HTML_DIR)/doxygen.css; then \
+ cp -f $(srcdir)/doxygen.css $(DOX_HTML_DIR); \
+ fi
#
# Rules for building the PDF
#
-if HWLOC_BUILD_DOXYGEN
-
# The Doxygen config is set to generate a4 latex -- no transformation
# is necessary.
$(DOX_A4PDF): $(DOX_TAG)
@@ -201,25 +188,20 @@ $(DOX_LETTERPDF): $(DOX_TAG)
fi; \
done; \
mv letter-refman.pdf $(DOCDIR)/$(DOX_LETTERPDF)
-endif
-#
-# Note that we want to use our own doxygen.css file; not the one that
-# doxygen installs in the HTML directory. So manually copy it over.
-# Be a little clever: only copy the doxygen.css file over if it exists
-# in DOX_HTML_DIR (which is in the build tree). If the html tree
-# doesn't exist in the build tree, then we're using an html tree in
-# the source tree, and we don't need to copy over the doxygen.css
-# because we didn't build the html tree (e.g., the html tree came
-# pre-bundled in a tarball).
-#
+doc: $(DOX_TAG) $(DOX_LETTERPDF) $(DOX_A4PDF)
-if HWLOC_BUILD_DOXYGEN
-all-local: $(DOX_TAG)
- if test -d $(DOX_HTML_DIR) -a -f $(DOX_HTML_DIR)/doxygen.css; then \
- cp -f $(srcdir)/doxygen.css $(DOX_HTML_DIR); \
- fi
-endif
+else !HWLOC_BUILD_DOXYGEN
+
+# When we don't have doxygen, nothing to do
+doc:
+
+endif !HWLOC_BUILD_DOXYGEN
+# there are also a bunch of doxygen-build-dependencies later in this file
+
+
+
+if HWLOC_INSTALL_DOXYGEN
#
# Un/install the generated PDF and man pages (just like BUILD_DOXYGEN,
@@ -227,9 +209,7 @@ endif
# standalone mode).
#
-if HWLOC_INSTALL_DOXYGEN
-dist_pdf_DATA = $(DOX_A4PDF) $(DOX_LETTERPDF)
-endif
+pdf_DATA = $(DOX_A4PDF) $(DOX_LETTERPDF)
#
# Install the HWLOC_* and hwloc_* man pages. It would be great to
@@ -237,8 +217,6 @@ endif
# in the Makefile.am... :-(
#
-if HWLOC_INSTALL_DOXYGEN
-
# We have so many man pages that if we put them all in man3_MANS, we
# exceed the maximum command line length on some systems (during "make
# install"). :-( So we have to split them up so that the total
@@ -384,7 +362,7 @@ man3_object_stringsdir = $(man3dir)
man3_object_strings_DATA = \
$(DOX_MAN_DIR)/man3/hwlocality_object_strings.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_type_string.3 \
- $(DOX_MAN_DIR)/man3/hwloc_obj_type_of_string.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_type_sscanf.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_type_snprintf.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_attr_snprintf.3 \
$(DOX_MAN_DIR)/man3/hwloc_obj_cpuset_snprintf.3 \
@@ -572,8 +550,9 @@ man3_helper_find_misc_DATA = \
man3_helper_distributedir = $(man3dir)
man3_helper_distribute_DATA = \
$(DOX_MAN_DIR)/man3/hwlocality_helper_distribute.3 \
- $(DOX_MAN_DIR)/man3/hwloc_distribute.3 \
- $(DOX_MAN_DIR)/man3/hwloc_distributev.3
+ $(DOX_MAN_DIR)/man3/hwloc_distrib_flags_e.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_DISTRIB_FLAG_REVERSE.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_distrib.3
man3_helper_topology_setsdir = $(man3dir)
man3_helper_topology_sets_DATA = \
@@ -674,9 +653,10 @@ man3_glibc_sched_DATA = \
man3_linuxdir = $(man3dir)
man3_linux_DATA = \
$(DOX_MAN_DIR)/man3/hwlocality_linux.3 \
- $(DOX_MAN_DIR)/man3/hwloc_linux_get_tid_cpubind.3 \
$(DOX_MAN_DIR)/man3/hwloc_linux_parse_cpumap_file.3 \
- $(DOX_MAN_DIR)/man3/hwloc_linux_set_tid_cpubind.3
+ $(DOX_MAN_DIR)/man3/hwloc_linux_set_tid_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_linux_get_tid_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_linux_get_tid_last_cpu_location.3
man3_linux_libnumadir = $(man3dir)
man3_linux_libnuma_DATA = \
@@ -705,7 +685,10 @@ man3_openfabrics_DATA = \
$(DOX_MAN_DIR)/man3/hwloc_ibv_get_device_osdev_by_name.3
# end of manpages(3) if HWLOC_BUILD_DOXYGEN
-endif
+
+endif HWLOC_INSTALL_DOXYGEN
+
+
if HWLOC_BUILD_DOXYGEN
@@ -759,7 +742,10 @@ $(DOX_MAN_DIR): $(DOX_TAG)
# built at the same time during a parallel build (e.g., "make -j X").
# So arbitrarily make the A4 PDF dependent upon the Letter PDF.
$(DOX_A4PDF): $(DOX_TAG) $(DOX_LETTERPDF)
-endif
+
+endif HWLOC_BUILD_DOXYGEN
+
+
#
# Make sure that the documentation example works
@@ -798,6 +784,8 @@ MAINTAINERCLEANFILES = $(DOX_TAG) \
$(DOX_LETTERPDF) \
$(DOX_HTML_README)
+if HWLOC_BUILD_README
+
#
# Rules for creating the top-level README file. There does not appear
# to be an easy way to know if AC_PATH_PROG found something in
@@ -807,28 +795,20 @@ MAINTAINERCLEANFILES = $(DOX_TAG) \
# Just like BUILD_DOXYGEN, BUILD_README will automatically be false if
# we're not building standalone.
#
-
-if HWLOC_BUILD_README
-doc readme: all $(HWLOC_top_srcdir)/README
-$(HWLOC_top_srcdir)/README: $(DOX_HTML_README)
- LC_ALL=C $(HWLOC_W3_GENERATOR) $(DOX_HTML_README) | $(SED) -n -e 's/^ //' -e '/^Introduction$$/,$$p' > $@
+readme: $(HWLOC_top_srcdir)/README
+$(HWLOC_top_srcdir)/README: $(DOX_TAG)
+ sed -n -f $(srcdir)/README.sed $(DOX_HTML_DIR)/index.html > $(DOX_HTML_README)
+ LC_ALL=C $(HWLOC_W3_GENERATOR) $(DOX_HTML_README) \
+ | $(SED) -n -e 's/^ //' -e '/^Introduction$$/,$$p' \
+ | $(SED) -e '/^--*-$$/,$$ d' \
+ > $@
rm -f $(DOX_HTML_README)
-$(DOX_HTML_README): $(DOX_HTML_DIR)
- rm -f $@
- sed -n -f $(srcdir)/README.sed $(DOX_HTML_DIR)/index.html > $@
+
else
-doc readme: no-build-readme
-$(HWLOC_top_srcdir)/README: no-build-readme
-no-build-readme:
- @echo "ERROR: You do not have the 'w3m' or 'lynx' executables to build the README, or do not have the 'doxygen' executable to build the docs."
- @echo "ERROR: Cannot continue."
- @exit 1
+# When we don't have what's needed to build the README, nothing to do
+readme: doc
+
endif
-#DOCUPLOADHOST=sync.bordeaux.inria.fr
-#DOCUPLOADOPTS=
-#doc-upload: @DX_DOCDIR@/html
-# echo FIXME
-# false
-# rsync -avz --delete --chmod=ug+rwX,o+rX $(DOCUPLOADOPTS) @DX_DOCDIR@/html/ $(DOCUPLOADHOST):/web/runtime/libtopology/doc/
+all-local: doc readme
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.cfg b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.cfg
index 61701b4..6e9b0eb 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.cfg
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.cfg
@@ -1,4 +1,4 @@
-# Copyright © 2010 inria. All rights reserved.
+# Copyright © 2010-2014 Inria. All rights reserved.
# Copyright © 2009 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -1278,7 +1278,7 @@ INCLUDE_FILE_PATTERNS =
# undefined via #undef or recursively expanded use the := operator
# instead of the = operator.
-PREDEFINED = hwloc_thread_t=hwloc_thread_t HWLOC_HAVE_CPU_SET=1 NUMA_VERSION1_COMPATIBILITY=1 __GNUC__=1
+PREDEFINED = hwloc_thread_t=hwloc_thread_t HWLOC_HAVE_CPU_SET=1 NUMA_VERSION1_COMPATIBILITY=1 __GNUC__=1 __hwloc_inline=inline __hwloc_restrict=restrict __hwloc_attribute_const= __hwloc_attribute_deprecated= __hwloc_attribute_malloc= __hwloc_attribute_pure= __hwloc_attribute_unused= HWLOC_DECLSPEC=
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
index 84f1866..8570ff9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2013 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -609,7 +609,7 @@ If those things fail, contact us on the mailing list for additional
help. Please attach the output of lstopo after having given the
<tt>--enable-debug</tt> option to ./configure and rebuilt completely, to get
debugging output. Also attach the <tt>/proc</tt> + <tt>/sys</tt> tarball
-generated by the installed script <tt>hwloc-gather-topology.sh</tt>
+generated by the installed script <tt>hwloc-gather-topology</tt>
when submitting problems about Linux, or send the
output of <tt>kstat cpu_info</tt> in the Solaris case, or the output of
<tt>sysctl hw</tt> in the Darwin or BSD cases.
@@ -1640,13 +1640,34 @@ placed.
<dd>The description string that was given to hwloc to build this
synthetic topology.
</dd>
-<dt>CPUModel, CPUType (Socket or Machine)</dt>
-<dd>The processor model name,
-and a more-general processor type name when applicable (Solaris/Sparc).
-These attributes are usually added to Socket objects.
-However, when hwloc cannot detect the number of sockets but still
-knows their (same) model, the attribute may be added to the Machine
-object instead.
+<dt>CPUModel (Socket or Machine)</dt>
+<dd>The processor model name.
+Usually added to Socket objects, but can be in Machine instead if
+hwloc failed to discover any socket.
+</dd>
+<dt>CPUType (Socket)</dt>
+<dd>
+A Solaris-specific general processor type name, such as "i86pc".
+</dd>
+<dt>CPUVendor, CPUModelNumber, CPUFamilyNumber (Socket or Machine)</dt>
+<dd>The processor vendor name, model number, and family number.
+Currently available for x86 and Xeon Phi processors on most systems,
+and for ia64 processors on Linux.
+Usually added to Socket objects, but can be in Machine instead if
+hwloc failed to discover any socket.
+</dd>
+<dt>CPURevision (Socket)</dt>
+<dd>
+A POWER/PowerPC-specific general processor revision number,
+currently only available on Linux.
+</dd>
+<dt>PlatformName, PlatformModel, PlatformVendor, PlatformBoardID, PlatformRevision,</dt>
+<dt> SystemVersionRegister, ProcessorVersionRegister (Machine)</dt>
+<dd>Some POWER/PowerPC-specific attributes describing the platform
+and processor.
+Currently only available on Linux.
+Usually added to Socket objects, but can be in Machine instead if
+hwloc failed to discover any socket.
</dd>
<dt>PCIVendor, PCIDevice (PCI devices and bridges)</dt>
<dd>The vendor and device names of the PCI device.
@@ -1658,15 +1679,26 @@ object instead.
<dt>GPUVendor, GPUModel (GPU or Co-Processor OS devices)</dt>
<dd>The vendor and model names of the GPU device.
</dd>
-<dt>OpenCLDeviceType, OpenCLPlatformIndex,
+<dt>OpenCLDeviceType, OpenCLPlatformIndex,</dt>
<dt>OpenCLPlatformName, OpenCLPlatformDeviceIndex (OpenCL GPU OS devices)</dt>
<dd>The type of OpenCL device,
the OpenCL platform index and name,
and the index of the device within the platform.
</dd>
+<dt>OpenCLComputeUnits, OpenCLGlobalMemorySize</dt>
+<dd>The number of compute units and global memory size (in kB) of a OpenCL device.
+</dd>
<dt>NVIDIAUUID, NVIDIASerial (NVML GPU OS devices)</dt>
<dd>The UUID and Serial of NVIDIA GPUs.
</dd>
+<dt>CUDAMultiProcessors, CUDACoresPerMP,</dt>
+<dt>CUDAGlobalMemorySize, CUDAL2CacheSize, CUDASharedMemorySizePerMP (CUDA OS devices)</dt>
+<dd>
+ The number of shared multiprocessors, the number of cores per
+ multiprocessor, the global memory size, the (global) L2 cache size,
+ and size of the shared memory in each multiprocessor of a CUDA device.
+ Sizes are in kB.
+</dd>
<dt>MICSerialNumber</dt>
<dd>
The serial number of an Intel Xeon Phi (MIC) coprocessor.
@@ -1825,8 +1857,11 @@ That is why the above topology contains 4 cores (2 cores times 2 nodes).
These type names must be written as
<tt>machine</tt>, <tt>node</tt>, <tt>socket</tt>, <tt>core</tt>,
<tt>cache</tt>, <tt>pu</tt>, <tt>misc</tt>, <tt>group</tt>.
-They do not need to be written case-sensitively, nor entirely (2
-characters such as <tt>ma</tt> select a Machine level).
+They do not need to be written case-sensitively, nor entirely
+(as long as there is no ambiguity, 2 characters such as <tt>ma</tt>
+ select a Machine level).
+Type-specific attributes may also be given such as <tt>L2iCache</tt>
+(hwloc_obj_type_sscanf() is used for parsing the type names).
Note that I/O objects are not available.
The root object does not appear in the string.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am
index e7f6dd3..bac3d23 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2013 Inria. All rights reserved.
+# Copyright © 2009-2014 Inria. All rights reserved.
# Copyright © 2009-2010 Université Bordeaux 1
# Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
# Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
@@ -35,7 +35,7 @@ noinst_HEADERS = \
private/misc.h \
private/xml.h \
private/components.h \
- private/cpuid.h
+ private/cpuid-x86.h
if HWLOC_HAVE_LINUX
include_hwloc_HEADERS += \
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
index 84ff056..10c9672 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -75,7 +75,7 @@ extern "C" {
*/
/** \brief Indicate at build time which hwloc API version is being used. */
-#define HWLOC_API_VERSION 0x00010800
+#define HWLOC_API_VERSION 0x00010900
/** \brief Indicate at runtime which hwloc API version was used at build time. */
HWLOC_DECLSPEC unsigned hwloc_get_api_version(void);
@@ -1173,11 +1173,36 @@ hwloc_get_next_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type,
/** \brief Return a stringified topology object type */
HWLOC_DECLSPEC const char * hwloc_obj_type_string (hwloc_obj_type_t type) __hwloc_attribute_const;
-/** \brief Return an object type from the string
+/** \brief Return an object type and attributes from a type string.
*
- * \return -1 if unrecognized.
+ * Convert strings such as "socket" or "cache" into the corresponding types.
+ * Matching is case-insensitive, and only the first letters are actually
+ * required to match.
+ *
+ * Types that have specific attributes, for instance caches and groups,
+ * may be returned in \p depthattrp and \p typeattrp. They are ignored
+ * when these pointers are \c NULL.
+ *
+ * For instance "L2i" or "L2iCache" would return
+ * type HWLOC_OBJ_CACHE in \p typep, 2 in \p depthattrp,
+ * and HWLOC_OBJ_CACHE_TYPE_INSTRUCTION in \p typeattrp
+ * (this last pointer should point to a hwloc_obj_cache_type_t).
+ * "Group3" would return type HWLOC_OBJ_GROUP type and 3 in \p depthattrp.
+ * Attributes that are not specified in the string (for instance "Group"
+ * without a depth, or "L2Cache" without a cache type) are set to -1.
+ *
+ * \p typeattrd is only filled if the size specified in \p typeattrsize
+ * is large enough. It is currently only used for caches, and the required
+ * size is at least the size of hwloc_obj_cache_type_t.
+ *
+ * \return 0 if a type was correctly identified, otherwise -1.
+ *
+ * \note This is an extended version of the now deprecated hwloc_obj_type_of_string()
*/
-HWLOC_DECLSPEC hwloc_obj_type_t hwloc_obj_type_of_string (const char * string) __hwloc_attribute_pure;
+HWLOC_DECLSPEC int hwloc_obj_type_sscanf(const char *string,
+ hwloc_obj_type_t *typep,
+ int *depthattrp,
+ void *typeattrp, size_t typeattrsize);
/** \brief Stringify the type of a given topology object into a human-readable form.
*
@@ -1368,7 +1393,11 @@ HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t s
* \note \p hwloc_pid_t is \p pid_t on Unix platforms,
* and \p HANDLE on native Windows platforms.
*
- * \note HWLOC_CPUBIND_THREAD can not be used in \p flags.
+ * \note As a special case on Linux, if a tid (thread ID) is supplied
+ * instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags,
+ * the binding is applied to that specific thread.
+ *
+ * \note On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
@@ -1377,11 +1406,11 @@ HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t
* \note \p hwloc_pid_t is \p pid_t on Unix platforms,
* and \p HANDLE on native Windows platforms.
*
- * \note HWLOC_CPUBIND_THREAD can not be used in \p flags.
- *
* \note As a special case on Linux, if a tid (thread ID) is supplied
- * instead of a pid (process ID), the binding for that specific thread
- * is returned.
+ * instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags,
+ * the binding for that specific thread is returned.
+ *
+ * \note On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
@@ -1434,7 +1463,9 @@ HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_
*
* \note As a special case on Linux, if a tid (thread ID) is supplied
* instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags,
- * the binding for that specific thread is returned.
+ * the last CPU location of that specific thread is returned.
+ *
+ * \note On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
@@ -2120,6 +2151,8 @@ HWLOC_DECLSPEC hwloc_obj_t hwloc_custom_insert_group_object_by_parent(hwloc_topo
* \note Only printable characters may be exported to XML string attributes.
* Any other character, especially any non-ASCII character, will be silently
* dropped.
+ *
+ * \note If \p name is "-", the XML output is sent to the standard output.
*/
HWLOC_DECLSPEC int hwloc_topology_export_xml(hwloc_topology_t topology, const char *xmlpath);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h
index 544ca8f..06ca2a8 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/deprecated.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -21,6 +21,12 @@
extern "C" {
#endif
+/** \brief Return an object type from the string
+ *
+ * \return -1 if unrecognized.
+ */
+HWLOC_DECLSPEC hwloc_obj_type_t hwloc_obj_type_of_string (const char * string) __hwloc_attribute_pure;
+
/** \brief Stringify a given topology object into a human-readable form.
*
* \note This function is deprecated in favor of hwloc_obj_type_snprintf()
@@ -45,6 +51,39 @@ HWLOC_DECLSPEC int hwloc_obj_snprintf(char * __hwloc_restrict string, size_t siz
hwloc_topology_t topology, hwloc_obj_t obj,
const char * __hwloc_restrict indexprefix, int verbose);
+/** \brief Distribute \p n items over the topology under \p root
+ *
+ * Array \p cpuset will be filled with \p n cpusets recursively distributed
+ * linearly over the topology under \p root, down to depth \p until (which can
+ * be INT_MAX to distribute down to the finest level).
+ *
+ * This is typically useful when an application wants to distribute \p n
+ * threads over a machine, giving each of them as much private cache as
+ * possible and keeping them locally in number order.
+ *
+ * The caller may typically want to also call hwloc_bitmap_singlify()
+ * before binding a thread so that it does not move at all.
+ *
+ * \note This function requires the \p root object to have a CPU set.
+ */
+static __hwloc_inline void
+hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *set, unsigned n, unsigned until)
+{
+ hwloc_distrib(topology, &root, 1, set, n, until, 0);
+}
+
+/** \brief Distribute \p n items over the topology under \p roots
+ *
+ * This is the same as hwloc_distribute, but takes an array of roots instead of
+ * just one root.
+ *
+ * \note This function requires the \p roots objects to have a CPU set.
+ */
+static __hwloc_inline void
+hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *set, unsigned n, unsigned until)
+{
+ hwloc_distrib(topology, roots, n_roots, set, n, until, 0);
+}
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h
index 59f7296..a6046ff 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/diff.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013 Inria. All rights reserved.
+ * Copyright © 2013-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -44,6 +44,13 @@ extern "C" {
* be represented in the difference structures and therefore return
* errors.
*
+ * It means that there is no need to apply the difference when
+ * looking at the tree organization (how many levels, how many
+ * objects per level, what kind of objects, CPU and node sets, etc)
+ * and when binding to objects.
+ * However the difference must be applied when looking at object
+ * attributes such as the name, the memory size or info attributes.
+ *
* @{
*/
@@ -121,7 +128,7 @@ typedef union hwloc_topology_diff_u {
struct hwloc_topology_diff_generic_s {
/* each part of the union must start with these */
hwloc_topology_diff_type_t type;
- union hwloc_topology_diff_u * next;
+ union hwloc_topology_diff_u * next; /* pointer to the next element of the list, or NULL */
} generic;
/* A difference in an object attribute. */
@@ -153,20 +160,20 @@ typedef union hwloc_topology_diff_u {
* simultaneously.
*
* If the difference between 2 objects is too complex to be represented
- * (for instance if some objects are added or removed), a special diff
- * entry of type HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX is queued.
- * The computation of the diff does not continue under these objects.
+ * (for instance if some objects have different types, or different numbers
+ * of children), a special diff entry of type HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX
+ * is queued.
+ * The computation of the diff does not continue below these objects.
* So each such diff entry means that the difference between two subtrees
* could not be computed.
*
* \return 0 if the difference can be represented properly.
*
- * \return 0 with \p diff pointing NULL if there is no difference between
- * the topologies.
+ * \return 0 with \p diff pointing to NULL if there is no difference
+ * between the topologies.
*
- * \return 1 if the difference is too complex (for instance if some objects are added
- * or removed), some entries in the list will be of type HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX
- * and 1 is returned.
+ * \return 1 if the difference is too complex (see above). Some entries in
+ * the list will be of type HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX.
*
* \return -1 on any other error.
*
@@ -179,8 +186,8 @@ typedef union hwloc_topology_diff_u {
* HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX is listed.
*
* \note The output diff may be modified by removing some entries from
- * the list. The removed entries should be freed by passing them as a list
- * to hwloc_topology_diff_destroy().
+ * the list. The removed entries should be freed by passing them to
+ * to hwloc_topology_diff_destroy() (possible as another list).
*/
HWLOC_DECLSPEC int hwloc_topology_diff_build(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff);
@@ -198,16 +205,16 @@ enum hwloc_topology_diff_apply_flags_e {
* \p flags is an OR'ed set of hwloc_topology_diff_apply_flags_e.
*
* The new topology is modified in place. hwloc_topology_dup()
- * may be used to duplicate before patching.
+ * may be used to duplicate it before patching.
*
* If the difference cannot be applied entirely, all previous applied
- * portions are unapplied before returning.
+ * elements are unapplied before returning.
*
* \return 0 on success.
*
* \return -N if applying the difference failed while trying
* to apply the N-th part of the difference. For instance -1
- * is returned if the very first difference portion could not
+ * is returned if the very first difference element could not
* be applied.
*/
HWLOC_DECLSPEC int hwloc_topology_diff_apply(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
index eb09998..750f404 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -644,11 +644,23 @@ hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_
* @{
*/
-/** \brief Distribute \p n items over the topology under \p root
+/** \brief Flags to be given to hwloc_distrib().
+ */
+enum hwloc_distrib_flags_e {
+ /** \brief Distrib in reverse order, starting from the last objects.
+ * \hideinitializer
+ */
+ HWLOC_DISTRIB_FLAG_REVERSE = (1UL<<0)
+};
+
+/** \brief Distribute \p n items over the topology under \p roots
+ *
+ * Array \p set will be filled with \p n cpusets recursively distributed
+ * linearly over the topology under objects \p roots, down to depth \p until
+ * (which can be INT_MAX to distribute down to the finest level).
*
- * Array \p cpuset will be filled with \p n cpusets recursively distributed
- * linearly over the topology under \p root, down to depth \p until (which can
- * be INT_MAX to distribute down to the finest level).
+ * \p n_roots is usually 1 and \p roots only contains the topology root object
+ * so as to distribute over the entire topology.
*
* This is typically useful when an application wants to distribute \p n
* threads over a machine, giving each of them as much private cache as
@@ -657,51 +669,54 @@ hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_
* The caller may typically want to also call hwloc_bitmap_singlify()
* before binding a thread so that it does not move at all.
*
- * \note This function requires the \p root object to have a CPU set.
- */
-static __hwloc_inline void
-hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *root, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until);
-static __hwloc_inline void
-hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *set, unsigned n, unsigned until)
-{
- unsigned i;
- if (!root->arity || n == 1 || root->depth >= until) {
- /* Got to the bottom, we can't split any more, put everything there. */
- for (i=0; i<n; i++)
- set[i] = hwloc_bitmap_dup(root->cpuset);
- return;
- }
- hwloc_distributev(topology, root->children, root->arity, set, n, until);
-}
-
-/** \brief Distribute \p n items over the topology under \p roots
- *
- * This is the same as hwloc_distribute, but takes an array of roots instead of
- * just one root.
+ * \p flags should be 0 or a OR'ed set of ::hwloc_distrib_flags_e.
*
* \note This function requires the \p roots objects to have a CPU set.
+ *
+ * \note This function replaces the now deprecated hwloc_distribute()
+ * and hwloc_distributev() functions.
*/
-static __hwloc_inline void
-hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *set, unsigned n, unsigned until)
+static __hwloc_inline int
+hwloc_distrib(hwloc_topology_t topology,
+ hwloc_obj_t *roots, unsigned n_roots,
+ hwloc_cpuset_t *set,
+ unsigned n,
+ unsigned until, unsigned long flags)
{
unsigned i;
unsigned tot_weight;
hwloc_cpuset_t *cpusetp = set;
+ if (flags & ~HWLOC_DISTRIB_FLAG_REVERSE) {
+ errno = EINVAL;
+ return -1;
+ }
+
tot_weight = 0;
for (i = 0; i < n_roots; i++)
if (roots[i]->cpuset)
tot_weight += hwloc_bitmap_weight(roots[i]->cpuset);
for (i = 0; i < n_roots && tot_weight; i++) {
- /* Give to roots[i] a portion proportional to its weight */
- unsigned weight = roots[i]->cpuset ? hwloc_bitmap_weight(roots[i]->cpuset) : 0;
+ /* Give to roots[] a portion proportional to its weight */
+ hwloc_obj_t root = roots[flags & HWLOC_DISTRIB_FLAG_REVERSE ? n_roots-1-i : i];
+ unsigned weight = root->cpuset ? hwloc_bitmap_weight(root->cpuset) : 0;
unsigned chunk = (n * weight + tot_weight-1) / tot_weight;
- hwloc_distribute(topology, roots[i], cpusetp, chunk, until);
+ if (!root->arity || chunk == 1 || root->depth >= until) {
+ /* Got to the bottom, we can't split any more, put everything there. */
+ unsigned j;
+ for (j=0; j<n; j++)
+ cpusetp[j] = hwloc_bitmap_dup(root->cpuset);
+ } else {
+ /* Still more to distribute, recurse into children */
+ hwloc_distrib(topology, root->children, root->arity, cpusetp, chunk, until, flags);
+ }
cpusetp += chunk;
tot_weight -= weight;
n -= chunk;
}
+
+ return 0;
}
/** @} */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
index a105278..10769f0 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
@@ -43,6 +43,9 @@ HWLOC_DECLSPEC int hwloc_linux_parse_cpumap_file(FILE *file, hwloc_cpuset_t set)
*
* The behavior is exactly the same as the Linux sched_setaffinity system call,
* but uses a hwloc cpuset.
+ *
+ * \note This is equivalent to calling hwloc_set_proc_cpubind() with
+ * HWLOC_CPUBIND_THREAD as flags.
*/
HWLOC_DECLSPEC int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set);
@@ -50,9 +53,19 @@ HWLOC_DECLSPEC int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t
*
* The behavior is exactly the same as the Linux sched_getaffinity system call,
* but uses a hwloc cpuset.
+ *
+ * \note This is equivalent to calling hwloc_get_proc_cpubind() with
+ * HWLOC_CPUBIND_THREAD as flags.
*/
HWLOC_DECLSPEC int hwloc_linux_get_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set);
+/** \brief Get the last physical CPU where thread \p tid ran.
+ *
+ * \note This is equivalent to calling hwloc_get_proc_last_cpu_location() with
+ * HWLOC_CPUBIND_THREAD as flags.
+ */
+HWLOC_DECLSPEC int hwloc_linux_get_tid_last_cpu_location(hwloc_topology_t topology, pid_t tid, hwloc_bitmap_t set);
+
/** @} */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h
index aa5d993..8efd219 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/plugins.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013 Inria. All rights reserved.
+ * Copyright © 2013-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -305,35 +305,6 @@ hwloc_alloc_setup_object(hwloc_obj_type_t type, signed os_index)
*/
HWLOC_DECLSPEC int hwloc_fill_object_sets(hwloc_obj_t obj);
-/** \brief Insert a list of PCI devices and bridges in the backend topology.
- *
- * Insert a list of objects (either PCI device or bridges) starting at first_obj
- * (linked by next_sibling in the topology, and ending with NULL).
- * Objects are placed under the right bridges, and the remaining upstream bridges
- * are then inserted in the topology by calling the get_obj_cpuset() callback to
- * find their locality.
- */
-HWLOC_DECLSPEC int hwloc_insert_pci_device_list(struct hwloc_backend *backend, struct hwloc_obj *first_obj);
-
-/** \brief Return the offset of the given capability in the PCI config space buffer
- *
- * This function requires a 256-bytes config space. Unknown/unavailable bytes should be set to 0xff.
- */
-HWLOC_DECLSPEC unsigned hwloc_pci_find_cap(const unsigned char *config, unsigned cap);
-
-/** \brief Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset.
- *
- * Needs 20 bytes of EXP capability block starting at offset in the config space
- * for registers up to link status.
- */
-HWLOC_DECLSPEC int hwloc_pci_find_linkspeed(const unsigned char *config, unsigned offset, float *linkspeed);
-
-/** \brief Modify the PCI device object into a bridge and fill its attribute if a bridge is found in the PCI config space.
- *
- * This function requires 64 bytes of common configuration header at the beginning of config.
- */
-HWLOC_DECLSPEC int hwloc_pci_prepare_bridge(hwloc_obj_t obj, const unsigned char *config);
-
/** \brief Make sure that plugins can lookup core symbols.
*
* This is a sanity check to avoid lazy-lookup failures when libhwloc
@@ -382,4 +353,42 @@ hwloc_plugin_check_namespace(const char *pluginname __hwloc_attribute_unused, co
+/** \defgroup hwlocality_components_pci_funcs Components and Plugins: PCI functions to be used by components
+ * @{
+ */
+
+/** \brief Insert a list of PCI devices and bridges in the backend topology.
+ *
+ * Insert a list of objects (either PCI device or bridges) starting at first_obj
+ * (linked by next_sibling in the topology, and ending with NULL).
+ * Objects are placed under the right bridges, and the remaining upstream bridges
+ * are then inserted in the topology by calling the get_obj_cpuset() callback to
+ * find their locality.
+ */
+HWLOC_DECLSPEC int hwloc_insert_pci_device_list(struct hwloc_backend *backend, struct hwloc_obj *first_obj);
+
+/** \brief Return the offset of the given capability in the PCI config space buffer
+ *
+ * This function requires a 256-bytes config space. Unknown/unavailable bytes should be set to 0xff.
+ */
+HWLOC_DECLSPEC unsigned hwloc_pci_find_cap(const unsigned char *config, unsigned cap);
+
+/** \brief Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset.
+ *
+ * Needs 20 bytes of EXP capability block starting at offset in the config space
+ * for registers up to link status.
+ */
+HWLOC_DECLSPEC int hwloc_pci_find_linkspeed(const unsigned char *config, unsigned offset, float *linkspeed);
+
+/** \brief Modify the PCI device object into a bridge and fill its attribute if a bridge is found in the PCI config space.
+ *
+ * This function requires 64 bytes of common configuration header at the beginning of config.
+ */
+HWLOC_DECLSPEC int hwloc_pci_prepare_bridge(hwloc_obj_t obj, const unsigned char *config);
+
+/** @} */
+
+
+
+
#endif /* HWLOC_PLUGINS_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
index 382cee9..56d4aa5 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
- * Copyright © 2010-2013 Inria. All rights reserved.
+ * Copyright © 2010-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -176,7 +176,7 @@ extern "C" {
#define hwloc_get_obj_by_type HWLOC_NAME(get_obj_by_type )
#define hwloc_obj_type_string HWLOC_NAME(obj_type_string )
-#define hwloc_obj_type_of_string HWLOC_NAME(obj_type_of_string )
+#define hwloc_obj_type_sscanf HWLOC_NAME(obj_type_sscanf)
#define hwloc_obj_type_snprintf HWLOC_NAME(obj_type_snprintf )
#define hwloc_obj_attr_snprintf HWLOC_NAME(obj_attr_snprintf )
#define hwloc_obj_cpuset_snprintf HWLOC_NAME(obj_cpuset_snprintf)
@@ -329,8 +329,9 @@ extern "C" {
#define hwloc_get_closest_objs HWLOC_NAME(get_closest_objs)
#define hwloc_get_obj_below_by_type HWLOC_NAME(get_obj_below_by_type)
#define hwloc_get_obj_below_array_by_type HWLOC_NAME(get_obj_below_array_by_type)
-#define hwloc_distributev HWLOC_NAME(distributev)
-#define hwloc_distribute HWLOC_NAME(distribute)
+#define hwloc_distrib_flags_e HWLOC_NAME(distrib_flags_e)
+#define HWLOC_DISTRIB_FLAG_REVERSE HWLOC_NAME_CAPS(DISTRIB_FLAG_REVERSE)
+#define hwloc_distrib HWLOC_NAME(distrib)
#define hwloc_alloc_membind_policy HWLOC_NAME(alloc_membind_policy)
#define hwloc_alloc_membind_policy_nodeset HWLOC_NAME(alloc_membind_policy_nodeset)
#define hwloc_topology_get_complete_cpuset HWLOC_NAME(topology_get_complete_cpuset)
@@ -353,17 +354,17 @@ extern "C" {
#define hwloc_topology_diff_obj_attr_type_e HWLOC_NAME(topology_diff_obj_attr_type_e)
#define hwloc_topology_diff_obj_attr_type_t HWLOC_NAME(topology_diff_obj_attr_type_t)
-#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE HWLOC_NAME_CAPS(HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE)
-#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME HWLOC_NAME_CAPS(HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME)
-#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO HWLOC_NAME_CAPS(HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO)
+#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE HWLOC_NAME_CAPS(TOPOLOGY_DIFF_OBJ_ATTR_SIZE)
+#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME HWLOC_NAME_CAPS(TOPOLOGY_DIFF_OBJ_ATTR_NAME)
+#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO HWLOC_NAME_CAPS(TOPOLOGY_DIFF_OBJ_ATTR_INFO)
#define hwloc_topology_diff_obj_attr_u HWLOC_NAME(topology_diff_obj_attr_u)
#define hwloc_topology_diff_obj_attr_generic_s HWLOC_NAME(topology_diff_obj_attr_generic_s)
#define hwloc_topology_diff_obj_attr_uint64_s HWLOC_NAME(topology_diff_obj_attr_uint64_s)
#define hwloc_topology_diff_obj_attr_string_s HWLOC_NAME(topology_diff_obj_attr_string_s)
#define hwloc_topology_diff_type_e HWLOC_NAME(topology_diff_type_e)
#define hwloc_topology_diff_type_t HWLOC_NAME(topology_diff_type_t)
-#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR HWLOC_NAME_CAPS(HWLOC_TOPOLOGY_DIFF_OBJ_ATTR)
-#define HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX HWLOC_NAME_CAPS(HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX)
+#define HWLOC_TOPOLOGY_DIFF_OBJ_ATTR HWLOC_NAME_CAPS(TOPOLOGY_DIFF_OBJ_ATTR)
+#define HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX HWLOC_NAME_CAPS(TOPOLOGY_DIFF_TOO_COMPLEX)
#define hwloc_topology_diff_u HWLOC_NAME(topology_diff_u)
#define hwloc_topology_diff_t HWLOC_NAME(topology_diff_t)
#define hwloc_topology_diff_generic_s HWLOC_NAME(topology_diff_generic_s)
@@ -371,7 +372,7 @@ extern "C" {
#define hwloc_topology_diff_too_complex_s HWLOC_NAME(topology_diff_too_complex_s)
#define hwloc_topology_diff_build HWLOC_NAME(topology_diff_build)
#define hwloc_topology_diff_apply_flags_e HWLOC_NAME(topology_diff_apply_flags_e)
-#define HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE HWLOC_NAME_CAPS(HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE)
+#define HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE HWLOC_NAME_CAPS(TOPOLOGY_DIFF_APPLY_REVERSE)
#define hwloc_topology_diff_apply HWLOC_NAME(topology_diff_apply)
#define hwloc_topology_diff_destroy HWLOC_NAME(topology_diff_destroy)
#define hwloc_topology_diff_load_xml HWLOC_NAME(topology_diff_load_xml)
@@ -400,6 +401,7 @@ extern "C" {
#define hwloc_linux_parse_cpumap_file HWLOC_NAME(linux_parse_cpumap_file)
#define hwloc_linux_set_tid_cpubind HWLOC_NAME(linux_set_tid_cpubind)
#define hwloc_linux_get_tid_cpubind HWLOC_NAME(linux_get_tid_cpubind)
+#define hwloc_linux_get_tid_last_cpu_location HWLOC_NAME(linux_get_tid_last_cpu_location)
/* openfabrics-verbs.h */
@@ -492,7 +494,10 @@ extern "C" {
/* hwloc/deprecated.h */
+#define hwloc_obj_type_of_string HWLOC_NAME(obj_type_of_string )
#define hwloc_obj_snprintf HWLOC_NAME(obj_snprintf)
+#define hwloc_distributev HWLOC_NAME(distributev)
+#define hwloc_distribute HWLOC_NAME(distribute)
/* private/debug.h */
@@ -510,10 +515,10 @@ extern "C" {
#define hwloc_flsl_from_fls32 HWLOC_NAME(flsl_from_fls32)
#define hwloc_weight_long HWLOC_NAME(weight_long)
-/* private/cpuid.h */
+/* private/cpuid-x86.h */
-#define hwloc_have_cpuid HWLOC_NAME(have_cpuid)
-#define hwloc_cpuid HWLOC_NAME(cpuid)
+#define hwloc_have_x86_cpuid HWLOC_NAME(have_x86_cpuid)
+#define hwloc_x86_cpuid HWLOC_NAME(x86_cpuid)
/* private/xml.h */
@@ -567,6 +572,11 @@ extern "C" {
#define hwloc_topology_setup_defaults HWLOC_NAME(topology_setup_defaults)
#define hwloc_topology_clear HWLOC_NAME(topology_clear)
+#define hwloc__add_info HWLOC_NAME(_add_info)
+#define hwloc__find_info_slot HWLOC_NAME(_find_info_slot)
+#define hwloc__move_infos HWLOC_NAME(_move_infos)
+#define hwloc__free_infos HWLOC_NAME(_free_infos)
+
#define hwloc_binding_hooks HWLOC_NAME(binding_hooks)
#define hwloc_set_native_binding_hooks HWLOC_NAME(set_native_binding_hooks)
#define hwloc_set_binding_hooks HWLOC_NAME(set_binding_hooks)
@@ -607,6 +617,8 @@ extern "C" {
#define hwloc_encode_to_base64 HWLOC_NAME(encode_to_base64)
#define hwloc_decode_from_base64 HWLOC_NAME(decode_from_base64)
+#define hwloc_obj_add_info_nodup HWLOC_NAME(obj_add_info_nodup)
+
/* private/solaris-chiptype.h */
#define hwloc_solaris_get_chip_type HWLOC_NAME(solaris_get_chip_type)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/README.txt b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/README.txt
index f4e9bbb..17f7f60 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/README.txt
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/autogen/README.txt
@@ -1,4 +1,3 @@
This directory needs to exist in the repo so that the Autotools can
generate a file here. We have a put a token file in this directory so
-that tools like hg/git don't ignore the empty directory in the
-repository.
+that git doesn't ignore the empty directory in the repository.
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h
similarity index 69%
rename from src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h
rename to src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h
index 9234848..f00a97f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h
@@ -1,17 +1,18 @@
/*
* Copyright © 2010-2012 Université Bordeaux 1
* Copyright © 2010 Cisco Systems, Inc. All rights reserved.
+ * Copyright © 2014 Inria. All rights reserved.
*
* See COPYING in top-level directory.
*/
/* Internals for x86's cpuid. */
-#ifndef HWLOC_PRIVATE_CPUID_H
-#define HWLOC_PRIVATE_CPUID_H
+#ifndef HWLOC_PRIVATE_CPUID_X86_H
+#define HWLOC_PRIVATE_CPUID_X86_H
-#ifdef HWLOC_X86_32_ARCH
-static __hwloc_inline int hwloc_have_cpuid(void)
+#if (defined HWLOC_X86_32_ARCH) && (!defined HWLOC_HAVE_MSVC_CPUIDEX)
+static __hwloc_inline int hwloc_have_x86_cpuid(void)
{
int ret;
unsigned tmp, tmp2;
@@ -44,17 +45,25 @@ static __hwloc_inline int hwloc_have_cpuid(void)
: "=r" (ret), "=&r" (tmp), "=&r" (tmp2));
return ret;
}
-#endif /* HWLOC_X86_32_ARCH */
-#ifdef HWLOC_X86_64_ARCH
-static __hwloc_inline int hwloc_have_cpuid(void) { return 1; }
+#endif /* !defined HWLOC_X86_32_ARCH && !defined HWLOC_HAVE_MSVC_CPUIDEX*/
+#if (defined HWLOC_X86_64_ARCH) || (defined HWLOC_HAVE_MSVC_CPUIDEX)
+static __hwloc_inline int hwloc_have_x86_cpuid(void) { return 1; }
#endif /* HWLOC_X86_64_ARCH */
-static __hwloc_inline void hwloc_cpuid(unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx)
+static __hwloc_inline void hwloc_x86_cpuid(unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx)
{
+#ifdef HWLOC_HAVE_MSVC_CPUIDEX
+ int regs[4];
+ __cpuidex(regs, *eax, *ecx);
+ *eax = regs[0];
+ *ebx = regs[1];
+ *ecx = regs[2];
+ *edx = regs[3];
+#else /* HWLOC_HAVE_MSVC_CPUIDEX */
/* Note: gcc might want to use bx or the stack for %1 addressing, so we can't
* use them :/ */
#ifdef HWLOC_X86_64_ARCH
- unsigned long sav_rbx;
+ hwloc_uint64_t sav_rbx;
asm(
"mov %%rbx,%2\n\t"
"cpuid\n\t"
@@ -74,6 +83,7 @@ static __hwloc_inline void hwloc_cpuid(unsigned *eax, unsigned *ebx, unsigned *e
#else
#error unknown architecture
#endif
+#endif /* HWLOC_HAVE_MSVC_CPUIDEX */
}
-#endif /* HWLOC_PRIVATE_CPUID_H */
+#endif /* HWLOC_PRIVATE_X86_CPUID_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
index a9009de..8d8e6f5 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2012 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
*
@@ -139,6 +139,11 @@ extern int hwloc_connect_levels(hwloc_topology_t topology);
extern void hwloc_topology_setup_defaults(struct hwloc_topology *topology);
extern void hwloc_topology_clear(struct hwloc_topology *topology);
+extern void hwloc__add_info(struct hwloc_obj_info_s **infosp, unsigned *countp, const char *name, const char *value);
+extern char ** hwloc__find_info_slot(struct hwloc_obj_info_s **infosp, unsigned *countp, const char *name);
+extern void hwloc__move_infos(struct hwloc_obj_info_s **dst_infosp, unsigned *dst_countp, struct hwloc_obj_info_s **src_infosp, unsigned *src_countp);
+extern void hwloc__free_infos(struct hwloc_obj_info_s *infos, unsigned count);
+
/* set native OS binding hooks */
extern void hwloc_set_native_binding_hooks(struct hwloc_binding_hooks *hooks, struct hwloc_topology_support *support);
/* set either native OS binding hooks (if thissystem), or dummy ones */
@@ -184,8 +189,11 @@ extern void hwloc_set_netbsd_hooks(struct hwloc_binding_hooks *binding_hooks, st
extern void hwloc_set_hpux_hooks(struct hwloc_binding_hooks *binding_hooks, struct hwloc_topology_support *support);
#endif /* HWLOC_HPUX_SYS */
-/* Insert uname-specific names/values in the object infos array */
-extern void hwloc_add_uname_info(struct hwloc_topology *topology);
+/* Insert uname-specific names/values in the object infos array.
+ * If cached_uname isn't NULL, it is used as a struct utsname instead of recalling uname.
+ * Any field that starts with \0 is ignored.
+ */
+extern void hwloc_add_uname_info(struct hwloc_topology *topology, void *cached_uname);
/* Free obj and its attributes assuming it doesn't have any children/parent anymore */
extern void hwloc_free_unlinked_object(hwloc_obj_t obj);
@@ -295,4 +303,6 @@ extern int hwloc_namecoloncmp(const char *haystack, const char *needle, size_t n
* required size. hwloc_snprintf always report the actually required size. */
extern int hwloc_snprintf(char *str, size_t size, const char *format, ...) __hwloc_attribute_format(printf, 3, 4);
+extern void hwloc_obj_add_info_nodup(hwloc_obj_t obj, const char *name, const char *value, int nodup);
+
#endif /* HWLOC_PRIVATE_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
index 263895f..b4d2f6c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2013 Inria. All rights reserved.
+# Copyright © 2009-2014 Inria. All rights reserved.
# Copyright © 2009-2012 Université Bordeaux 1
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# Copyright © 2011-2012 Oracle and/or its affiliates. All rights reserved.
@@ -157,9 +157,9 @@ sources += topology-netbsd.c
ldflags += -lpthread
endif HWLOC_HAVE_NETBSD
-if HWLOC_HAVE_CPUID
+if HWLOC_HAVE_X86_CPUID
sources += topology-x86.c
-endif HWLOC_HAVE_CPUID
+endif HWLOC_HAVE_X86_CPUID
if HWLOC_HAVE_GCC
ldflags += -no-undefined
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
index 046b7cf..37921bc 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
@@ -13,8 +13,9 @@
#ifdef HAVE_SYS_MMAN_H
# include <sys/mman.h>
#endif
-#ifdef HAVE_MALLOC_H
-# include <malloc.h>
+/* <malloc.h> is only needed if we don't have posix_memalign() */
+#if defined(hwloc_getpagesize) && !defined(HAVE_POSIX_MEMALIGN) && defined(HAVE_MEMALIGN) && defined(HAVE_MALLOC_H)
+#include <malloc.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c
index 5309b56..6384dad 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/components.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2012 Université Bordeau 1
* See COPYING in top-level directory.
*/
@@ -90,7 +90,7 @@ hwloc__dlforeach_cb(const char *filename, void *_data __hwloc_attribute_unused)
fprintf(stderr, "Failed to load plugin: %s\n", lt_dlerror());
goto out;
}
- componentsymbolname = malloc(6+strlen(basename)+10+1);
+ componentsymbolname = malloc(strlen(basename)+10+1);
sprintf(componentsymbolname, "%s_component", basename);
component = lt_dlsym(handle, componentsymbolname);
if (!component) {
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c
index da14998..40cda64 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c
@@ -76,14 +76,15 @@ static int hwloc_append_diff_obj_attr_string(hwloc_obj_t obj,
hwloc_topology_diff_t *lastdiffp)
{
hwloc_topology_diff_t newdiff;
- newdiff = malloc(sizeof(*newdiff));
- if (!newdiff)
- return -1;
if (obj->type == HWLOC_OBJ_MISC)
/* TODO: add a custom level/depth for Misc */
return hwloc_append_diff_too_complex(obj, firstdiffp, lastdiffp);
+ newdiff = malloc(sizeof(*newdiff));
+ if (!newdiff)
+ return -1;
+
newdiff->obj_attr.type = HWLOC_TOPOLOGY_DIFF_OBJ_ATTR;
newdiff->obj_attr.obj_depth = obj->depth;
newdiff->obj_attr.obj_index = obj->logical_index;
@@ -97,26 +98,27 @@ static int hwloc_append_diff_obj_attr_string(hwloc_obj_t obj,
static int hwloc_append_diff_obj_attr_uint64(hwloc_obj_t obj,
hwloc_topology_diff_obj_attr_type_t type,
- hwloc_uint64_t idx,
+ hwloc_uint64_t index,
hwloc_uint64_t oldvalue,
hwloc_uint64_t newvalue,
hwloc_topology_diff_t *firstdiffp,
hwloc_topology_diff_t *lastdiffp)
{
hwloc_topology_diff_t newdiff;
- newdiff = malloc(sizeof(*newdiff));
- if (!newdiff)
- return -1;
if (obj->type == HWLOC_OBJ_MISC)
/* TODO: add a custom level/depth for Misc */
return hwloc_append_diff_too_complex(obj, firstdiffp, lastdiffp);
+ newdiff = malloc(sizeof(*newdiff));
+ if (!newdiff)
+ return -1;
+
newdiff->obj_attr.type = HWLOC_TOPOLOGY_DIFF_OBJ_ATTR;
newdiff->obj_attr.obj_depth = obj->depth;
newdiff->obj_attr.obj_index = obj->logical_index;
newdiff->obj_attr.diff.uint64.type = type;
- newdiff->obj_attr.diff.uint64.index = idx;
+ newdiff->obj_attr.diff.uint64.index = index;
newdiff->obj_attr.diff.uint64.oldvalue = oldvalue;
newdiff->obj_attr.diff.uint64.newvalue = newvalue;
hwloc_append_diff(newdiff, firstdiffp, lastdiffp);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
index ca3f7ea..00d589a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2010-2013 Inria. All rights reserved.
+ * Copyright © 2010-2014 Inria. All rights reserved.
* Copyright © 2011-2012 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -515,7 +515,7 @@ hwloc_distances__finalize_logical(struct hwloc_topology *topology,
fprintf(stderr, "*\n");
fprintf(stderr, "* Please report this error message to the hwloc user's mailing list,\n");
#ifdef HWLOC_LINUX_SYS
- fprintf(stderr, "* along with the output from the hwloc-gather-topology.sh script.\n");
+ fprintf(stderr, "* along with the output from the hwloc-gather-topology script.\n");
#else
fprintf(stderr, "* along with any relevant topology information from your platform.\n");
#endif
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c
index 9ef3be3..0cc7349 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2012 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -85,22 +85,33 @@ int hwloc_namecoloncmp(const char *haystack, const char *needle, size_t n)
return i < n;
}
-void hwloc_add_uname_info(struct hwloc_topology *topology __hwloc_attribute_unused)
+void hwloc_add_uname_info(struct hwloc_topology *topology __hwloc_attribute_unused,
+ void *cached_uname __hwloc_attribute_unused)
{
#ifdef HAVE_UNAME
- struct utsname utsname;
-
- if (uname(&utsname) < 0)
- return;
+ struct utsname _utsname, *utsname;
if (hwloc_obj_get_info_by_name(topology->levels[0][0], "OSName"))
/* don't annotate twice */
return;
- hwloc_obj_add_info(topology->levels[0][0], "OSName", utsname.sysname);
- hwloc_obj_add_info(topology->levels[0][0], "OSRelease", utsname.release);
- hwloc_obj_add_info(topology->levels[0][0], "OSVersion", utsname.version);
- hwloc_obj_add_info(topology->levels[0][0], "HostName", utsname.nodename);
- hwloc_obj_add_info(topology->levels[0][0], "Architecture", utsname.machine);
+ if (cached_uname)
+ utsname = (struct utsname *) cached_uname;
+ else {
+ utsname = &_utsname;
+ if (uname(utsname) < 0)
+ return;
+ }
+
+ if (*utsname->sysname)
+ hwloc_obj_add_info(topology->levels[0][0], "OSName", utsname->sysname);
+ if (*utsname->release)
+ hwloc_obj_add_info(topology->levels[0][0], "OSRelease", utsname->release);
+ if (*utsname->version)
+ hwloc_obj_add_info(topology->levels[0][0], "OSVersion", utsname->version);
+ if (*utsname->nodename)
+ hwloc_obj_add_info(topology->levels[0][0], "HostName", utsname->nodename);
+ if (*utsname->machine)
+ hwloc_obj_add_info(topology->levels[0][0], "Architecture", utsname->machine);
#endif /* HAVE_UNAME */
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
index e19faeb..e2d34eb 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
@@ -773,7 +773,7 @@ hwloc_look_aix(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "AIX");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c
index 5a2e611..7b4dfec 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-bgq.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013 Inria. All rights reserved.
+ * Copyright © 2013-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -104,7 +104,7 @@ hwloc_look_bgq(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "BGQ");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
@@ -209,8 +209,9 @@ hwloc_bgq_component_instantiate(struct hwloc_disc_component *component,
if (!env || !atoi(env)) {
err = uname(&utsname);
if (err || strcmp(utsname.sysname, "CNK") || strcmp(utsname.machine, "BGQ")) {
- fprintf(stderr, "*** Found unexpected uname sysname `%s' machine `%s', disabling BGQ backend.\n", utsname.sysname, utsname.machine);
- fprintf(stderr, "*** Set HWLOC_FORCE_BGQ=1 in the environment to enforce the BGQ backend.\n");
+ fprintf(stderr, "*** Found unexpected uname sysname `%s' machine `%s'\n", utsname.sysname, utsname.machine);
+ fprintf(stderr, "*** The BGQ backend is only enabled on compute nodes by default (sysname=CNK machine=BGQ)\n");
+ fprintf(stderr, "*** Set HWLOC_FORCE_BGQ=1 in the environment to enforce the BGQ backend anyway.\n");
return NULL;
}
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c
index e6f8ce6..9faf29a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-cuda.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2011 Université Bordeaux 1
- * Copyright © 2012 Inria. All rights reserved.
+ * Copyright © 2012-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -64,6 +64,31 @@ hwloc_cuda_query_devices(struct hwloc_cuda_backend_data_s *data)
return;
}
+static unsigned hwloc_cuda_cores_per_MP(int major, int minor)
+{
+ /* based on CUDA C Programming Guide, Annex G */
+ switch (major) {
+ case 1:
+ switch (minor) {
+ case 0:
+ case 1:
+ case 2:
+ case 3: return 8;
+ }
+ break;
+ case 2:
+ switch (minor) {
+ case 0: return 32;
+ case 1: return 48;
+ }
+ break;
+ case 3:
+ return 192;
+ }
+ hwloc_debug("unknown compute capability %u.%u, disabling core display.\n", major, minor);
+ return 0;
+}
+
static int
hwloc_cuda_backend_notify_new_object(struct hwloc_backend *backend, struct hwloc_backend *caller __hwloc_attribute_unused,
struct hwloc_obj *pcidev)
@@ -96,9 +121,11 @@ hwloc_cuda_backend_notify_new_object(struct hwloc_backend *backend, struct hwloc
for(i=0; i<data->nr_devices; i++) {
struct hwloc_cuda_device_info_s *info = &data->devices[i];
char cuda_name[32];
+ char number[32];
struct cudaDeviceProp prop;
hwloc_obj_t cuda_device;
cudaError_t cures;
+ unsigned cores;
if (info->pcidomain != pcidev->attr->pcidev.domain)
continue;
@@ -123,6 +150,24 @@ hwloc_cuda_backend_notify_new_object(struct hwloc_backend *backend, struct hwloc
if (!cures)
hwloc_obj_add_info(cuda_device, "GPUModel", prop.name);
+ snprintf(number, sizeof(number), "%llu", ((unsigned long long) prop.totalGlobalMem) >> 10);
+ hwloc_obj_add_info(cuda_device, "CUDAGlobalMemorySize", number);
+
+ snprintf(number, sizeof(number), "%llu", ((unsigned long long) prop.l2CacheSize) >> 10);
+ hwloc_obj_add_info(cuda_device, "CUDAL2CacheSize", number);
+
+ snprintf(number, sizeof(number), "%d", prop.multiProcessorCount);
+ hwloc_obj_add_info(cuda_device, "CUDAMultiProcessors", number);
+
+ cores = hwloc_cuda_cores_per_MP(prop.major, prop.minor);
+ if (cores) {
+ snprintf(number, sizeof(number), "%u", cores);
+ hwloc_obj_add_info(cuda_device, "CUDACoresPerMP", number);
+ }
+
+ snprintf(number, sizeof(number), "%llu", ((unsigned long long) prop.sharedMemPerBlock) >> 10);
+ hwloc_obj_add_info(cuda_device, "CUDASharedMemorySizePerMP", number);
+
hwloc_insert_object_by_parent(topology, pcidev, cuda_device);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c
index 39e13a3..7934c39 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c
@@ -265,7 +265,7 @@ hwloc_look_darwin(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "Darwin");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c
index 7e13ca1..eecedb5 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c
@@ -192,7 +192,7 @@ hwloc_look_freebsd(struct hwloc_backend *backend)
#endif
hwloc_obj_add_info(topology->levels[0][0], "Backend", "FreeBSD");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
index bd84379..02c3940 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
@@ -247,7 +247,7 @@ hwloc_look_hpux(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "HP-UX");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
index 5e09731..a42b4f3 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2013 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* Copyright © 2010 IBM
@@ -40,6 +40,9 @@
struct hwloc_linux_backend_data_s {
int root_fd; /* The file descriptor for the file system root, used when browsing, e.g., Linux' sysfs and procfs. */
int is_real_fsroot; /* Boolean saying whether root_fd points to the real filesystem root of the system */
+
+ struct utsname utsname; /* fields contain \0 when unknown */
+
int deprecated_classlinks_model; /* -2 if never tried, -1 if unknown, 0 if new (device contains class/name), 1 if old (device contains class:name) */
int mic_need_directlookup; /* if not tried yet, 0 if not needed, 1 if needed */
unsigned mic_directlookup_id_max; /* -1 if not tried yet, 0 if none to lookup, maxid+1 otherwise */
@@ -974,7 +977,7 @@ hwloc_linux_get_thread_cpubind(hwloc_topology_t topology, pthread_t tid, hwloc_b
}
#endif /* HAVE_DECL_PTHREAD_GETAFFINITY_NP */
-static int
+int
hwloc_linux_get_tid_last_cpu_location(hwloc_topology_t topology __hwloc_attribute_unused, pid_t tid, hwloc_bitmap_t set)
{
/* read /proc/pid/stat.
@@ -1539,8 +1542,10 @@ struct hwloc_linux_cpuinfo_proc {
long Pcore, Psock;
/* set later, or -1 if unknown */
long Lcore, Lsock;
- /* set during hwloc_linux_parse_cpuinfo or NULL if unknown */
- char *cpumodel;
+
+ /* custom info, set during hwloc_linux_parse_cpuinfo */
+ struct hwloc_obj_info_s *infos;
+ unsigned infos_count;
};
static int
@@ -2685,20 +2690,23 @@ look_sysfsnode(struct hwloc_topology *topology,
{
hwloc_obj_t * nodes = calloc(nbnodes, sizeof(hwloc_obj_t));
- float * distances = calloc(nbnodes*nbnodes, sizeof(float));
unsigned *indexes = calloc(nbnodes, sizeof(unsigned));
+ float * distances;
+ int failednodes = 0;
unsigned index_;
- if (NULL == indexes || NULL == distances || NULL == nodes) {
+ if (NULL == nodes || NULL == indexes) {
free(nodes);
free(indexes);
- free(distances);
hwloc_bitmap_free(nodeset);
+ nbnodes = 0;
goto out;
}
- /* Get node indexes now. We need them in order since Linux groups
- * sparse distances but keep them in order in the sysfs distance files.
+ /* Unsparsify node indexes.
+ * We'll need them later because Linux groups sparse distances
+ * and keeps them in order in the sysfs distance files.
+ * It'll simplify things in the meantime.
*/
index_ = 0;
hwloc_bitmap_foreach_begin (osnode, nodeset) {
@@ -2708,25 +2716,28 @@ look_sysfsnode(struct hwloc_topology *topology,
hwloc_bitmap_free(nodeset);
#ifdef HWLOC_DEBUG
- hwloc_debug("%s", "numa distance indexes: ");
+ hwloc_debug("%s", "NUMA indexes: ");
for (index_ = 0; index_ < nbnodes; index_++) {
hwloc_debug(" %u", indexes[index_]);
}
hwloc_debug("%s", "\n");
#endif
- /* Get actual distances now */
+ /* Create NUMA objects */
for (index_ = 0; index_ < nbnodes; index_++) {
char nodepath[SYSFS_NUMA_NODE_PATH_LEN];
hwloc_bitmap_t cpuset;
- hwloc_obj_t node, res_obj __hwloc_attribute_unused;
+ hwloc_obj_t node, res_obj;
osnode = indexes[index_];
sprintf(nodepath, "%s/node%u/cpumap", path, osnode);
cpuset = hwloc_parse_cpumap(nodepath, data->root_fd);
- if (!cpuset)
- continue;
+ if (!cpuset) {
+ /* This NUMA object won't be inserted, we'll ignore distances */
+ failednodes++;
+ continue;
+ }
node = hwloc_alloc_setup_object(HWLOC_OBJ_NODE, osnode);
node->cpuset = cpuset;
@@ -2738,9 +2749,36 @@ look_sysfsnode(struct hwloc_topology *topology,
hwloc_debug_1arg_bitmap("os node %u has cpuset %s\n",
osnode, node->cpuset);
res_obj = hwloc_insert_object_by_cpuset(topology, node);
- assert(node == res_obj); /* if we got merged, somebody else added NODEs earlier, things went wrong?! */
+ if (node == res_obj) {
+ nodes[index_] = node;
+ } else {
+ /* We got merged somehow, could be a buggy BIOS reporting wrong NUMA node cpuset.
+ * This object disappeared, we'll ignore distances */
+ failednodes++;
+ }
+ }
- nodes[index_] = node;
+ if (failednodes) {
+ /* failed to read/create some nodes, don't bother reading/fixing
+ * a distance matrix that would likely be wrong anyway.
+ */
+ nbnodes -= failednodes;
+ distances = NULL;
+ } else {
+ distances = calloc(nbnodes*nbnodes, sizeof(float));
+ }
+
+ if (NULL == distances) {
+ free(nodes);
+ free(indexes);
+ goto out;
+ }
+
+ /* Get actual distances now */
+ for (index_ = 0; index_ < nbnodes; index_++) {
+ char nodepath[SYSFS_NUMA_NODE_PATH_LEN];
+
+ osnode = indexes[index_];
/* Linux nodeX/distance file contains distance from X to other localities (from ACPI SLIT table or so),
* store them in slots X*N...X*N+N-1 */
@@ -2847,10 +2885,9 @@ look_sysfscpu(struct hwloc_topology *topology,
/* add cpuinfo */
if (cpuinfo_Lprocs) {
for(j=0; j<(int) cpuinfo_numprocs; j++)
- if ((int) cpuinfo_Lprocs[j].Pproc == i
- && cpuinfo_Lprocs[j].cpumodel) {
- /* FIXME add to name as well? */
- hwloc_obj_add_info(sock, "CPUModel", cpuinfo_Lprocs[j].cpumodel);
+ if ((int) cpuinfo_Lprocs[j].Pproc == i) {
+ hwloc__move_infos(&sock->infos, &sock->infos_count,
+ &cpuinfo_Lprocs[j].infos, &cpuinfo_Lprocs[j].infos_count);
}
}
hwloc_insert_object_by_cpuset(topology, sock);
@@ -3062,26 +3099,116 @@ look_sysfscpu(struct hwloc_topology *topology,
****** cpuinfo Topology Discovery ******
****************************************/
+static int
+hwloc_linux_parse_cpuinfo_x86(const char *prefix, const char *value,
+ struct hwloc_obj_info_s **infos, unsigned *infos_count,
+ int is_global __hwloc_attribute_unused)
+{
+ if (!strcmp("vendor_id", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUVendor", value);
+ } else if (!strcmp("model name", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUModel", value);
+ } else if (!strcmp("model", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUModelNumber", value);
+ } else if (!strcmp("cpu family", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUFamilyNumber", value);
+ }
+ return 0;
+}
+
+static int
+hwloc_linux_parse_cpuinfo_ia64(const char *prefix, const char *value,
+ struct hwloc_obj_info_s **infos, unsigned *infos_count,
+ int is_global __hwloc_attribute_unused)
+{
+ if (!strcmp("vendor", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUVendor", value);
+ } else if (!strcmp("model name", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUModel", value);
+ } else if (!strcmp("model", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUModelNumber", value);
+ } else if (!strcmp("family", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUFamilyNumber", value);
+ }
+ return 0;
+}
+
+static int
+hwloc_linux_parse_cpuinfo_arm(const char *prefix, const char *value,
+ struct hwloc_obj_info_s **infos, unsigned *infos_count,
+ int is_global __hwloc_attribute_unused)
+{
+ if (!strcmp("Processor", prefix) /* old kernels with one Processor header */
+ || !strcmp("model name", prefix) /* new kernels with one model name per core */) {
+ hwloc__add_info(infos, infos_count, "CPUModel", value);
+ } else if (!strcmp("CPU implementer", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUImplementer", value);
+ } else if (!strcmp("CPU architecture", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUArchitecture", value);
+ } else if (!strcmp("CPU variant", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUVariant", value);
+ } else if (!strcmp("CPU part", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUPart", value);
+ } else if (!strcmp("CPU revision", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPURevision", value);
+ } else if (!strcmp("Hardware", prefix)) {
+ hwloc__add_info(infos, infos_count, "HardwareName", value);
+ } else if (!strcmp("Revision", prefix)) {
+ hwloc__add_info(infos, infos_count, "HardwareRevision", value);
+ } else if (!strcmp("Serial", prefix)) {
+ hwloc__add_info(infos, infos_count, "HardwareSerial", value);
+ }
+ return 0;
+}
+
+static int
+hwloc_linux_parse_cpuinfo_ppc(const char *prefix, const char *value,
+ struct hwloc_obj_info_s **infos, unsigned *infos_count,
+ int is_global)
+{
+ /* common fields */
+ if (!strcmp("cpu", prefix)) {
+ hwloc__add_info(infos, infos_count, "CPUModel", value);
+ } else if (!strcmp("platform", prefix)) {
+ hwloc__add_info(infos, infos_count, "PlatformName", value);
+ } else if (!strcmp("model", prefix)) {
+ hwloc__add_info(infos, infos_count, "PlatformModel", value);
+ }
+ /* platform-specific fields */
+ else if (!strcasecmp("vendor", prefix)) {
+ hwloc__add_info(infos, infos_count, "PlatformVendor", value);
+ } else if (!strcmp("Board ID", prefix)) {
+ hwloc__add_info(infos, infos_count, "PlatformBoardID", value);
+ } else if (!strcmp("Board", prefix)
+ || !strcasecmp("Machine", prefix)) {
+ /* machine and board are similar (and often more precise) than model above */
+ char **valuep = hwloc__find_info_slot(infos, infos_count, "PlatformModel");
+ if (*valuep)
+ free(*valuep);
+ *valuep = strdup(value);
+ } else if (!strcasecmp("Revision", prefix)
+ || !strcmp("Hardware rev", prefix)) {
+ hwloc__add_info(infos, infos_count, is_global ? "PlatformRevision" : "CPURevision", value);
+ } else if (!strcmp("SVR", prefix)) {
+ hwloc__add_info(infos, infos_count, "SystemVersionRegister", value);
+ } else if (!strcmp("PVR", prefix)) {
+ hwloc__add_info(infos, infos_count, "ProcessorVersionRegister", value);
+ }
+ /* don't match 'board*' because there's also "board l2" on some platforms */
+ return 0;
+}
+
/*
- * architecture properly detected:
- * arm: "Processor\t:" => OK
* avr32: "chip type\t:" => OK
* blackfin: "model name\t:" => OK
* h8300: "CPU:" => OK
- * ia64: "model name :" => OK
* m68k: "CPU:" => OK
* mips: "cpu model\t\t:" => OK
* openrisc: "CPU:" => OK
- * ppc: "cpu\t\t:" => OK
* sparc: "cpu\t\t:" => OK
* tile: "model name\t:" => OK
* unicore32: "Processor\t:" => OK
- * x86: "model name\t:" => OK
- *
- * cannot work:
- * alpha: "cpu\t\t\t:" + "cpu model\t\t:" => no processor index lines anyway
- *
- * partially supported:
+ * alpha: "cpu\t\t\t: Alpha" + "cpu model\t\t:" => "cpu" overwritten by "cpu model", no processor indexes
* cris: "cpu\t\t:" + "cpu model\t:" => only "cpu"
* frv: "CPU-Core:" + "CPU:" => only "CPU"
* mn10300: "cpu core :" + "model name :" => only "model name"
@@ -3094,16 +3221,22 @@ look_sysfscpu(struct hwloc_topology *topology,
* xtensa: "model\t\t:" => KO
*/
static int
-hwloc_linux_parse_cpuinfo_model(const char *prefix, const char *value,
- char **model)
+hwloc_linux_parse_cpuinfo_generic(const char *prefix, const char *value,
+ struct hwloc_obj_info_s **infos, unsigned *infos_count,
+ int is_global __hwloc_attribute_unused)
{
if (!strcmp("model name", prefix)
|| !strcmp("Processor", prefix)
|| !strcmp("chip type", prefix)
|| !strcmp("cpu model", prefix)
|| !strcasecmp("cpu", prefix)) {
- if (!*model)
- *model = strdup(value);
+ /* keep the last one, assume it's more precise than the first one.
+ * we should have the Architecture keypair for basic information anyway.
+ */
+ char **valuep = hwloc__find_info_slot(infos, infos_count, "CPUModel");
+ if (*valuep)
+ free(*valuep);
+ *valuep = strdup(value);
}
return 0;
}
@@ -3111,7 +3244,8 @@ hwloc_linux_parse_cpuinfo_model(const char *prefix, const char *value,
static int
hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
const char *path,
- struct hwloc_linux_cpuinfo_proc ** Lprocs_p)
+ struct hwloc_linux_cpuinfo_proc ** Lprocs_p,
+ struct hwloc_obj_info_s **global_infos, unsigned *global_infos_count)
{
FILE *fd;
char *str = NULL;
@@ -3120,7 +3254,8 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
unsigned allocated_Lprocs = 0;
struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
unsigned numprocs = 0;
- char *global_cpumodel = NULL;
+ int curproc = -1;
+ int (*parse_cpuinfo_func)(const char *, const char *, struct hwloc_obj_info_s **, unsigned *, int) = NULL;
if (!(fd=hwloc_fopen(path,"r", data->root_fd)))
{
@@ -3145,12 +3280,18 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
*end = 0;
else
noend = 1;
+ /* if empty line, skip and reset curproc */
+ if (!*str) {
+ curproc = -1;
+ continue;
+ }
/* skip lines with no dot */
dot = strchr(str, ':');
if (!dot)
continue;
/* skip lines not starting with a letter */
- if (*str > 'z' || *str < 'a')
+ if ((*str > 'z' || *str < 'a')
+ && (*str > 'Z' || *str < 'A'))
continue;
/* mark the end of the prefix */
@@ -3177,7 +3318,7 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
}
/* actually parse numbers */
getprocnb_begin(PROCESSOR, Pproc);
- numprocs++;
+ curproc = numprocs++;
if (numprocs > allocated_Lprocs) {
if (!allocated_Lprocs)
allocated_Lprocs = 8;
@@ -3185,24 +3326,49 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
allocated_Lprocs *= 2;
Lprocs = realloc(Lprocs, allocated_Lprocs * sizeof(*Lprocs));
}
- Lprocs[numprocs-1].Pproc = Pproc;
- Lprocs[numprocs-1].Pcore = -1;
- Lprocs[numprocs-1].Psock = -1;
- Lprocs[numprocs-1].Lcore = -1;
- Lprocs[numprocs-1].Lsock = -1;
- Lprocs[numprocs-1].cpumodel = global_cpumodel ? strdup(global_cpumodel) : NULL;
+ Lprocs[curproc].Pproc = Pproc;
+ Lprocs[curproc].Pcore = -1;
+ Lprocs[curproc].Psock = -1;
+ Lprocs[curproc].Lcore = -1;
+ Lprocs[curproc].Lsock = -1;
+ Lprocs[curproc].infos = NULL;
+ Lprocs[curproc].infos_count = 0;
getprocnb_end() else
getprocnb_begin(PACKAGEID, Psock);
- Lprocs[numprocs-1].Psock = Psock;
+ Lprocs[curproc].Psock = Psock;
getprocnb_end() else
getprocnb_begin(COREID, Pcore);
- Lprocs[numprocs-1].Pcore = Pcore;
+ Lprocs[curproc].Pcore = Pcore;
getprocnb_end() else {
+
+ /* architecture specific or default routine for parsing cpumodel */
+ if (!parse_cpuinfo_func) {
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_generic;
+ if (*data->utsname.machine) {
+ /* x86_32 x86_64 k1om => x86 */
+ if (!strcmp(data->utsname.machine, "x86_64")
+ || (data->utsname.machine[0] == 'i' && !strcmp(data->utsname.machine+2, "86"))
+ || !strcmp(data->utsname.machine, "k1om"))
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_x86;
+ /* ia64 */
+ else if (!strcmp(data->utsname.machine, "ia64"))
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_ia64;
+ /* arm */
+ else if (!strncmp(data->utsname.machine, "arm", 3))
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_arm;
+ else if (!strncmp(data->utsname.machine, "ppc", 3)
+ || !strncmp(data->utsname.machine, "power", 5))
+ parse_cpuinfo_func = hwloc_linux_parse_cpuinfo_ppc;
+ }
+ }
/* we can't assume that we already got a processor index line:
* alpha/frv/h8300/m68k/microblaze/sparc have no processor lines at all, only a global entry.
* tile has a global section with model name before the list of processor lines.
*/
- hwloc_linux_parse_cpuinfo_model(prefix, value, numprocs ? &Lprocs[numprocs-1].cpumodel : &global_cpumodel);
+ parse_cpuinfo_func(prefix, value,
+ curproc >= 0 ? &Lprocs[curproc].infos : global_infos,
+ curproc >= 0 ? &Lprocs[curproc].infos_count : global_infos_count,
+ curproc < 0);
}
if (noend) {
@@ -3214,7 +3380,6 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
}
fclose(fd);
free(str);
- free(global_cpumodel);
*Lprocs_p = Lprocs;
return numprocs;
@@ -3222,18 +3387,22 @@ hwloc_linux_parse_cpuinfo(struct hwloc_linux_backend_data_s *data,
err:
fclose(fd);
free(str);
- free(global_cpumodel);
free(Lprocs);
return -1;
}
static void
-hwloc_linux_free_cpuinfo(struct hwloc_linux_cpuinfo_proc * Lprocs, unsigned numprocs)
+hwloc_linux_free_cpuinfo(struct hwloc_linux_cpuinfo_proc * Lprocs, unsigned numprocs,
+ struct hwloc_obj_info_s *global_infos, unsigned global_infos_count)
{
- unsigned i;
- for(i=0; i<numprocs; i++)
- free(Lprocs[i].cpumodel);
- free(Lprocs);
+ if (Lprocs) {
+ unsigned i;
+ for(i=0; i<numprocs; i++) {
+ hwloc__free_infos(Lprocs[i].infos, Lprocs[i].infos_count);
+ }
+ free(Lprocs);
+ }
+ hwloc__free_infos(global_infos, global_infos_count);
}
static int
@@ -3242,6 +3411,8 @@ look_cpuinfo(struct hwloc_topology *topology,
const char *path, hwloc_bitmap_t online_cpuset)
{
struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
+ struct hwloc_obj_info_s *global_infos = NULL;
+ unsigned global_infos_count = 0;
/* P for physical/OS index, L for logical (e.g. in we order we get them, not in the final hwloc logical order) */
unsigned *Lcore_to_Pcore;
unsigned *Lcore_to_Psock; /* needed because Lcore is equivalent to Pcore+Psock, not to Pcore alone */
@@ -3257,8 +3428,16 @@ look_cpuinfo(struct hwloc_topology *topology,
hwloc_bitmap_t cpuset;
/* parse the entire cpuinfo first, fill the Lprocs array and numprocs */
- _numprocs = hwloc_linux_parse_cpuinfo(data, path, &Lprocs);
+ _numprocs = hwloc_linux_parse_cpuinfo(data, path, &Lprocs, &global_infos, &global_infos_count);
+
+
+ /* setup root info */
+ hwloc__move_infos(&hwloc_get_root_obj(topology)->infos, &hwloc_get_root_obj(topology)->infos_count,
+ &global_infos, &global_infos_count);
+
+
if (_numprocs <= 0)
+ /* found no processor */
return -1;
numprocs = _numprocs;
@@ -3325,18 +3504,16 @@ look_cpuinfo(struct hwloc_topology *topology,
if (!missingsocket && numsockets>0) {
for (i = 0; i < numsockets; i++) {
struct hwloc_obj *obj = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, Lsock_to_Psock[i]);
- char *cpumodel = NULL;
+ int doneinfos = 0;
obj->cpuset = hwloc_bitmap_alloc();
for(j=0; j<numprocs; j++)
if ((unsigned) Lprocs[j].Lsock == i) {
hwloc_bitmap_set(obj->cpuset, Lprocs[j].Pproc);
- if (Lprocs[j].cpumodel && !cpumodel) /* use the first one, they should all be equal anyway */
- cpumodel = Lprocs[j].cpumodel;
+ if (!doneinfos) {
+ hwloc__move_infos(&obj->infos, &obj->infos_count, &Lprocs[j].infos, &Lprocs[j].infos_count);
+ doneinfos = 1;
+ }
}
- if (cpumodel) {
- /* FIXME add to name as well? */
- hwloc_obj_add_info(obj, "CPUModel", cpumodel);
- }
hwloc_debug_1arg_bitmap("Socket %d has cpuset %s\n", i, obj->cpuset);
hwloc_insert_object_by_cpuset(topology, obj);
}
@@ -3385,7 +3562,7 @@ look_cpuinfo(struct hwloc_topology *topology,
free(Lcore_to_Psock);
free(Lsock_to_Psock);
- hwloc_linux_free_cpuinfo(Lprocs, numprocs);
+ hwloc_linux_free_cpuinfo(Lprocs, numprocs, global_infos, global_infos_count);
look_powerpc_device_tree(topology, data);
return 0;
@@ -3431,6 +3608,78 @@ hwloc_linux_fallback_pu_level(struct hwloc_topology *topology)
hwloc_setup_pu_level(topology, 1);
}
+static void
+hwloc_gather_system_info(struct hwloc_topology *topology,
+ struct hwloc_linux_backend_data_s *data)
+{
+ FILE *file;
+ char line[128]; /* enough for utsname fields */
+ char *env;
+
+ /* initialize to something sane */
+ memset(&data->utsname, 0, sizeof(data->utsname));
+
+ /* read thissystem info */
+ if (topology->is_thissystem)
+ uname(&data->utsname);
+
+ /* overwrite with optional /proc/hwloc-nofile-info */
+ file = hwloc_fopen("/proc/hwloc-nofile-info", "r", data->root_fd);
+ if (file) {
+ while (fgets(line, sizeof(line), file)) {
+ char *tmp = strchr(line, '\n');
+ if (!strncmp("OSName: ", line, 8)) {
+ if (tmp)
+ *tmp = '\0';
+ strncpy(data->utsname.sysname, line+8, sizeof(data->utsname.sysname));
+ data->utsname.sysname[sizeof(data->utsname.sysname)-1] = '\0';
+ } else if (!strncmp("OSRelease: ", line, 11)) {
+ if (tmp)
+ *tmp = '\0';
+ strncpy(data->utsname.release, line+11, sizeof(data->utsname.release));
+ data->utsname.release[sizeof(data->utsname.release)-1] = '\0';
+ } else if (!strncmp("OSVersion: ", line, 11)) {
+ if (tmp)
+ *tmp = '\0';
+ strncpy(data->utsname.version, line+11, sizeof(data->utsname.version));
+ data->utsname.version[sizeof(data->utsname.version)-1] = '\0';
+ } else if (!strncmp("HostName: ", line, 10)) {
+ if (tmp)
+ *tmp = '\0';
+ strncpy(data->utsname.nodename, line+10, sizeof(data->utsname.nodename));
+ data->utsname.nodename[sizeof(data->utsname.nodename)-1] = '\0';
+ } else if (!strncmp("Architecture: ", line, 14)) {
+ if (tmp)
+ *tmp = '\0';
+ strncpy(data->utsname.machine, line+14, sizeof(data->utsname.machine));
+ data->utsname.machine[sizeof(data->utsname.machine)-1] = '\0';
+ } else {
+ hwloc_debug("ignored /proc/hwloc-nofile-info line %s\n", line);
+ /* ignored */
+ }
+ }
+ fclose(file);
+ }
+
+ env = getenv("HWLOC_DUMP_NOFILE_INFO");
+ if (env && *env) {
+ file = fopen(env, "w");
+ if (file) {
+ if (*data->utsname.sysname)
+ fprintf(file, "OSName: %s\n", data->utsname.sysname);
+ if (*data->utsname.release)
+ fprintf(file, "OSRelease: %s\n", data->utsname.release);
+ if (*data->utsname.version)
+ fprintf(file, "OSVersion: %s\n", data->utsname.version);
+ if (*data->utsname.nodename)
+ fprintf(file, "HostName: %s\n", data->utsname.nodename);
+ if (*data->utsname.machine)
+ fprintf(file, "Architecture: %s\n", data->utsname.machine);
+ fclose(file);
+ }
+ }
+}
+
static int
hwloc_look_linuxfs(struct hwloc_backend *backend)
{
@@ -3445,6 +3694,8 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
/* somebody discovered things */
return 0;
+ hwloc_gather_system_info(topology, data);
+
hwloc_alloc_obj_cpusets(topology->levels[0][0]);
/* Gather the list of admin-disabled cpus and mems */
@@ -3533,15 +3784,18 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
} else {
struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
- int numprocs = hwloc_linux_parse_cpuinfo(data, "/proc/cpuinfo", &Lprocs);
+ struct hwloc_obj_info_s *global_infos = NULL;
+ unsigned global_infos_count = 0;
+ int numprocs = hwloc_linux_parse_cpuinfo(data, "/proc/cpuinfo", &Lprocs, &global_infos, &global_infos_count);
if (numprocs <= 0)
Lprocs = NULL;
if (look_sysfscpu(topology, data, "/sys/bus/cpu/devices", Lprocs, numprocs) < 0)
if (look_sysfscpu(topology, data, "/sys/devices/system/cpu", Lprocs, numprocs) < 0)
/* sysfs but we failed to read cpu topology, fallback */
hwloc_linux_fallback_pu_level(topology);
- if (Lprocs)
- hwloc_linux_free_cpuinfo(Lprocs, numprocs);
+ hwloc__move_infos(&hwloc_get_root_obj(topology)->infos, &hwloc_get_root_obj(topology)->infos_count,
+ &global_infos, &global_infos_count);
+ hwloc_linux_free_cpuinfo(Lprocs, numprocs, global_infos, global_infos_count);
}
/* Gather DMI info */
@@ -3556,9 +3810,8 @@ hwloc_look_linuxfs(struct hwloc_backend *backend)
hwloc__linux_get_mic_sn(topology, data);
- /* gather uname info if fsroot wasn't changed */
- if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ /* data->utsname was filled with real uname or \0, we can safely pass it */
+ hwloc_add_uname_info(topology, &data->utsname);
return 1;
}
@@ -4435,7 +4688,7 @@ hwloc_look_linuxfs_pci(struct hwloc_backend *backend)
unsigned os_index;
char path[64];
char value[16];
- size_t dummy __hwloc_attribute_unused;
+ size_t read;
FILE *file;
if (sscanf(dirent->d_name, "%04x:%02x:%02x.%01x", &domain, &bus, &dev, &func) != 4)
@@ -4464,37 +4717,42 @@ hwloc_look_linuxfs_pci(struct hwloc_backend *backend)
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/vendor", dirent->d_name);
file = hwloc_fopen(path, "r", root_fd);
if (file) {
- dummy = fread(value, sizeof(value), 1, file);
+ read = fread(value, 1, sizeof(value), file);
fclose(file);
- attr->vendor_id = strtoul(value, NULL, 16);
+ if (read)
+ attr->vendor_id = strtoul(value, NULL, 16);
}
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/device", dirent->d_name);
file = hwloc_fopen(path, "r", root_fd);
if (file) {
- dummy = fread(value, sizeof(value), 1, file);
+ read = fread(value, 1, sizeof(value), file);
fclose(file);
- attr->device_id = strtoul(value, NULL, 16);
+ if (read)
+ attr->device_id = strtoul(value, NULL, 16);
}
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/class", dirent->d_name);
file = hwloc_fopen(path, "r", root_fd);
if (file) {
- dummy = fread(value, sizeof(value), 1, file);
+ read = fread(value, 1, sizeof(value), file);
fclose(file);
- attr->class_id = strtoul(value, NULL, 16) >> 8;
+ if (read)
+ attr->class_id = strtoul(value, NULL, 16) >> 8;
}
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/subsystem_vendor", dirent->d_name);
file = hwloc_fopen(path, "r", root_fd);
if (file) {
- dummy = fread(value, sizeof(value), 1, file);
+ read = fread(value, 1, sizeof(value), file);
fclose(file);
- attr->subvendor_id = strtoul(value, NULL, 16);
+ if (read)
+ attr->subvendor_id = strtoul(value, NULL, 16);
}
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/subsystem_device", dirent->d_name);
file = hwloc_fopen(path, "r", root_fd);
if (file) {
- dummy = fread(value, sizeof(value), 1, file);
+ read = fread(value, 1, sizeof(value), file);
fclose(file);
- attr->subdevice_id = strtoul(value, NULL, 16);
+ if (read)
+ attr->subdevice_id = strtoul(value, NULL, 16);
}
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%s/config", dirent->d_name);
@@ -4506,7 +4764,8 @@ hwloc_look_linuxfs_pci(struct hwloc_backend *backend)
/* initialize the config space in case we fail to read it (missing permissions, etc). */
memset(config_space_cache, 0xff, CONFIG_SPACE_CACHESIZE);
- dummy = fread(config_space_cache, 1, CONFIG_SPACE_CACHESIZE, file);
+ read = fread(config_space_cache, 1, CONFIG_SPACE_CACHESIZE, file);
+ (void) read; /* we initialized config_space_cache in case we don't read enough, ignore the read length */
fclose(file);
/* is this a bridge? */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-netbsd.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-netbsd.c
index c88ba87..2d1b3a6 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-netbsd.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-netbsd.c
@@ -147,7 +147,7 @@ hwloc_look_netbsd(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "NetBSD");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-noos.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-noos.c
index 8c74ded..e944afd 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-noos.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-noos.c
@@ -22,7 +22,7 @@ hwloc_look_noos(struct hwloc_backend *backend)
hwloc_alloc_obj_cpusets(topology->levels[0][0]);
hwloc_setup_pu_level(topology, hwloc_fallback_nbprocessors(topology));
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-opencl.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-opencl.c
index 1696797..3a8802f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-opencl.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-opencl.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2012 Inria. All rights reserved.
+ * Copyright © 2012-2014 Inria. All rights reserved.
* Copyright © 2013 Université Bordeaux 1. All right reserved.
* See COPYING in top-level directory.
*/
@@ -30,6 +30,9 @@ struct hwloc_opencl_backend_data_s {
char devicevendor[64];
char devicetype[64];
+ unsigned computeunits;
+ unsigned long long globalmemsize;
+
union hwloc_opencl_device_info_u {
struct hwloc_opencl_device_info_amd_s {
unsigned pcidomain, pcibus, pcidev, pcifunc;
@@ -99,6 +102,8 @@ hwloc_opencl_query_devices(struct hwloc_opencl_backend_data_s *data)
#ifdef CL_DEVICE_TOPOLOGY_AMD
cl_device_topology_amd amdtopo;
#endif
+ cl_ulong globalmemsize;
+ cl_uint computeunits;
hwloc_debug("Looking device %p\n", device_ids[i]);
@@ -133,6 +138,12 @@ hwloc_opencl_query_devices(struct hwloc_opencl_backend_data_s *data)
break;
}
+ clGetDeviceInfo(device_ids[i], CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(globalmemsize), &globalmemsize, NULL);
+ info->globalmemsize = globalmemsize / 1024;
+
+ clGetDeviceInfo(device_ids[i], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(computeunits), &computeunits, NULL);
+ info->computeunits = computeunits;
+
hwloc_debug("platform %s device %s vendor %s type %s\n", info->platformname, info->devicename, info->devicevendor, info->devicetype);
/* find our indexes */
@@ -251,6 +262,12 @@ hwloc_opencl_backend_notify_new_object(struct hwloc_backend *backend, struct hwl
snprintf(buffer, sizeof(buffer), "%u", info->platformdeviceidx);
hwloc_obj_add_info(osdev, "OpenCLPlatformDeviceIndex", buffer);
+ snprintf(buffer, sizeof(buffer), "%u", info->computeunits);
+ hwloc_obj_add_info(osdev, "OpenCLComputeUnits", buffer);
+
+ snprintf(buffer, sizeof(buffer), "%llu", info->globalmemsize);
+ hwloc_obj_add_info(osdev, "OpenCLGlobalMemorySize", buffer);
+
hwloc_insert_object_by_parent(topology, pcidev, osdev);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
index 52300fc..c7ed7b2 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
@@ -336,7 +336,7 @@ hwloc_look_osf(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "OSF");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c
index a185d86..eaf6da2 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-pci.c
@@ -249,21 +249,26 @@ hwloc_look_pci(struct hwloc_backend *backend)
char path[64];
char value[16];
FILE *file;
+ size_t read;
+
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/vendor",
domain, pcidev->bus, pcidev->dev, pcidev->func);
file = fopen(path, "r");
if (file) {
- fread(value, sizeof(value), 1, file);
+ read = fread(value, 1, sizeof(value), file);
fclose(file);
- obj->attr->pcidev.vendor_id = strtoul(value, NULL, 16);
+ if (read)
+ obj->attr->pcidev.vendor_id = strtoul(value, NULL, 16);
}
+
snprintf(path, sizeof(path), "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/device",
domain, pcidev->bus, pcidev->dev, pcidev->func);
file = fopen(path, "r");
if (file) {
- fread(value, sizeof(value), 1, file);
+ read = fread(value, 1, sizeof(value), file);
fclose(file);
- obj->attr->pcidev.device_id = strtoul(value, NULL, 16);
+ if (read)
+ obj->attr->pcidev.device_id = strtoul(value, NULL, 16);
}
#endif
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
index fec511d..6753a27 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
@@ -741,7 +741,7 @@ hwloc_look_solaris(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "Solaris");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
index 11c8c33..c374a3d 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2012 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -18,14 +18,21 @@
#include <strings.h>
#endif
+struct hwloc_synthetic_level_data_s {
+ unsigned arity;
+ hwloc_obj_type_t type;
+ unsigned depth; /* For caches/groups */
+ hwloc_obj_cache_type_t cachetype; /* For caches */
+
+ /* used while filling the topology */
+ unsigned next_os_index; /* id of the next object for that level */
+};
+
struct hwloc_synthetic_backend_data_s {
/* synthetic backend parameters */
char *string;
#define HWLOC_SYNTHETIC_MAX_DEPTH 128
- unsigned arity[HWLOC_SYNTHETIC_MAX_DEPTH];
- hwloc_obj_type_t type[HWLOC_SYNTHETIC_MAX_DEPTH];
- unsigned id[HWLOC_SYNTHETIC_MAX_DEPTH];
- unsigned depth[HWLOC_SYNTHETIC_MAX_DEPTH]; /* For cache/misc */
+ struct hwloc_synthetic_level_data_s level[HWLOC_SYNTHETIC_MAX_DEPTH];
};
/* Read from description a series of integers describing a symmetrical
@@ -50,6 +57,8 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
for (pos = description, count = 1; *pos; pos = next_pos) {
#define HWLOC_OBJ_TYPE_UNKNOWN ((hwloc_obj_type_t) -1)
hwloc_obj_type_t type = HWLOC_OBJ_TYPE_UNKNOWN;
+ int typedepth = -1;
+ hwloc_obj_cache_type_t cachetype = (hwloc_obj_cache_type_t) -1;
while (*pos == ' ')
pos++;
@@ -58,24 +67,12 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
break;
if (*pos < '0' || *pos > '9') {
- if (!hwloc_namecoloncmp(pos, "machines", 2)) {
- type = HWLOC_OBJ_MACHINE;
- } else if (!hwloc_namecoloncmp(pos, "nodes", 1))
- type = HWLOC_OBJ_NODE;
- else if (!hwloc_namecoloncmp(pos, "sockets", 1))
- type = HWLOC_OBJ_SOCKET;
- else if (!hwloc_namecoloncmp(pos, "cores", 2))
- type = HWLOC_OBJ_CORE;
- else if (!hwloc_namecoloncmp(pos, "caches", 2))
- type = HWLOC_OBJ_CACHE;
- else if (!hwloc_namecoloncmp(pos, "pus", 1))
- type = HWLOC_OBJ_PU;
- else if (!hwloc_namecoloncmp(pos, "misc", 2))
- type = HWLOC_OBJ_MISC;
- else if (!hwloc_namecoloncmp(pos, "group", 2))
- type = HWLOC_OBJ_GROUP;
- else if (verbose)
- fprintf(stderr, "Synthetic string with unknown object type `%s'\n", pos);
+ if (hwloc_obj_type_sscanf(pos, &type, &typedepth, &cachetype, sizeof(cachetype)) < 0) {
+ if (verbose)
+ fprintf(stderr, "Synthetic string with unknown object type at '%s'\n", pos);
+ errno = EINVAL;
+ return -1;
+ }
next_pos = strchr(pos, ':');
if (!next_pos) {
@@ -107,8 +104,10 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
return -1;
}
- data->arity[count-1] = (unsigned)item;
- data->type[count] = type;
+ data->level[count-1].arity = (unsigned)item;
+ data->level[count].type = type;
+ data->level[count].depth = (unsigned) typedepth;
+ data->level[count].cachetype = cachetype;
count++;
}
@@ -120,15 +119,16 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
}
for(i=count-1; i>0; i--) {
+ struct hwloc_synthetic_level_data_s *curlevel = &data->level[i];
hwloc_obj_type_t type;
- type = data->type[i];
+ type = curlevel->type;
if (type == HWLOC_OBJ_TYPE_UNKNOWN) {
if (i == count-1)
type = HWLOC_OBJ_PU;
else {
- switch (data->type[i+1]) {
+ switch (data->level[i+1].type) {
case HWLOC_OBJ_PU: type = HWLOC_OBJ_CORE; break;
case HWLOC_OBJ_CORE: type = HWLOC_OBJ_CACHE; break;
case HWLOC_OBJ_CACHE: type = HWLOC_OBJ_SOCKET; break;
@@ -141,16 +141,10 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
assert(0);
}
}
- data->type[i] = type;
+ curlevel->type = type;
}
switch (type) {
case HWLOC_OBJ_PU:
- if (nb_pu_levels) {
- if (verbose)
- fprintf(stderr, "Synthetic string can not have several PU levels\n");
- errno = EINVAL;
- return -1;
- }
nb_pu_levels++;
break;
case HWLOC_OBJ_CACHE:
@@ -176,7 +170,6 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
errno = EINVAL;
return -1;
}
-
if (nb_pu_levels > 1) {
if (verbose)
fprintf(stderr, "Synthetic string can not have several PU levels\n");
@@ -197,9 +190,9 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
}
if (nb_machine_levels)
- data->type[0] = HWLOC_OBJ_SYSTEM;
+ data->level[0].type = HWLOC_OBJ_SYSTEM;
else {
- data->type[0] = HWLOC_OBJ_MACHINE;
+ data->level[0].type = HWLOC_OBJ_MACHINE;
nb_machine_levels++;
}
@@ -208,16 +201,22 @@ hwloc_backend_synthetic_init(struct hwloc_synthetic_backend_data_s *data,
cache_depth = 2;
for (i=0; i<count; i++) {
- hwloc_obj_type_t type = data->type[i];
-
- if (type == HWLOC_OBJ_GROUP)
- data->depth[i] = group_depth--;
- else if (type == HWLOC_OBJ_CACHE)
- data->depth[i] = cache_depth--;
+ struct hwloc_synthetic_level_data_s *curlevel = &data->level[i];
+ hwloc_obj_type_t type = curlevel->type;
+
+ if (type == HWLOC_OBJ_GROUP) {
+ if (curlevel->depth == (unsigned)-1)
+ curlevel->depth = group_depth--;
+ } else if (type == HWLOC_OBJ_CACHE) {
+ if (curlevel->depth == (unsigned)-1)
+ curlevel->depth = cache_depth--;
+ if (curlevel->cachetype == (hwloc_obj_cache_type_t) -1)
+ curlevel->cachetype = curlevel->depth == 1 ? HWLOC_OBJ_CACHE_DATA : HWLOC_OBJ_CACHE_UNIFIED;
+ }
}
data->string = strdup(description);
- data->arity[count-1] = 0;
+ data->level[count-1].arity = 0;
return 0;
}
@@ -238,7 +237,8 @@ hwloc__look_synthetic(struct hwloc_topology *topology,
{
hwloc_obj_t obj;
unsigned i;
- hwloc_obj_type_t type = data->type[level];
+ struct hwloc_synthetic_level_data_s *curlevel = &data->level[level];
+ hwloc_obj_type_t type = curlevel->type;
/* pre-hooks */
switch (type) {
@@ -271,13 +271,13 @@ hwloc__look_synthetic(struct hwloc_topology *topology,
break;
}
- obj = hwloc_alloc_setup_object(type, data->id[level]++);
+ obj = hwloc_alloc_setup_object(type, curlevel->next_os_index++);
obj->cpuset = hwloc_bitmap_alloc();
- if (!data->arity[level]) {
+ if (!curlevel->arity) {
hwloc_bitmap_set(obj->cpuset, first_cpu++);
} else {
- for (i = 0; i < data->arity[level]; i++)
+ for (i = 0; i < curlevel->arity; i++)
first_cpu = hwloc__look_synthetic(topology, data, level + 1, first_cpu, obj->cpuset);
}
@@ -293,7 +293,7 @@ hwloc__look_synthetic(struct hwloc_topology *topology,
case HWLOC_OBJ_MISC:
break;
case HWLOC_OBJ_GROUP:
- obj->attr->group.depth = data->depth[level];
+ obj->attr->group.depth = curlevel->depth;
break;
case HWLOC_OBJ_SYSTEM:
case HWLOC_OBJ_BRIDGE:
@@ -315,16 +315,15 @@ hwloc__look_synthetic(struct hwloc_topology *topology,
case HWLOC_OBJ_SOCKET:
break;
case HWLOC_OBJ_CACHE:
- obj->attr->cache.depth = data->depth[level];
+ obj->attr->cache.depth = curlevel->depth;
obj->attr->cache.linesize = 64;
+ obj->attr->cache.type = curlevel->cachetype;
if (obj->attr->cache.depth == 1) {
/* 32Kb in L1d */
obj->attr->cache.size = 32*1024;
- obj->attr->cache.type = HWLOC_OBJ_CACHE_DATA;
} else {
/* *4 at each level, starting from 1MB for L2, unified */
obj->attr->cache.size = 256*1024 << (2*obj->attr->cache.depth);
- obj->attr->cache.type = HWLOC_OBJ_CACHE_UNIFIED;
}
break;
case HWLOC_OBJ_CORE:
@@ -356,16 +355,16 @@ hwloc_look_synthetic(struct hwloc_backend *backend)
topology->support.discovery->pu = 1;
- /* start with id=0 for each level */
- for (i = 0; data->arity[i] > 0; i++)
- data->id[i] = 0;
+ /* start with os_index 0 for each level */
+ for (i = 0; data->level[i].arity > 0; i++)
+ data->level[i].next_os_index = 0;
/* ... including the last one */
- data->id[i] = 0;
+ data->level[i].next_os_index = 0;
/* update first level type according to the synthetic type array */
- topology->levels[0][0]->type = data->type[0];
+ topology->levels[0][0]->type = data->level[0].type;
- for (i = 0; i < data->arity[0]; i++)
+ for (i = 0; i < data->level[0].arity; i++)
first_cpu = hwloc__look_synthetic(topology, data, 1, first_cpu, cpuset);
hwloc_bitmap_free(cpuset);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
index 8d811c7..bda7571 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
@@ -748,7 +748,7 @@ hwloc_look_windows(struct hwloc_backend *backend)
hwloc_obj_add_info(topology->levels[0][0], "Backend", "Windows");
if (topology->is_thissystem)
- hwloc_add_uname_info(topology);
+ hwloc_add_uname_info(topology, NULL);
return 1;
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
index 9fa0f88..611aea1 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2010-2013 Inria. All rights reserved.
+ * Copyright © 2010-2014 Inria. All rights reserved.
* Copyright © 2010-2013 Université Bordeaux 1
* Copyright © 2010-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -20,7 +20,7 @@
#include <private/debug.h>
#include <private/misc.h>
-#include <private/cpuid.h>
+#include <private/cpuid-x86.h>
#define has_topoext(features) ((features)[6] & (1 << 22))
@@ -52,7 +52,10 @@ struct procinfo {
unsigned levels;
unsigned numcaches;
struct cacheinfo *cache;
+ char cpuvendor[13];
char cpumodel[3*4*4+1];
+ unsigned cpumodelnumber;
+ unsigned cpufamilynumber;
};
enum cpuid_type {
@@ -111,11 +114,13 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
unsigned eax, ebx, ecx = 0, edx;
unsigned cachenum;
struct cacheinfo *cache;
+ unsigned regs[4];
+ unsigned _model, _extendedmodel, _family, _extendedfamily;
infos->present = 1;
eax = 0x01;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
infos->apicid = ebx >> 24;
if (edx & (1 << 28))
infos->max_log_proc = 1 << hwloc_flsl(((ebx >> 16) & 0xff) - 1);
@@ -126,16 +131,38 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
infos->logprocid = infos->apicid % infos->max_log_proc;
hwloc_debug("phys %u thread %u\n", infos->socketid, infos->logprocid);
+ memset(regs, 0, sizeof(regs));
+ regs[0] = 0;
+ hwloc_x86_cpuid(®s[0], ®s[1], ®s[3], ®s[2]);
+ memcpy(infos->cpuvendor, regs+1, 4*3);
+ infos->cpuvendor[12] = '\0';
+
+ memset(regs, 0, sizeof(regs));
+ regs[0] = 1;
+ hwloc_x86_cpuid(®s[0], ®s[1], ®s[2], ®s[3]);
+ _model = (regs[0]>>4) & 0xf;
+ _extendedmodel = (regs[0]>>16) & 0xf;
+ _family = (regs[0]>>8) & 0xf;
+ _extendedfamily = (regs[0]>>20) & 0xff;
+ if (!strncmp(infos->cpuvendor, "Genu", 4)
+ || (!strncmp(infos->cpuvendor, "Auth", 4) && _family == 0xf)) {
+ infos->cpufamilynumber = _family + _extendedfamily;
+ infos->cpumodelnumber = _model + (_extendedmodel << 4);
+ } else {
+ infos->cpufamilynumber = _family;
+ infos->cpumodelnumber = _model;
+ }
+
if (highest_ext_cpuid >= 0x80000004) {
- unsigned regs[4] = { 0 };
+ memset(regs, 0, sizeof(regs));
regs[0] = 0x80000002;
- hwloc_cpuid(®s[0], ®s[1], ®s[2], ®s[3]);
+ hwloc_x86_cpuid(®s[0], ®s[1], ®s[2], ®s[3]);
memcpy(infos->cpumodel, regs, 4*4);
regs[0] = 0x80000003;
- hwloc_cpuid(®s[0], ®s[1], ®s[2], ®s[3]);
+ hwloc_x86_cpuid(®s[0], ®s[1], ®s[2], ®s[3]);
memcpy(infos->cpumodel + 4*4, regs, 4*4);
regs[0] = 0x80000004;
- hwloc_cpuid(®s[0], ®s[1], ®s[2], ®s[3]);
+ hwloc_x86_cpuid(®s[0], ®s[1], ®s[2], ®s[3]);
memcpy(infos->cpumodel + 4*4*2, regs, 4*4);
infos->cpumodel[3*4*4] = 0;
} else
@@ -145,7 +172,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
if (cpuid_type != intel && highest_ext_cpuid >= 0x80000008) {
unsigned coreidsize;
eax = 0x80000008;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
coreidsize = (ecx >> 12) & 0xf;
hwloc_debug("core ID size: %u\n", coreidsize);
if (!coreidsize) {
@@ -169,7 +196,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
unsigned apic_id, node_id, nodes_per_proc, unit_id, cores_per_unit;
eax = 0x8000001e;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
infos->apicid = apic_id = eax;
infos->nodeid = node_id = ecx & 0xff;
nodes_per_proc = ((ecx >> 8) & 7) + 1;
@@ -184,7 +211,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
unsigned type;
eax = 0x8000001d;
ecx = cachenum;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
type = eax & 0x1f;
if (type == 0)
break;
@@ -198,7 +225,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
unsigned type;
eax = 0x8000001d;
ecx = cachenum;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
type = eax & 0x1f;
@@ -230,14 +257,14 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
/* Intel doesn't actually provide 0x80000005 information */
if (cpuid_type != intel && highest_ext_cpuid >= 0x80000005) {
eax = 0x80000005;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
fill_amd_cache(infos, 1, ecx);
}
/* Intel doesn't actually provide 0x80000006 information */
if (cpuid_type != intel && highest_ext_cpuid >= 0x80000006) {
eax = 0x80000006;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
fill_amd_cache(infos, 2, ecx);
fill_amd_cache(infos, 3, edx);
}
@@ -249,7 +276,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
unsigned type;
eax = 0x04;
ecx = cachenum;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
type = eax & 0x1f;
@@ -267,7 +294,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
unsigned type;
eax = 0x04;
ecx = cachenum;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
type = eax & 0x1f;
@@ -306,7 +333,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
for (level = 0; ; level++) {
ecx = level;
eax = 0x0b;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
if (!eax && !ebx)
break;
}
@@ -316,7 +343,7 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
for (level = 0; ; level++) {
ecx = level;
eax = 0x0b;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
if (!eax && !ebx)
break;
apic_nextshift = eax & 0x1f;
@@ -349,6 +376,23 @@ static void look_proc(struct procinfo *infos, unsigned highest_cpuid, unsigned h
infos->otherids = NULL;
}
+static void
+hwloc_x86_add_cpuinfos(hwloc_obj_t obj, struct procinfo *info, int nodup)
+{
+ char number[8];
+ hwloc_obj_add_info_nodup(obj, "CPUVendor", info->cpuvendor, nodup);
+ if (info->cpumodel[0]) {
+ const char *c = info->cpumodel;
+ while (*c == ' ')
+ c++;
+ hwloc_obj_add_info_nodup(obj, "CPUModel", c, nodup);
+ }
+ snprintf(number, sizeof(number), "%u", info->cpumodelnumber);
+ hwloc_obj_add_info_nodup(obj, "CPUModelNumber", number, nodup);
+ snprintf(number, sizeof(number), "%u", info->cpufamilynumber);
+ hwloc_obj_add_info_nodup(obj, "CPUFamilyNumber", number, nodup);
+}
+
/* Analyse information stored in infos, and build/annotate topology levels accordingly */
static void summarize(hwloc_topology_t topology, struct procinfo *infos, unsigned nbprocs,
int fulldiscovery)
@@ -392,12 +436,9 @@ static void summarize(hwloc_topology_t topology, struct procinfo *infos, unsigne
}
socket = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, socketid);
socket->cpuset = socket_cpuset;
- if (infos[i].cpumodel[0]) {
- const char *c = infos[i].cpumodel;
- while (*c == ' ')
- c++;
- hwloc_obj_add_info(socket, "CPUModel", c);
- }
+
+ hwloc_x86_add_cpuinfos(socket, &infos[i], 0);
+
hwloc_debug_1arg_bitmap("os socket %u has cpuset %s\n",
socketid, socket_cpuset);
hwloc_insert_object_by_cpuset(topology, socket);
@@ -430,34 +471,23 @@ static void summarize(hwloc_topology_t topology, struct procinfo *infos, unsigne
}
}
}
- if (!hwloc_obj_get_info_by_name(socket, "CPUModel")) {
- /* add a CPUModel info */
- for(i=0; i<nbprocs; i++)
- /* if there's a single socket, it's the one we want.
- * if the index is ok, it's the one we want.
- * if the index is unknown but all sockets have the same id, that's fine
- */
- if (nbsockets == 1 || infos[i].socketid == socket->os_index || (same && socket->os_index == (unsigned) -1)) {
- if (infos[i].cpumodel[0]) {
- const char *c = infos[i].cpumodel;
- while (*c == ' ')
- c++;
- hwloc_obj_add_info(socket, "CPUModel", c);
- }
- break;
- }
+ for(i=0; i<nbprocs; i++) {
+ /* if there's a single socket, it's the one we want.
+ * if the index is ok, it's the one we want.
+ * if the index is unknown but all sockets have the same id, that's fine
+ */
+ if (nbsockets == 1 || infos[i].socketid == socket->os_index || (same && socket->os_index == (unsigned) -1)) {
+ hwloc_x86_add_cpuinfos(socket, &infos[i], 1);
+ break;
+ }
}
}
}
/* If there was no socket, annotate the Machine instead */
if ((!nbsockets) && infos[0].cpumodel[0]) {
- const char *c = infos[0].cpumodel;
- while (*c == ' ')
- c++;
- hwloc_obj_add_info(hwloc_get_root_obj(topology), "CPUModel", c);
+ hwloc_x86_add_cpuinfos(hwloc_get_root_obj(topology), &infos[0], 1);
}
-
/* Look for Numa nodes inside sockets */
if (fulldiscovery) {
hwloc_bitmap_t nodes_cpuset = hwloc_bitmap_dup(complete_cpuset);
@@ -684,6 +714,41 @@ static void summarize(hwloc_topology_t topology, struct procinfo *infos, unsigne
hwloc_bitmap_free(complete_cpuset);
}
+static int
+look_procs(struct hwloc_topology *topology, unsigned nbprocs, struct procinfo *infos, int fulldiscovery,
+ unsigned highest_cpuid, unsigned highest_ext_cpuid, unsigned *features, enum cpuid_type cpuid_type,
+ int (*get_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int flags),
+ int (*set_cpubind)(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags))
+{
+ hwloc_bitmap_t orig_cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_t set;
+ unsigned i;
+
+ if (get_cpubind(topology, orig_cpuset, HWLOC_CPUBIND_STRICT)) {
+ hwloc_bitmap_free(orig_cpuset);
+ return -1;
+ }
+
+ set = hwloc_bitmap_alloc();
+
+ for (i = 0; i < nbprocs; i++) {
+ hwloc_bitmap_only(set, i);
+ hwloc_debug("binding to CPU%d\n", i);
+ if (set_cpubind(topology, set, HWLOC_CPUBIND_STRICT)) {
+ hwloc_debug("could not bind to CPU%d: %s\n", i, strerror(errno));
+ continue;
+ }
+ look_proc(&infos[i], highest_cpuid, highest_ext_cpuid, features, cpuid_type);
+ }
+
+ set_cpubind(topology, orig_cpuset, 0);
+ hwloc_bitmap_free(set);
+ hwloc_bitmap_free(orig_cpuset);
+
+ summarize(topology, infos, nbprocs, fulldiscovery);
+ return fulldiscovery; /* success, but objects added only if fulldiscovery */
+}
+
#if defined HWLOC_FREEBSD_SYS && defined HAVE_CPUSET_SETID
#include <sys/param.h>
#include <sys/cpuset.h>
@@ -714,11 +779,24 @@ static void hwloc_x86_os_state_restore(hwloc_x86_os_state_t *state __hwloc_attri
#define AMD_EDX ('e' | ('n'<<8) | ('t'<<16) | ('i'<<24))
#define AMD_ECX ('c' | ('A'<<8) | ('M'<<16) | ('D'<<24))
+/* fake cpubind for when nbprocs=1 and no binding support */
+static int fake_get_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
+ hwloc_cpuset_t set __hwloc_attribute_unused,
+ int flags __hwloc_attribute_unused)
+{
+ return 0;
+}
+static int fake_set_cpubind(hwloc_topology_t topology __hwloc_attribute_unused,
+ hwloc_const_cpuset_t set __hwloc_attribute_unused,
+ int flags __hwloc_attribute_unused)
+{
+ return 0;
+}
+
static
int hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs, int fulldiscovery)
{
unsigned eax, ebx, ecx = 0, edx;
- hwloc_bitmap_t orig_cpuset;
unsigned i;
unsigned highest_cpuid;
unsigned highest_ext_cpuid;
@@ -730,17 +808,29 @@ int hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs, int fulldi
struct hwloc_binding_hooks hooks;
struct hwloc_topology_support support;
struct hwloc_topology_membind_support memsupport __hwloc_attribute_unused;
+ int (*get_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
+ int (*set_cpubind)(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags);
int ret = -1;
+ /* check if binding works */
memset(&hooks, 0, sizeof(hooks));
support.membind = &memsupport;
hwloc_set_native_binding_hooks(&hooks, &support);
- if (nbprocs > 1 &&
- !(hooks.get_thisproc_cpubind && hooks.set_thisproc_cpubind)
- && !(hooks.get_thisthread_cpubind && hooks.set_thisthread_cpubind))
- goto out;
+ if (hooks.get_thisproc_cpubind && hooks.set_thisproc_cpubind) {
+ get_cpubind = hooks.get_thisproc_cpubind;
+ set_cpubind = hooks.set_thisproc_cpubind;
+ } else if (hooks.get_thisthread_cpubind && hooks.set_thisthread_cpubind) {
+ get_cpubind = hooks.get_thisthread_cpubind;
+ set_cpubind = hooks.set_thisthread_cpubind;
+ } else {
+ /* we need binding support if there are multiple PUs */
+ if (nbprocs > 1)
+ goto out;
+ get_cpubind = fake_get_cpubind;
+ set_cpubind = fake_set_cpubind;
+ }
- if (!hwloc_have_cpuid())
+ if (!hwloc_have_x86_cpuid())
goto out;
infos = calloc(nbprocs, sizeof(struct procinfo));
@@ -755,7 +845,7 @@ int hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs, int fulldi
}
eax = 0x00;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
highest_cpuid = eax;
if (ebx == INTEL_EBX && ecx == INTEL_ECX && edx == INTEL_EDX)
cpuid_type = intel;
@@ -768,83 +858,45 @@ int hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs, int fulldi
}
eax = 0x01;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
features[0] = edx;
features[4] = ecx;
eax = 0x80000000;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
highest_ext_cpuid = eax;
hwloc_debug("highest extended cpuid %x\n", highest_ext_cpuid);
if (highest_cpuid >= 0x7) {
eax = 0x7;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
features[9] = ebx;
}
if (cpuid_type != intel && highest_ext_cpuid >= 0x80000001) {
eax = 0x80000001;
- hwloc_cpuid(&eax, &ebx, &ecx, &edx);
+ hwloc_x86_cpuid(&eax, &ebx, &ecx, &edx);
features[1] = edx;
features[6] = ecx;
}
hwloc_x86_os_state_save(&os_state);
- orig_cpuset = hwloc_bitmap_alloc();
-
- if (hooks.get_thisthread_cpubind && hooks.set_thisthread_cpubind) {
- if (!hooks.get_thisthread_cpubind(topology, orig_cpuset, HWLOC_CPUBIND_STRICT)) {
- hwloc_bitmap_t set = hwloc_bitmap_alloc();
- for (i = 0; i < nbprocs; i++) {
- hwloc_bitmap_only(set, i);
- hwloc_debug("binding to CPU%d\n", i);
- if (hooks.set_thisthread_cpubind(topology, set, HWLOC_CPUBIND_STRICT)) {
- hwloc_debug("could not bind to CPU%d: %s\n", i, strerror(errno));
- continue;
- }
- look_proc(&infos[i], highest_cpuid, highest_ext_cpuid, features, cpuid_type);
- }
- hwloc_bitmap_free(set);
- hooks.set_thisthread_cpubind(topology, orig_cpuset, 0);
- hwloc_bitmap_free(orig_cpuset);
- summarize(topology, infos, nbprocs, fulldiscovery);
- ret = fulldiscovery; /* success, but objects added only if fulldiscovery */
- goto out_with_os_state;
- }
- }
-
- if (hooks.get_thisproc_cpubind && hooks.set_thisproc_cpubind) {
- if (!hooks.get_thisproc_cpubind(topology, orig_cpuset, HWLOC_CPUBIND_STRICT)) {
- hwloc_bitmap_t set = hwloc_bitmap_alloc();
- for (i = 0; i < nbprocs; i++) {
- hwloc_bitmap_only(set, i);
- hwloc_debug("binding to CPU%d\n", i);
- if (hooks.set_thisproc_cpubind(topology, set, HWLOC_CPUBIND_STRICT)) {
- hwloc_debug("could not bind to CPU%d: %s\n", i, strerror(errno));
- continue;
- }
- look_proc(&infos[i], highest_cpuid, highest_ext_cpuid, features, cpuid_type);
- }
- hwloc_bitmap_free(set);
- hooks.set_thisproc_cpubind(topology, orig_cpuset, 0);
- hwloc_bitmap_free(orig_cpuset);
- summarize(topology, infos, nbprocs, fulldiscovery);
- ret = fulldiscovery; /* success, but objects added only if fulldiscovery */
- goto out_with_os_state;
- }
- }
+ ret = look_procs(topology, nbprocs, infos, fulldiscovery,
+ highest_cpuid, highest_ext_cpuid, features, cpuid_type,
+ get_cpubind, set_cpubind);
+ if (ret >= 0)
+ /* success, we're done */
+ goto out_with_os_state;
if (nbprocs == 1) {
+ /* only one processor, no need to bind */
look_proc(&infos[0], highest_cpuid, highest_ext_cpuid, features, cpuid_type);
summarize(topology, infos, nbprocs, fulldiscovery);
ret = fulldiscovery;
}
- hwloc_bitmap_free(orig_cpuset);
-
out_with_os_state:
hwloc_x86_os_state_restore(&os_state);
@@ -896,6 +948,17 @@ fulldiscovery:
hwloc_setup_pu_level(topology, nbprocs);
hwloc_obj_add_info(topology->levels[0][0], "Backend", "x86");
+
+#ifdef HAVE_UNAME
+ hwloc_add_uname_info(topology, NULL); /* we already know is_thissystem() is true */
+#else
+ /* uname isn't available, manually setup the "Architecture" info */
+#ifdef HWLOC_X86_64_ARCH
+ hwloc_obj_add_info(topology->levels[0][0], "Architecture", "x86_64");
+#else
+ hwloc_obj_add_info(topology->levels[0][0], "Architecture", "x86");
+#endif
+#endif
return 1;
}
@@ -906,6 +969,7 @@ hwloc_x86_component_instantiate(struct hwloc_disc_component *component,
const void *_data3 __hwloc_attribute_unused)
{
struct hwloc_backend *backend;
+
backend = hwloc_backend_alloc(component);
if (!backend)
return NULL;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c
index 99396dc..88348c9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-libxml.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -230,7 +230,7 @@ hwloc_libxml_import_diff(const char *xmlpath, const char *xmlbuffer, int xmlbufl
if (!errno)
/* libxml2 read the file fine, but it got an error during parsing */
errno = EINVAL;
- return -1;
+ goto out;
}
dtd = xmlGetIntSubset(doc);
@@ -249,7 +249,7 @@ hwloc_libxml_import_diff(const char *xmlpath, const char *xmlbuffer, int xmlbufl
/* root node should be in "topologydiff" class */
if (hwloc__xml_verbose())
fprintf(stderr, "ignoring object of class `%s' not at the top the xml hierarchy\n", (const char *) root_node->name);
- goto failed;
+ goto out_with_doc;
}
state.next_attr = hwloc__libxml_import_next_attr;
@@ -271,7 +271,7 @@ hwloc_libxml_import_diff(const char *xmlpath, const char *xmlbuffer, int xmlbufl
free(refname);
refname = strdup(attrvalue);
} else
- return -1;
+ goto out_with_doc;
}
ret = hwloc__xml_import_diff(&state, firstdiffp);
@@ -280,9 +280,12 @@ hwloc_libxml_import_diff(const char *xmlpath, const char *xmlbuffer, int xmlbufl
else
free(refname);
+ xmlFreeDoc(doc);
return ret;
- failed:
+out_with_doc:
+ xmlFreeDoc(doc);
+out:
return -1; /* failed */
}
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c
index 874f857..6dc09ec 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml-nolibxml.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -17,7 +17,9 @@
#include <assert.h>
#include <sys/types.h>
#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
/*******************
* Import routines *
@@ -467,7 +469,7 @@ hwloc_nolibxml_import_diff(const char *xmlpath, const char *xmlbuffer, int xmlbu
free(refname);
refname = strdup(attrvalue);
} else
- return -1;
+ goto out_with_buffer;
}
ret = hwloc__xml_import_diff(&childstate, firstdiffp);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
index 40832a5..cf1d3a1 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -559,8 +559,7 @@ hwloc__xml_import_object(hwloc_topology_t topology,
if (state->next_attr(state, &attrname, &attrvalue) < 0)
break;
if (!strcmp(attrname, "type")) {
- obj->type = hwloc_obj_type_of_string(attrvalue);
- if (obj->type == (hwloc_obj_type_t)-1)
+ if (hwloc_obj_type_sscanf(attrvalue, &obj->type, NULL, NULL, 0) < 0)
return -1;
} else {
/* type needed first */
@@ -1406,7 +1405,7 @@ hwloc_export_obj_userdata_base64(void *reserved,
hwloc__xml_export_state_t state = reserved;
size_t encoded_length;
char *encoded_buffer;
- int ret __hwloc_attribute_unused;
+ int ret;
if (name && hwloc__xml_export_check_buffer(name, strlen(name)) < 0) {
errno = EINVAL;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
index 13fa361..d5d1c84 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -79,7 +79,7 @@ void hwloc_report_os_error(const char *msg, int line)
fprintf(stderr, "*\n");
fprintf(stderr, "* Please report this error message to the hwloc user's mailing list,\n");
#ifdef HWLOC_LINUX_SYS
- fprintf(stderr, "* along with the output from the hwloc-gather-topology.sh script.\n");
+ fprintf(stderr, "* along with the output from the hwloc-gather-topology script.\n");
#else
fprintf(stderr, "* along with any relevant topology information from your platform.\n");
#endif
@@ -259,32 +259,87 @@ print_objects(struct hwloc_topology *topology __hwloc_attribute_unused, int inde
#endif
}
-void hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value)
+void hwloc__free_infos(struct hwloc_obj_info_s *infos, unsigned count)
+{
+ unsigned i;
+ for(i=0; i<count; i++) {
+ free(infos[i].name);
+ free(infos[i].value);
+ }
+ free(infos);
+}
+
+void hwloc__add_info(struct hwloc_obj_info_s **infosp, unsigned *countp, const char *name, const char *value)
{
+ unsigned count = *countp;
+ struct hwloc_obj_info_s *infos = *infosp;
#define OBJECT_INFO_ALLOC 8
/* nothing allocated initially, (re-)allocate by multiple of 8 */
- unsigned alloccount = (obj->infos_count + 1 + (OBJECT_INFO_ALLOC-1)) & ~(OBJECT_INFO_ALLOC-1);
- if (obj->infos_count != alloccount)
- obj->infos = realloc(obj->infos, alloccount*sizeof(*obj->infos));
- obj->infos[obj->infos_count].name = strdup(name);
- obj->infos[obj->infos_count].value = strdup(value);
- obj->infos_count++;
+ unsigned alloccount = (count + 1 + (OBJECT_INFO_ALLOC-1)) & ~(OBJECT_INFO_ALLOC-1);
+ if (count != alloccount)
+ infos = realloc(infos, alloccount*sizeof(*infos));
+ infos[count].name = strdup(name);
+ infos[count].value = value ? strdup(value) : NULL;
+ *infosp = infos;
+ *countp = count+1;
+}
+
+char ** hwloc__find_info_slot(struct hwloc_obj_info_s **infosp, unsigned *countp, const char *name)
+{
+ unsigned i;
+ for(i=0; i<*countp; i++) {
+ if (!strcmp((*infosp)[i].name, name))
+ return &(*infosp)[i].value;
+ }
+ hwloc__add_info(infosp, countp, name, NULL);
+ return &(*infosp)[*countp-1].value;
+}
+
+void hwloc__move_infos(struct hwloc_obj_info_s **dst_infosp, unsigned *dst_countp,
+ struct hwloc_obj_info_s **src_infosp, unsigned *src_countp)
+{
+ unsigned dst_count = *dst_countp;
+ struct hwloc_obj_info_s *dst_infos = *dst_infosp;
+ unsigned src_count = *src_countp;
+ struct hwloc_obj_info_s *src_infos = *src_infosp;
+ unsigned i;
+#define OBJECT_INFO_ALLOC 8
+ /* nothing allocated initially, (re-)allocate by multiple of 8 */
+ unsigned alloccount = (dst_count + src_count + (OBJECT_INFO_ALLOC-1)) & ~(OBJECT_INFO_ALLOC-1);
+ if (dst_count != alloccount)
+ dst_infos = realloc(dst_infos, alloccount*sizeof(*dst_infos));
+ for(i=0; i<src_count; i++, dst_count++) {
+ dst_infos[dst_count].name = src_infos[i].name;
+ dst_infos[dst_count].value = src_infos[i].value;
+ }
+ *dst_infosp = dst_infos;
+ *dst_countp = dst_count;
+ free(src_infos);
+ *src_infosp = NULL;
+ *src_countp = 0;
+}
+
+void hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value)
+{
+ hwloc__add_info(&obj->infos, &obj->infos_count, name, value);
+}
+
+void hwloc_obj_add_info_nodup(hwloc_obj_t obj, const char *name, const char *value, int nodup)
+{
+ if (nodup && hwloc_obj_get_info_by_name(obj, name))
+ return;
+ hwloc__add_info(&obj->infos, &obj->infos_count, name, value);
}
/* Free an object and all its content. */
void
hwloc_free_unlinked_object(hwloc_obj_t obj)
{
- unsigned i;
switch (obj->type) {
default:
break;
}
- for(i=0; i<obj->infos_count; i++) {
- free(obj->infos[i].name);
- free(obj->infos[i].value);
- }
- free(obj->infos);
+ hwloc__free_infos(obj->infos, obj->infos_count);
hwloc_clear_object_distances(obj);
free(obj->memory.page_types);
free(obj->attr);
@@ -334,7 +389,7 @@ hwloc__duplicate_object(struct hwloc_obj *newobj,
/* don't duplicate distances, they'll be recreated at the end of the topology build */
for(i=0; i<src->infos_count; i++)
- hwloc_obj_add_info(newobj, src->infos[i].name, src->infos[i].value);
+ hwloc__add_info(&newobj->infos, &newobj->infos_count, src->infos[i].name, src->infos[i].value);
}
void
@@ -697,28 +752,35 @@ hwloc_obj_cmp(hwloc_obj_t obj1, hwloc_obj_t obj2)
}
}
-/* format must contain a single %s where to print obj infos */
+/* Compare object cpusets based on complete_cpuset if defined (always correctly ordered),
+ * or fallback to the main cpusets (only correctly ordered during early insert before disallowed/offline bits are cleared).
+ *
+ * This is the sane way to compare object among a horizontal level.
+ */
+static int
+hwloc__object_cpusets_compare_first(hwloc_obj_t obj1, hwloc_obj_t obj2)
+{
+ if (obj1->complete_cpuset && obj2->complete_cpuset)
+ return hwloc_bitmap_compare_first(obj1->complete_cpuset, obj2->complete_cpuset);
+ else
+ return hwloc_bitmap_compare_first(obj1->cpuset, obj2->cpuset);
+}
+
+/* format the obj info to print in error messages */
static void
-hwloc___insert_object_by_cpuset_report_error(hwloc_report_error_t report_error, const char *fmt, hwloc_obj_t obj, int line)
+hwloc__report_error_format_obj(char *buf, size_t buflen, hwloc_obj_t obj)
{
char typestr[64];
- char objstr[512];
- char msg[640];
char *cpusetstr;
-
hwloc_obj_type_snprintf(typestr, sizeof(typestr), obj, 0);
hwloc_bitmap_asprintf(&cpusetstr, obj->cpuset);
if (obj->os_index != (unsigned) -1)
- snprintf(objstr, sizeof(objstr), "%s P#%u cpuset %s",
+ snprintf(buf, buflen, "%s (P#%u cpuset %s)",
typestr, obj->os_index, cpusetstr);
else
- snprintf(objstr, sizeof(objstr), "%s cpuset %s",
+ snprintf(buf, buflen, "%s (cpuset %s)",
typestr, cpusetstr);
free(cpusetstr);
-
- snprintf(msg, sizeof(msg), fmt,
- objstr);
- report_error(msg, line);
}
/*
@@ -768,12 +830,22 @@ hwloc___insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t cur
case HWLOC_OBJ_EQUAL:
merge_index(obj, child, os_level, signed);
if (obj->os_level != child->os_level) {
- fprintf(stderr, "Different OS level\n");
+ static int reported = 0;
+ if (!reported && !hwloc_hide_errors()) {
+ fprintf(stderr, "Cannot merge similar %s objects with different OS levels %u and %u\n",
+ hwloc_obj_type_string(obj->type), child->os_level, obj->os_level);
+ reported = 1;
+ }
return NULL;
}
merge_index(obj, child, os_index, unsigned);
if (obj->os_index != child->os_index) {
- fprintf(stderr, "Different OS indexes\n");
+ static int reported = 0;
+ if (!reported && !hwloc_hide_errors()) {
+ fprintf(stderr, "Cannot merge similar %s objects with different OS indexes %u and %u\n",
+ hwloc_obj_type_string(obj->type), child->os_index, obj->os_index);
+ reported = 1;
+ }
return NULL;
}
if (obj->distances_count) {
@@ -840,8 +912,17 @@ hwloc___insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t cur
return child;
case HWLOC_OBJ_INCLUDED:
if (container) {
- if (report_error)
- hwloc___insert_object_by_cpuset_report_error(report_error, "object (%s) included in several different objects!", obj, __LINE__);
+ if (report_error) {
+ char containerstr[512];
+ char childstr[512];
+ char objstr[512];
+ char msg[2048];
+ hwloc__report_error_format_obj(containerstr, sizeof(containerstr), container);
+ hwloc__report_error_format_obj(childstr, sizeof(childstr), child);
+ hwloc__report_error_format_obj(objstr, sizeof(objstr), obj);
+ snprintf(msg, sizeof(msg), "%s included in both %s and %s!", objstr, containerstr, childstr);
+ report_error(msg, __LINE__);
+ }
/* We can't handle that. */
return NULL;
}
@@ -849,8 +930,15 @@ hwloc___insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t cur
container = child;
break;
case HWLOC_OBJ_INTERSECTS:
- if (report_error)
- hwloc___insert_object_by_cpuset_report_error(report_error, "object (%s) intersection without inclusion!", obj, __LINE__);
+ if (report_error) {
+ char childstr[512];
+ char objstr[512];
+ char msg[1024];
+ hwloc__report_error_format_obj(objstr, sizeof(objstr), obj);
+ hwloc__report_error_format_obj(childstr, sizeof(childstr), child);
+ snprintf(msg, sizeof(msg), "%s intersects with %s without inclusion!", objstr, childstr);
+ report_error(msg, __LINE__);
+ }
/* We can't handle that. */
return NULL;
case HWLOC_OBJ_CONTAINS:
@@ -891,7 +979,7 @@ hwloc___insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t cur
case HWLOC_OBJ_DIFFERENT:
/* Leave CHILD in CUR. */
- if (!put && (!child->cpuset || hwloc_bitmap_compare_first(obj->cpuset, child->cpuset) < 0)) {
+ if (!put && (!child->cpuset || hwloc__object_cpusets_compare_first(obj, child) < 0)) {
/* Sort children by cpuset: put OBJ before CHILD in CUR's children. */
*cur_children = obj;
cur_children = &obj->next_sibling;
@@ -964,24 +1052,22 @@ hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t paren
/* Append to the end of the list */
for (current = &parent->first_child; *current; current = &(*current)->next_sibling) {
hwloc_bitmap_t curcpuset = (*current)->cpuset;
- if (obj->cpuset && (!curcpuset || hwloc_bitmap_compare_first(obj->cpuset, curcpuset) < 0)) {
+ if (obj->cpuset && (!curcpuset || hwloc__object_cpusets_compare_first(obj, *current) < 0)) {
static int reported = 0;
if (!reported && !hwloc_hide_errors()) {
- char *a, *b;
+ char *a = "NULL", *b;
+ if (curcpuset)
+ hwloc_bitmap_asprintf(&a, curcpuset);
hwloc_bitmap_asprintf(&b, obj->cpuset);
fprintf(stderr, "****************************************************************************\n");
fprintf(stderr, "* hwloc has encountered an out-of-order topology discovery.\n");
- if (curcpuset) {
- hwloc_bitmap_asprintf(&a, curcpuset);
- fprintf(stderr, "* An object with cpuset %s was inserted after object with %s\n", b, a);
- free(a);
- } else {
- fprintf(stderr, "* An object with cpuset %s was inserted after object with NULL\n", b);
- }
+ fprintf(stderr, "* An object with (complete) cpuset %s was inserted after object with %s\n", b, a);
fprintf(stderr, "* Please check that your input topology (XML file, etc.) is valid.\n");
fprintf(stderr, "****************************************************************************\n");
+ if (curcpuset)
+ free(a);
free(b);
- reported = 1;
+ reported = 1;
}
}
}
@@ -1583,7 +1669,7 @@ remove_ignored(hwloc_topology_t topology, hwloc_obj_t *pparent)
prev = &parent->first_child;
while (*prev
&& (!child->cpuset || !(*prev)->cpuset
- || hwloc_bitmap_compare_first(child->cpuset, (*prev)->cpuset) > 0))
+ || hwloc__object_cpusets_compare_first(child, *prev) > 0))
prev = &((*prev)->next_sibling);
/* enqueue */
child->next_sibling = *prev;
@@ -2913,7 +2999,6 @@ hwloc_topology_get_depth(struct hwloc_topology *topology)
static void
hwloc__check_children(struct hwloc_obj *parent)
{
- hwloc_bitmap_t remaining_parent_set;
unsigned j;
if (!parent->arity) {
@@ -2938,30 +3023,39 @@ hwloc__check_children(struct hwloc_obj *parent)
assert(parent->last_child == parent->children[parent->arity-1]);
assert(parent->last_child->next_sibling == NULL);
+ /* check that parent->cpuset == exclusive OR of children
+ * (can be wrong for complete_cpuset since disallowed/offline/unknown PUs can be removed)
+ */
if (parent->cpuset) {
- remaining_parent_set = hwloc_bitmap_dup(parent->cpuset);
+ hwloc_bitmap_t remaining_parent_set = hwloc_bitmap_dup(parent->cpuset);
for(j=0; j<parent->arity; j++) {
if (!parent->children[j]->cpuset)
continue;
- /* check that child cpuset is included in the parent */
+ /* check that child cpuset is included in the reminder of the parent */
assert(hwloc_bitmap_isincluded(parent->children[j]->cpuset, remaining_parent_set));
-#if !defined(NDEBUG)
- /* check that children are correctly ordered (see below), empty ones may be anywhere */
- if (!hwloc_bitmap_iszero(parent->children[j]->cpuset)) {
- int firstchild = hwloc_bitmap_first(parent->children[j]->cpuset);
- int firstparent = hwloc_bitmap_first(remaining_parent_set);
- assert(firstchild == firstparent);
- }
-#endif
- /* clear previously used parent cpuset bits so that we actually checked above
- * that children cpusets do not intersect and are ordered properly
- */
hwloc_bitmap_andnot(remaining_parent_set, remaining_parent_set, parent->children[j]->cpuset);
}
assert(hwloc_bitmap_iszero(remaining_parent_set));
hwloc_bitmap_free(remaining_parent_set);
}
+ /* check that children complete_cpuset are properly ordered, empty ones may be anywhere
+ * (can be wrong for main cpuset since removed PUs can break the ordering).
+ */
+ if (parent->complete_cpuset) {
+ int firstchild;
+ int prev_firstchild = -1; /* -1 works fine with first comparisons below */
+ for(j=0; j<parent->arity; j++) {
+ if (!parent->children[j]->complete_cpuset
+ || hwloc_bitmap_iszero(parent->children[j]->complete_cpuset))
+ continue;
+
+ firstchild = hwloc_bitmap_first(parent->children[j]->complete_cpuset);
+ assert(prev_firstchild < firstchild);
+ prev_firstchild = firstchild;
+ }
+ }
+
/* checks for all children */
for(j=1; j<parent->arity; j++) {
assert(parent->children[j]->parent == parent);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c b/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
index 40f1263..91b0c22 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2012 inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -213,6 +213,74 @@ hwloc_obj_type_of_string (const char * string)
return (hwloc_obj_type_t) -1;
}
+int
+hwloc_obj_type_sscanf(const char *string, hwloc_obj_type_t *typep, int *depthattrp, void *typeattrp, size_t typeattrsize)
+{
+ hwloc_obj_type_t type = (hwloc_obj_type_t) -1;
+ int depthattr = -1;
+ hwloc_obj_cache_type_t cachetypeattr = (hwloc_obj_cache_type_t) -1; /* unspecified */
+ char *end;
+
+ /* types without depthattr */
+ if (!hwloc_strncasecmp(string, "system", 2)) {
+ type = HWLOC_OBJ_SYSTEM;
+ } else if (!hwloc_strncasecmp(string, "machine", 2)) {
+ type = HWLOC_OBJ_MACHINE;
+ } else if (!hwloc_strncasecmp(string, "node", 1)
+ || !hwloc_strncasecmp(string, "numa", 1)) { /* matches node and numanode */
+ type = HWLOC_OBJ_NODE;
+ } else if (!hwloc_strncasecmp(string, "socket", 2)) {
+ type = HWLOC_OBJ_SOCKET;
+ } else if (!hwloc_strncasecmp(string, "core", 2)) {
+ type = HWLOC_OBJ_CORE;
+ } else if (!hwloc_strncasecmp(string, "pu", 2)) {
+ type = HWLOC_OBJ_PU;
+ } else if (!hwloc_strncasecmp(string, "misc", 2)) {
+ type = HWLOC_OBJ_MISC;
+ } else if (!hwloc_strncasecmp(string, "bridge", 2)) {
+ type = HWLOC_OBJ_BRIDGE;
+ } else if (!hwloc_strncasecmp(string, "pci", 2)) {
+ type = HWLOC_OBJ_PCI_DEVICE;
+ } else if (!hwloc_strncasecmp(string, "os", 2)) {
+ type = HWLOC_OBJ_OS_DEVICE;
+
+ /* types with depthattr */
+ } else if (!hwloc_strncasecmp(string, "cache", 2)) {
+ type = HWLOC_OBJ_CACHE;
+
+ } else if ((string[0] == 'l' || string[0] == 'L') && string[1] >= '0' && string[1] <= '9') {
+ type = HWLOC_OBJ_CACHE;
+ depthattr = strtol(string+1, &end, 10);
+ if (*end == 'd') {
+ cachetypeattr = HWLOC_OBJ_CACHE_DATA;
+ } else if (*end == 'i') {
+ cachetypeattr = HWLOC_OBJ_CACHE_INSTRUCTION;
+ } else if (*end == 'u') {
+ cachetypeattr = HWLOC_OBJ_CACHE_UNIFIED;
+ }
+
+ } else if (!hwloc_strncasecmp(string, "group", 2)) {
+ int length;
+ type = HWLOC_OBJ_GROUP;
+ length = strcspn(string, "0123456789");
+ if (length <= 5 && !hwloc_strncasecmp(string, "group", length)
+ && string[length] >= '0' && string[length] <= '9') {
+ depthattr = strtol(string+length, &end, 10);
+ }
+ } else
+ return -1;
+
+ *typep = type;
+ if (depthattrp)
+ *depthattrp = depthattr;
+ if (typeattrp) {
+ if (type == HWLOC_OBJ_CACHE && sizeof(hwloc_obj_cache_type_t) <= typeattrsize)
+ memcpy(typeattrp, &cachetypeattr, sizeof(hwloc_obj_cache_type_t));
+ }
+
+ return 0;
+}
+
static const char *
hwloc_pci_class_string(unsigned short class_id)
{
@@ -458,10 +526,10 @@ hwloc_obj_attr_snprintf(char * __hwloc_restrict string, size_t size, hwloc_obj_t
if (obj->memory.local_memory)
res = hwloc_snprintf(tmp, tmplen, "%slocal=%lu%s%stotal=%lu%s",
prefix,
- (unsigned long) hwloc_memory_size_printf_value(obj->memory.total_memory, verbose),
+ (unsigned long) hwloc_memory_size_printf_value(obj->memory.local_memory, verbose),
hwloc_memory_size_printf_unit(obj->memory.total_memory, verbose),
separator,
- (unsigned long) hwloc_memory_size_printf_value(obj->memory.local_memory, verbose),
+ (unsigned long) hwloc_memory_size_printf_value(obj->memory.total_memory, verbose),
hwloc_memory_size_printf_unit(obj->memory.local_memory, verbose));
else if (obj->memory.total_memory)
res = hwloc_snprintf(tmp, tmplen, "%stotal=%lu%s",
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
index 9717631..3875c1a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
@@ -1,8 +1,9 @@
/*
- * Copyright © 2012-2013 Inria. All rights reserved.
+ * Copyright © 2012-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
+#include <private/autogen/config.h> /* for HWLOC_WIN_SYS */
#include <hwloc.h>
#include <stdlib.h>
@@ -14,6 +15,10 @@
#include <errno.h>
#include <assert.h>
+#ifdef HWLOC_WIN_SYS
+#define mkstemp mktemp
+#endif
+
/* mostly useful with valgrind, to check if backend cleanup properly */
int main(void)
@@ -34,7 +39,7 @@ int main(void)
printf("XML buffer export failed (%s), ignoring\n", strerror(errno));
else
xmlbufok = 1;
- mktemp(xmlfile);
+ mkstemp(xmlfile);
if (hwloc_topology_export_xml(topology1, xmlfile) < 0)
printf("XML file export failed (%s), ignoring\n", strerror(errno));
else
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c
index 26655d2..157c279 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c
@@ -1,5 +1,5 @@
/*
- * Copyright © 2011 inria. All rights reserved.
+ * Copyright © 2011-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -18,7 +18,7 @@ int main(void)
printf("Loading the local topology...\n");
hwloc_topology_init(&local);
- hwloc_topology_set_synthetic(local, "n:2 s:2 ca:1 core:2 ca:2 pu:2");
+ hwloc_topology_set_synthetic(local, "node:2 socket:2 cache:1 core:2 cache:2 pu:2");
hwloc_topology_load(local);
printf("Try to create an empty custom topology...\n");
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c
index 633465e..a6ad9f7 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c
@@ -8,7 +8,6 @@
#include <string.h>
#include <errno.h>
-#include <private/autogen/config.h> /* for HWLOC_WIN_SYS */
#include <hwloc.h>
hwloc_topology_t topology;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c
index 8b35f77..af86624 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -30,7 +30,7 @@ main (void)
if (err)
return EXIT_FAILURE;
- hwloc_topology_set_synthetic (topology, "node:3 socket:3 core:3 proc:3");
+ hwloc_topology_set_synthetic (topology, "node:3 socket:3 core:3 pu:3");
err = hwloc_topology_load (topology);
if (err)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
index 5f92e0c..2fd24d9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
@@ -81,7 +81,6 @@ static void import_cb(hwloc_topology_t topo __hwloc_attribute_unused, hwloc_obj_
} else if (!strncmp("Encoded", name, 7)) {
unsigned i = atoi(name+7);
- assert(i >= 0);
assert(i <= RANDOMSTRINGTESTS-1);
assert(RANDOMSTRINGLENGTH-i == (unsigned) length);
err = memcmp(buffer, randomstring+(i+1)/2, length);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.output
similarity index 59%
rename from src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output
rename to src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.output
index a632b8c..a8800ba 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.output
@@ -1,73 +1,60 @@
-Machine (P#0 Backend=Linux)
+Machine (P#0 Backend=Linux LinuxCgroup=/prout)
Socket L#0 (P#0 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
L3Cache L#0 (size=4096KB linesize=64 ways=16)
L2Cache L#0 (size=1024KB linesize=64 ways=8)
L1dCache L#0 (size=16KB linesize=64 ways=8)
- Core L#0 (P#0)
- PU L#0 (P#0)
- L1dCache L#1 (size=16KB linesize=64 ways=8)
- Core L#1 (P#2)
- PU L#1 (P#8)
+ Core L#0 (P#2)
+ PU L#0 (P#8)
L2Cache L#1 (size=1024KB linesize=64 ways=8)
- L1dCache L#2 (size=16KB linesize=64 ways=8)
- Core L#2 (P#1)
- PU L#2 (P#4)
- L1dCache L#3 (size=16KB linesize=64 ways=8)
- Core L#3 (P#3)
- PU L#3 (P#12)
+ L1dCache L#1 (size=16KB linesize=64 ways=8)
+ Core L#1 (P#1)
+ PU L#1 (P#4)
Socket L#1 (P#1 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
L3Cache L#1 (size=4096KB linesize=64 ways=16)
L2Cache L#2 (size=1024KB linesize=64 ways=8)
- L1dCache L#4 (size=16KB linesize=64 ways=8)
- Core L#4 (P#0)
- PU L#4 (P#1)
- L1dCache L#5 (size=16KB linesize=64 ways=8)
- Core L#5 (P#2)
- PU L#5 (P#9)
+ L1dCache L#2 (size=16KB linesize=64 ways=8)
+ Core L#2 (P#0)
+ PU L#2 (P#1)
+ L1dCache L#3 (size=16KB linesize=64 ways=8)
+ Core L#3 (P#2)
+ PU L#3 (P#9)
L2Cache L#3 (size=1024KB linesize=64 ways=8)
- L1dCache L#6 (size=16KB linesize=64 ways=8)
- Core L#6 (P#1)
- PU L#6 (P#5)
- L1dCache L#7 (size=16KB linesize=64 ways=8)
- Core L#7 (P#3)
- PU L#7 (P#13)
+ L1dCache L#4 (size=16KB linesize=64 ways=8)
+ Core L#4 (P#1)
+ PU L#4 (P#5)
Socket L#2 (P#2 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
L3Cache L#2 (size=4096KB linesize=64 ways=16)
L2Cache L#4 (size=1024KB linesize=64 ways=8)
+ L1dCache L#5 (size=16KB linesize=64 ways=8)
+ Core L#5 (P#0)
+ PU L#5 (P#2)
+ L1dCache L#6 (size=16KB linesize=64 ways=8)
+ Core L#6 (P#2)
+ PU L#6 (P#10)
+ L2Cache L#5 (size=1024KB linesize=64 ways=8)
+ L1dCache L#7 (size=16KB linesize=64 ways=8)
+ Core L#7 (P#1)
+ PU L#7 (P#6)
+ Socket L#3 (P#3 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#3 (size=4096KB linesize=64 ways=16)
+ L2Cache L#6 (size=1024KB linesize=64 ways=8)
L1dCache L#8 (size=16KB linesize=64 ways=8)
Core L#8 (P#0)
- PU L#8 (P#2)
+ PU L#8 (P#3)
L1dCache L#9 (size=16KB linesize=64 ways=8)
Core L#9 (P#2)
- PU L#9 (P#10)
- L2Cache L#5 (size=1024KB linesize=64 ways=8)
+ PU L#9 (P#11)
+ L2Cache L#7 (size=1024KB linesize=64 ways=8)
L1dCache L#10 (size=16KB linesize=64 ways=8)
Core L#10 (P#1)
- PU L#10 (P#6)
- L1dCache L#11 (size=16KB linesize=64 ways=8)
- Core L#11 (P#3)
- PU L#11 (P#14)
- Socket L#3 (P#3 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
- L3Cache L#3 (size=4096KB linesize=64 ways=16)
- L2Cache L#6 (size=1024KB linesize=64 ways=8)
- L1dCache L#12 (size=16KB linesize=64 ways=8)
- Core L#12 (P#0)
- PU L#12 (P#3)
- L1dCache L#13 (size=16KB linesize=64 ways=8)
- Core L#13 (P#2)
- PU L#13 (P#11)
- L2Cache L#7 (size=1024KB linesize=64 ways=8)
- L1dCache L#14 (size=16KB linesize=64 ways=8)
- Core L#14 (P#1)
- PU L#14 (P#7)
- L1dCache L#15 (size=16KB linesize=64 ways=8)
- Core L#15 (P#3)
- PU L#15 (P#15)
+ PU L#10 (P#7)
depth 0: 1 Machine (type #1)
depth 1: 4 Socket (type #3)
depth 2: 4 L3Cache (type #4)
depth 3: 8 L2Cache (type #4)
- depth 4: 16 L1dCache (type #4)
- depth 5: 16 Core (type #5)
- depth 6: 16 PU (type #6)
+ depth 4: 11 L1dCache (type #4)
+ depth 5: 11 Core (type #5)
+ depth 6: 11 PU (type #6)
+5 processors not represented in topology: 0x0000f001
+5 processors online but not allowed: 0x0000f001
Topology not from this system
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2
new file mode 100644
index 0000000..c75cf41
Binary files /dev/null and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2
deleted file mode 100644
index bfd7f0d..0000000
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2 and /dev/null differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output
index f434882..83e8020 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output
@@ -1,14 +1,14 @@
-Machine (P#0 total=48346688KB Backend=Linux)
+Machine (P#0 total=48346688KB Backend=Linux Architecture=ia64)
Group0 L#0 (total=24182720KB)
NUMANode L#0 (P#0 local=6045632KB total=6045632KB)
- Socket L#0 (P#0 CPUModel="Madison up to 9M cache")
+ Socket L#0 (P#0 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#0 (size=9216KB linesize=128 ways=18)
L2Cache L#0 (size=256KB linesize=128 ways=8)
L1dCache L#0 (size=16KB linesize=64 ways=4)
L1iCache L#0 (size=16KB linesize=64 ways=4)
Core L#0 (P#0)
PU L#0 (P#0)
- Socket L#1 (P#0 CPUModel="Madison up to 9M cache")
+ Socket L#1 (P#0 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#1 (size=9216KB linesize=128 ways=18)
L2Cache L#1 (size=256KB linesize=128 ways=8)
L1dCache L#1 (size=16KB linesize=64 ways=4)
@@ -16,14 +16,14 @@ Machine (P#0 total=48346688KB Backend=Linux)
Core L#1 (P#0)
PU L#1 (P#1)
NUMANode L#1 (P#1 local=6045696KB total=6045696KB)
- Socket L#2 (P#512 CPUModel="Madison up to 9M cache")
+ Socket L#2 (P#512 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#2 (size=9216KB linesize=128 ways=18)
L2Cache L#2 (size=256KB linesize=128 ways=8)
L1dCache L#2 (size=16KB linesize=64 ways=4)
L1iCache L#2 (size=16KB linesize=64 ways=4)
Core L#2 (P#0)
PU L#2 (P#2)
- Socket L#3 (P#512 CPUModel="Madison up to 9M cache")
+ Socket L#3 (P#512 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#3 (size=9216KB linesize=128 ways=18)
L2Cache L#3 (size=256KB linesize=128 ways=8)
L1dCache L#3 (size=16KB linesize=64 ways=4)
@@ -31,14 +31,14 @@ Machine (P#0 total=48346688KB Backend=Linux)
Core L#3 (P#0)
PU L#3 (P#3)
NUMANode L#2 (P#2 local=6045696KB total=6045696KB)
- Socket L#4 (P#1024 CPUModel="Madison up to 9M cache")
+ Socket L#4 (P#1024 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#4 (size=9216KB linesize=128 ways=18)
L2Cache L#4 (size=256KB linesize=128 ways=8)
L1dCache L#4 (size=16KB linesize=64 ways=4)
L1iCache L#4 (size=16KB linesize=64 ways=4)
Core L#4 (P#0)
PU L#4 (P#4)
- Socket L#5 (P#1024 CPUModel="Madison up to 9M cache")
+ Socket L#5 (P#1024 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#5 (size=9216KB linesize=128 ways=18)
L2Cache L#5 (size=256KB linesize=128 ways=8)
L1dCache L#5 (size=16KB linesize=64 ways=4)
@@ -46,14 +46,14 @@ Machine (P#0 total=48346688KB Backend=Linux)
Core L#5 (P#0)
PU L#5 (P#5)
NUMANode L#3 (P#3 local=6045696KB total=6045696KB)
- Socket L#6 (P#1536 CPUModel="Madison up to 9M cache")
+ Socket L#6 (P#1536 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#6 (size=9216KB linesize=128 ways=18)
L2Cache L#6 (size=256KB linesize=128 ways=8)
L1dCache L#6 (size=16KB linesize=64 ways=4)
L1iCache L#6 (size=16KB linesize=64 ways=4)
Core L#6 (P#0)
PU L#6 (P#6)
- Socket L#7 (P#1536 CPUModel="Madison up to 9M cache")
+ Socket L#7 (P#1536 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#7 (size=9216KB linesize=128 ways=18)
L2Cache L#7 (size=256KB linesize=128 ways=8)
L1dCache L#7 (size=16KB linesize=64 ways=4)
@@ -62,14 +62,14 @@ Machine (P#0 total=48346688KB Backend=Linux)
PU L#7 (P#7)
Group0 L#1 (total=24163968KB)
NUMANode L#4 (P#4 local=6045696KB total=6045696KB)
- Socket L#8 (P#2048 CPUModel="Madison up to 9M cache")
+ Socket L#8 (P#2048 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#8 (size=9216KB linesize=128 ways=18)
L2Cache L#8 (size=256KB linesize=128 ways=8)
L1dCache L#8 (size=16KB linesize=64 ways=4)
L1iCache L#8 (size=16KB linesize=64 ways=4)
Core L#8 (P#0)
PU L#8 (P#8)
- Socket L#9 (P#2048 CPUModel="Madison up to 9M cache")
+ Socket L#9 (P#2048 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#9 (size=9216KB linesize=128 ways=18)
L2Cache L#9 (size=256KB linesize=128 ways=8)
L1dCache L#9 (size=16KB linesize=64 ways=4)
@@ -77,14 +77,14 @@ Machine (P#0 total=48346688KB Backend=Linux)
Core L#9 (P#0)
PU L#9 (P#9)
NUMANode L#5 (P#5 local=6045632KB total=6045632KB)
- Socket L#10 (P#2560 CPUModel="Madison up to 9M cache")
+ Socket L#10 (P#2560 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#10 (size=9216KB linesize=128 ways=18)
L2Cache L#10 (size=256KB linesize=128 ways=8)
L1dCache L#10 (size=16KB linesize=64 ways=4)
L1iCache L#10 (size=16KB linesize=64 ways=4)
Core L#10 (P#0)
PU L#10 (P#10)
- Socket L#11 (P#2560 CPUModel="Madison up to 9M cache")
+ Socket L#11 (P#2560 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#11 (size=9216KB linesize=128 ways=18)
L2Cache L#11 (size=256KB linesize=128 ways=8)
L1dCache L#11 (size=16KB linesize=64 ways=4)
@@ -92,14 +92,14 @@ Machine (P#0 total=48346688KB Backend=Linux)
Core L#11 (P#0)
PU L#11 (P#11)
NUMANode L#6 (P#6 local=6045696KB total=6045696KB)
- Socket L#12 (P#3072 CPUModel="Madison up to 9M cache")
+ Socket L#12 (P#3072 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#12 (size=9216KB linesize=128 ways=18)
L2Cache L#12 (size=256KB linesize=128 ways=8)
L1dCache L#12 (size=16KB linesize=64 ways=4)
L1iCache L#12 (size=16KB linesize=64 ways=4)
Core L#12 (P#0)
PU L#12 (P#12)
- Socket L#13 (P#3072 CPUModel="Madison up to 9M cache")
+ Socket L#13 (P#3072 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#13 (size=9216KB linesize=128 ways=18)
L2Cache L#13 (size=256KB linesize=128 ways=8)
L1dCache L#13 (size=16KB linesize=64 ways=4)
@@ -107,14 +107,14 @@ Machine (P#0 total=48346688KB Backend=Linux)
Core L#13 (P#0)
PU L#13 (P#13)
NUMANode L#7 (P#7 local=6026944KB total=6026944KB)
- Socket L#14 (P#3584 CPUModel="Madison up to 9M cache")
+ Socket L#14 (P#3584 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#14 (size=9216KB linesize=128 ways=18)
L2Cache L#14 (size=256KB linesize=128 ways=8)
L1dCache L#14 (size=16KB linesize=64 ways=4)
L1iCache L#14 (size=16KB linesize=64 ways=4)
Core L#14 (P#0)
PU L#14 (P#14)
- Socket L#15 (P#3584 CPUModel="Madison up to 9M cache")
+ Socket L#15 (P#3584 CPUVendor=GenuineIntel CPUFamilyNumber=31 CPUModelNumber=2 CPUModel="Madison up to 9M cache")
L3Cache L#15 (size=9216KB linesize=128 ways=18)
L2Cache L#15 (size=256KB linesize=128 ways=8)
L1dCache L#15 (size=16KB linesize=64 ways=4)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2
index fa21b82..49382a6 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output
index 4dc09f9..cea14d0 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output
@@ -1,4 +1,4 @@
-Machine (P#0 local=8299024KB total=8299024KB Backend=Linux)
+Machine (P#0 local=8299024KB total=8299024KB CPUModel=EV68CB Backend=Linux)
PU L#0 (P#0)
depth 0: 1 Machine (type #1)
depth 1: 1 PU (type #6)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output
index 52645e0..c0ae841 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output
@@ -1,7 +1,7 @@
-Machine (P#0 total=516423680KB Backend=Linux)
+Machine (P#0 total=516423680KB PlatformName=pSeries PlatformModel="CHRP IBM,9179-MHB" Backend=Linux Architecture=ppc)
Group0 L#0 (total=124780544KB)
NUMANode L#0 (P#0 local=58458112KB total=58458112KB)
- Socket L#0 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#0 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#0 (size=4096KB linesize=128)
L2Cache L#0 (size=256KB linesize=128 ways=8)
L1dCache L#0 (size=32KB linesize=128 ways=8)
@@ -11,7 +11,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#1 (P#1)
PU L#2 (P#2)
PU L#3 (P#3)
- Socket L#1 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#1 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#1 (size=4096KB linesize=128)
L2Cache L#1 (size=256KB linesize=128 ways=8)
L1dCache L#1 (size=32KB linesize=128 ways=8)
@@ -21,7 +21,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#5 (P#5)
PU L#6 (P#6)
PU L#7 (P#7)
- Socket L#2 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#2 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#2 (size=4096KB linesize=128)
L2Cache L#2 (size=256KB linesize=128 ways=8)
L1dCache L#2 (size=32KB linesize=128 ways=8)
@@ -31,7 +31,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#9 (P#9)
PU L#10 (P#10)
PU L#11 (P#11)
- Socket L#3 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#3 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#3 (size=4096KB linesize=128)
L2Cache L#3 (size=256KB linesize=128 ways=8)
L1dCache L#3 (size=32KB linesize=128 ways=8)
@@ -41,7 +41,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#13 (P#13)
PU L#14 (P#14)
PU L#15 (P#15)
- Socket L#4 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#4 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#4 (size=4096KB linesize=128)
L2Cache L#4 (size=256KB linesize=128 ways=8)
L1dCache L#4 (size=32KB linesize=128 ways=8)
@@ -51,7 +51,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#17 (P#17)
PU L#18 (P#18)
PU L#19 (P#19)
- Socket L#5 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#5 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#5 (size=4096KB linesize=128)
L2Cache L#5 (size=256KB linesize=128 ways=8)
L1dCache L#5 (size=32KB linesize=128 ways=8)
@@ -61,7 +61,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#21 (P#21)
PU L#22 (P#22)
PU L#23 (P#23)
- Socket L#6 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#6 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#6 (size=4096KB linesize=128)
L2Cache L#6 (size=256KB linesize=128 ways=8)
L1dCache L#6 (size=32KB linesize=128 ways=8)
@@ -71,7 +71,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#25 (P#25)
PU L#26 (P#26)
PU L#27 (P#27)
- Socket L#7 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#7 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#7 (size=4096KB linesize=128)
L2Cache L#7 (size=256KB linesize=128 ways=8)
L1dCache L#7 (size=32KB linesize=128 ways=8)
@@ -82,7 +82,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#30 (P#30)
PU L#31 (P#31)
NUMANode L#1 (P#1 local=66322432KB total=66322432KB)
- Socket L#8 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#8 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#8 (size=4096KB linesize=128)
L2Cache L#8 (size=256KB linesize=128 ways=8)
L1dCache L#8 (size=32KB linesize=128 ways=8)
@@ -92,7 +92,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#33 (P#33)
PU L#34 (P#34)
PU L#35 (P#35)
- Socket L#9 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#9 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#9 (size=4096KB linesize=128)
L2Cache L#9 (size=256KB linesize=128 ways=8)
L1dCache L#9 (size=32KB linesize=128 ways=8)
@@ -102,7 +102,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#37 (P#37)
PU L#38 (P#38)
PU L#39 (P#39)
- Socket L#10 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#10 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#10 (size=4096KB linesize=128)
L2Cache L#10 (size=256KB linesize=128 ways=8)
L1dCache L#10 (size=32KB linesize=128 ways=8)
@@ -112,7 +112,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#41 (P#41)
PU L#42 (P#42)
PU L#43 (P#43)
- Socket L#11 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#11 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#11 (size=4096KB linesize=128)
L2Cache L#11 (size=256KB linesize=128 ways=8)
L1dCache L#11 (size=32KB linesize=128 ways=8)
@@ -122,7 +122,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#45 (P#45)
PU L#46 (P#46)
PU L#47 (P#47)
- Socket L#12 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#12 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#12 (size=4096KB linesize=128)
L2Cache L#12 (size=256KB linesize=128 ways=8)
L1dCache L#12 (size=32KB linesize=128 ways=8)
@@ -132,7 +132,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#49 (P#49)
PU L#50 (P#50)
PU L#51 (P#51)
- Socket L#13 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#13 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#13 (size=4096KB linesize=128)
L2Cache L#13 (size=256KB linesize=128 ways=8)
L1dCache L#13 (size=32KB linesize=128 ways=8)
@@ -142,7 +142,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#53 (P#53)
PU L#54 (P#54)
PU L#55 (P#55)
- Socket L#14 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#14 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#14 (size=4096KB linesize=128)
L2Cache L#14 (size=256KB linesize=128 ways=8)
L1dCache L#14 (size=32KB linesize=128 ways=8)
@@ -152,7 +152,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#57 (P#57)
PU L#58 (P#58)
PU L#59 (P#59)
- Socket L#15 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#15 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#15 (size=4096KB linesize=128)
L2Cache L#15 (size=256KB linesize=128 ways=8)
L1dCache L#15 (size=32KB linesize=128 ways=8)
@@ -164,7 +164,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#63 (P#63)
Group0 L#1 (total=133955584KB)
NUMANode L#2 (P#4 local=66846720KB total=66846720KB)
- Socket L#16 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#16 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#16 (size=4096KB linesize=128)
L2Cache L#16 (size=256KB linesize=128 ways=8)
L1dCache L#16 (size=32KB linesize=128 ways=8)
@@ -174,7 +174,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#65 (P#65)
PU L#66 (P#66)
PU L#67 (P#67)
- Socket L#17 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#17 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#17 (size=4096KB linesize=128)
L2Cache L#17 (size=256KB linesize=128 ways=8)
L1dCache L#17 (size=32KB linesize=128 ways=8)
@@ -184,7 +184,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#69 (P#69)
PU L#70 (P#70)
PU L#71 (P#71)
- Socket L#18 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#18 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#18 (size=4096KB linesize=128)
L2Cache L#18 (size=256KB linesize=128 ways=8)
L1dCache L#18 (size=32KB linesize=128 ways=8)
@@ -194,7 +194,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#73 (P#73)
PU L#74 (P#74)
PU L#75 (P#75)
- Socket L#19 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#19 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#19 (size=4096KB linesize=128)
L2Cache L#19 (size=256KB linesize=128 ways=8)
L1dCache L#19 (size=32KB linesize=128 ways=8)
@@ -204,7 +204,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#77 (P#77)
PU L#78 (P#78)
PU L#79 (P#79)
- Socket L#20 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#20 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#20 (size=4096KB linesize=128)
L2Cache L#20 (size=256KB linesize=128 ways=8)
L1dCache L#20 (size=32KB linesize=128 ways=8)
@@ -214,7 +214,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#81 (P#81)
PU L#82 (P#82)
PU L#83 (P#83)
- Socket L#21 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#21 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#21 (size=4096KB linesize=128)
L2Cache L#21 (size=256KB linesize=128 ways=8)
L1dCache L#21 (size=32KB linesize=128 ways=8)
@@ -224,7 +224,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#85 (P#85)
PU L#86 (P#86)
PU L#87 (P#87)
- Socket L#22 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#22 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#22 (size=4096KB linesize=128)
L2Cache L#22 (size=256KB linesize=128 ways=8)
L1dCache L#22 (size=32KB linesize=128 ways=8)
@@ -234,7 +234,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#89 (P#89)
PU L#90 (P#90)
PU L#91 (P#91)
- Socket L#23 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#23 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#23 (size=4096KB linesize=128)
L2Cache L#23 (size=256KB linesize=128 ways=8)
L1dCache L#23 (size=32KB linesize=128 ways=8)
@@ -245,7 +245,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#94 (P#94)
PU L#95 (P#95)
NUMANode L#3 (P#5 local=67108864KB total=67108864KB)
- Socket L#24 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#24 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#24 (size=4096KB linesize=128)
L2Cache L#24 (size=256KB linesize=128 ways=8)
L1dCache L#24 (size=32KB linesize=128 ways=8)
@@ -255,7 +255,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#97 (P#97)
PU L#98 (P#98)
PU L#99 (P#99)
- Socket L#25 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#25 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#25 (size=4096KB linesize=128)
L2Cache L#25 (size=256KB linesize=128 ways=8)
L1dCache L#25 (size=32KB linesize=128 ways=8)
@@ -265,7 +265,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#101 (P#101)
PU L#102 (P#102)
PU L#103 (P#103)
- Socket L#26 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#26 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#26 (size=4096KB linesize=128)
L2Cache L#26 (size=256KB linesize=128 ways=8)
L1dCache L#26 (size=32KB linesize=128 ways=8)
@@ -275,7 +275,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#105 (P#105)
PU L#106 (P#106)
PU L#107 (P#107)
- Socket L#27 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#27 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#27 (size=4096KB linesize=128)
L2Cache L#27 (size=256KB linesize=128 ways=8)
L1dCache L#27 (size=32KB linesize=128 ways=8)
@@ -285,7 +285,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#109 (P#109)
PU L#110 (P#110)
PU L#111 (P#111)
- Socket L#28 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#28 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#28 (size=4096KB linesize=128)
L2Cache L#28 (size=256KB linesize=128 ways=8)
L1dCache L#28 (size=32KB linesize=128 ways=8)
@@ -295,7 +295,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#113 (P#113)
PU L#114 (P#114)
PU L#115 (P#115)
- Socket L#29 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#29 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#29 (size=4096KB linesize=128)
L2Cache L#29 (size=256KB linesize=128 ways=8)
L1dCache L#29 (size=32KB linesize=128 ways=8)
@@ -305,7 +305,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#117 (P#117)
PU L#118 (P#118)
PU L#119 (P#119)
- Socket L#30 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#30 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#30 (size=4096KB linesize=128)
L2Cache L#30 (size=256KB linesize=128 ways=8)
L1dCache L#30 (size=32KB linesize=128 ways=8)
@@ -315,7 +315,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#121 (P#121)
PU L#122 (P#122)
PU L#123 (P#123)
- Socket L#31 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#31 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#31 (size=4096KB linesize=128)
L2Cache L#31 (size=256KB linesize=128 ways=8)
L1dCache L#31 (size=32KB linesize=128 ways=8)
@@ -327,7 +327,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#127 (P#127)
Group0 L#2 (total=133955584KB)
NUMANode L#4 (P#8 local=66846720KB total=66846720KB)
- Socket L#32 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#32 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#32 (size=4096KB linesize=128)
L2Cache L#32 (size=256KB linesize=128 ways=8)
L1dCache L#32 (size=32KB linesize=128 ways=8)
@@ -337,7 +337,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#129 (P#129)
PU L#130 (P#130)
PU L#131 (P#131)
- Socket L#33 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#33 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#33 (size=4096KB linesize=128)
L2Cache L#33 (size=256KB linesize=128 ways=8)
L1dCache L#33 (size=32KB linesize=128 ways=8)
@@ -347,7 +347,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#133 (P#133)
PU L#134 (P#134)
PU L#135 (P#135)
- Socket L#34 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#34 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#34 (size=4096KB linesize=128)
L2Cache L#34 (size=256KB linesize=128 ways=8)
L1dCache L#34 (size=32KB linesize=128 ways=8)
@@ -357,7 +357,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#137 (P#137)
PU L#138 (P#138)
PU L#139 (P#139)
- Socket L#35 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#35 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#35 (size=4096KB linesize=128)
L2Cache L#35 (size=256KB linesize=128 ways=8)
L1dCache L#35 (size=32KB linesize=128 ways=8)
@@ -367,7 +367,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#141 (P#141)
PU L#142 (P#142)
PU L#143 (P#143)
- Socket L#36 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#36 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#36 (size=4096KB linesize=128)
L2Cache L#36 (size=256KB linesize=128 ways=8)
L1dCache L#36 (size=32KB linesize=128 ways=8)
@@ -377,7 +377,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#145 (P#145)
PU L#146 (P#146)
PU L#147 (P#147)
- Socket L#37 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#37 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#37 (size=4096KB linesize=128)
L2Cache L#37 (size=256KB linesize=128 ways=8)
L1dCache L#37 (size=32KB linesize=128 ways=8)
@@ -387,7 +387,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#149 (P#149)
PU L#150 (P#150)
PU L#151 (P#151)
- Socket L#38 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#38 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#38 (size=4096KB linesize=128)
L2Cache L#38 (size=256KB linesize=128 ways=8)
L1dCache L#38 (size=32KB linesize=128 ways=8)
@@ -397,7 +397,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#153 (P#153)
PU L#154 (P#154)
PU L#155 (P#155)
- Socket L#39 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#39 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#39 (size=4096KB linesize=128)
L2Cache L#39 (size=256KB linesize=128 ways=8)
L1dCache L#39 (size=32KB linesize=128 ways=8)
@@ -408,7 +408,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#158 (P#158)
PU L#159 (P#159)
NUMANode L#5 (P#9 local=67108864KB total=67108864KB)
- Socket L#40 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#40 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#40 (size=4096KB linesize=128)
L2Cache L#40 (size=256KB linesize=128 ways=8)
L1dCache L#40 (size=32KB linesize=128 ways=8)
@@ -418,7 +418,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#161 (P#161)
PU L#162 (P#162)
PU L#163 (P#163)
- Socket L#41 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#41 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#41 (size=4096KB linesize=128)
L2Cache L#41 (size=256KB linesize=128 ways=8)
L1dCache L#41 (size=32KB linesize=128 ways=8)
@@ -428,7 +428,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#165 (P#165)
PU L#166 (P#166)
PU L#167 (P#167)
- Socket L#42 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#42 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#42 (size=4096KB linesize=128)
L2Cache L#42 (size=256KB linesize=128 ways=8)
L1dCache L#42 (size=32KB linesize=128 ways=8)
@@ -438,7 +438,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#169 (P#169)
PU L#170 (P#170)
PU L#171 (P#171)
- Socket L#43 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#43 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#43 (size=4096KB linesize=128)
L2Cache L#43 (size=256KB linesize=128 ways=8)
L1dCache L#43 (size=32KB linesize=128 ways=8)
@@ -448,7 +448,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#173 (P#173)
PU L#174 (P#174)
PU L#175 (P#175)
- Socket L#44 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#44 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#44 (size=4096KB linesize=128)
L2Cache L#44 (size=256KB linesize=128 ways=8)
L1dCache L#44 (size=32KB linesize=128 ways=8)
@@ -458,7 +458,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#177 (P#177)
PU L#178 (P#178)
PU L#179 (P#179)
- Socket L#45 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#45 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#45 (size=4096KB linesize=128)
L2Cache L#45 (size=256KB linesize=128 ways=8)
L1dCache L#45 (size=32KB linesize=128 ways=8)
@@ -468,7 +468,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#181 (P#181)
PU L#182 (P#182)
PU L#183 (P#183)
- Socket L#46 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#46 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#46 (size=4096KB linesize=128)
L2Cache L#46 (size=256KB linesize=128 ways=8)
L1dCache L#46 (size=32KB linesize=128 ways=8)
@@ -478,7 +478,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#185 (P#185)
PU L#186 (P#186)
PU L#187 (P#187)
- Socket L#47 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#47 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#47 (size=4096KB linesize=128)
L2Cache L#47 (size=256KB linesize=128 ways=8)
L1dCache L#47 (size=32KB linesize=128 ways=8)
@@ -490,7 +490,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#191 (P#191)
Group0 L#3 (total=123731968KB)
NUMANode L#6 (P#12 local=66846720KB total=66846720KB)
- Socket L#48 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#48 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#48 (size=4096KB linesize=128)
L2Cache L#48 (size=256KB linesize=128 ways=8)
L1dCache L#48 (size=32KB linesize=128 ways=8)
@@ -500,7 +500,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#193 (P#193)
PU L#194 (P#194)
PU L#195 (P#195)
- Socket L#49 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#49 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#49 (size=4096KB linesize=128)
L2Cache L#49 (size=256KB linesize=128 ways=8)
L1dCache L#49 (size=32KB linesize=128 ways=8)
@@ -510,7 +510,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#197 (P#197)
PU L#198 (P#198)
PU L#199 (P#199)
- Socket L#50 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#50 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#50 (size=4096KB linesize=128)
L2Cache L#50 (size=256KB linesize=128 ways=8)
L1dCache L#50 (size=32KB linesize=128 ways=8)
@@ -520,7 +520,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#201 (P#201)
PU L#202 (P#202)
PU L#203 (P#203)
- Socket L#51 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#51 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#51 (size=4096KB linesize=128)
L2Cache L#51 (size=256KB linesize=128 ways=8)
L1dCache L#51 (size=32KB linesize=128 ways=8)
@@ -530,7 +530,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#205 (P#205)
PU L#206 (P#206)
PU L#207 (P#207)
- Socket L#52 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#52 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#52 (size=4096KB linesize=128)
L2Cache L#52 (size=256KB linesize=128 ways=8)
L1dCache L#52 (size=32KB linesize=128 ways=8)
@@ -540,7 +540,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#209 (P#209)
PU L#210 (P#210)
PU L#211 (P#211)
- Socket L#53 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#53 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#53 (size=4096KB linesize=128)
L2Cache L#53 (size=256KB linesize=128 ways=8)
L1dCache L#53 (size=32KB linesize=128 ways=8)
@@ -550,7 +550,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#213 (P#213)
PU L#214 (P#214)
PU L#215 (P#215)
- Socket L#54 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#54 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#54 (size=4096KB linesize=128)
L2Cache L#54 (size=256KB linesize=128 ways=8)
L1dCache L#54 (size=32KB linesize=128 ways=8)
@@ -560,7 +560,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#217 (P#217)
PU L#218 (P#218)
PU L#219 (P#219)
- Socket L#55 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#55 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#55 (size=4096KB linesize=128)
L2Cache L#55 (size=256KB linesize=128 ways=8)
L1dCache L#55 (size=32KB linesize=128 ways=8)
@@ -571,7 +571,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#222 (P#222)
PU L#223 (P#223)
NUMANode L#7 (P#13 local=56885248KB total=56885248KB)
- Socket L#56 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#56 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#56 (size=4096KB linesize=128)
L2Cache L#56 (size=256KB linesize=128 ways=8)
L1dCache L#56 (size=32KB linesize=128 ways=8)
@@ -581,7 +581,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#225 (P#225)
PU L#226 (P#226)
PU L#227 (P#227)
- Socket L#57 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#57 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#57 (size=4096KB linesize=128)
L2Cache L#57 (size=256KB linesize=128 ways=8)
L1dCache L#57 (size=32KB linesize=128 ways=8)
@@ -591,7 +591,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#229 (P#229)
PU L#230 (P#230)
PU L#231 (P#231)
- Socket L#58 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#58 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#58 (size=4096KB linesize=128)
L2Cache L#58 (size=256KB linesize=128 ways=8)
L1dCache L#58 (size=32KB linesize=128 ways=8)
@@ -601,7 +601,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#233 (P#233)
PU L#234 (P#234)
PU L#235 (P#235)
- Socket L#59 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#59 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#59 (size=4096KB linesize=128)
L2Cache L#59 (size=256KB linesize=128 ways=8)
L1dCache L#59 (size=32KB linesize=128 ways=8)
@@ -611,7 +611,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#237 (P#237)
PU L#238 (P#238)
PU L#239 (P#239)
- Socket L#60 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#60 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#60 (size=4096KB linesize=128)
L2Cache L#60 (size=256KB linesize=128 ways=8)
L1dCache L#60 (size=32KB linesize=128 ways=8)
@@ -621,7 +621,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#241 (P#241)
PU L#242 (P#242)
PU L#243 (P#243)
- Socket L#61 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#61 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#61 (size=4096KB linesize=128)
L2Cache L#61 (size=256KB linesize=128 ways=8)
L1dCache L#61 (size=32KB linesize=128 ways=8)
@@ -631,7 +631,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#245 (P#245)
PU L#246 (P#246)
PU L#247 (P#247)
- Socket L#62 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#62 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#62 (size=4096KB linesize=128)
L2Cache L#62 (size=256KB linesize=128 ways=8)
L1dCache L#62 (size=32KB linesize=128 ways=8)
@@ -641,7 +641,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#249 (P#249)
PU L#250 (P#250)
PU L#251 (P#251)
- Socket L#63 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#63 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#63 (size=4096KB linesize=128)
L2Cache L#63 (size=256KB linesize=128 ways=8)
L1dCache L#63 (size=32KB linesize=128 ways=8)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output
index fc2cc46..9e4f1c9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output
@@ -1,4 +1,4 @@
-Machine (P#0 local=514318208KB total=514318208KB Backend=Linux)
+Machine (P#0 local=514318208KB total=514318208KB PlatformName=pSeries PlatformModel="CHRP IBM,9179-MHB" Backend=Linux Architecture=ppc)
L3Cache L#0 (size=4096KB linesize=128)
L2Cache L#0 (size=256KB linesize=128 ways=8)
L1dCache L#0 (size=32KB linesize=128 ways=8)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output
index 52645e0..c0ae841 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output
@@ -1,7 +1,7 @@
-Machine (P#0 total=516423680KB Backend=Linux)
+Machine (P#0 total=516423680KB PlatformName=pSeries PlatformModel="CHRP IBM,9179-MHB" Backend=Linux Architecture=ppc)
Group0 L#0 (total=124780544KB)
NUMANode L#0 (P#0 local=58458112KB total=58458112KB)
- Socket L#0 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#0 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#0 (size=4096KB linesize=128)
L2Cache L#0 (size=256KB linesize=128 ways=8)
L1dCache L#0 (size=32KB linesize=128 ways=8)
@@ -11,7 +11,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#1 (P#1)
PU L#2 (P#2)
PU L#3 (P#3)
- Socket L#1 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#1 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#1 (size=4096KB linesize=128)
L2Cache L#1 (size=256KB linesize=128 ways=8)
L1dCache L#1 (size=32KB linesize=128 ways=8)
@@ -21,7 +21,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#5 (P#5)
PU L#6 (P#6)
PU L#7 (P#7)
- Socket L#2 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#2 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#2 (size=4096KB linesize=128)
L2Cache L#2 (size=256KB linesize=128 ways=8)
L1dCache L#2 (size=32KB linesize=128 ways=8)
@@ -31,7 +31,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#9 (P#9)
PU L#10 (P#10)
PU L#11 (P#11)
- Socket L#3 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#3 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#3 (size=4096KB linesize=128)
L2Cache L#3 (size=256KB linesize=128 ways=8)
L1dCache L#3 (size=32KB linesize=128 ways=8)
@@ -41,7 +41,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#13 (P#13)
PU L#14 (P#14)
PU L#15 (P#15)
- Socket L#4 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#4 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#4 (size=4096KB linesize=128)
L2Cache L#4 (size=256KB linesize=128 ways=8)
L1dCache L#4 (size=32KB linesize=128 ways=8)
@@ -51,7 +51,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#17 (P#17)
PU L#18 (P#18)
PU L#19 (P#19)
- Socket L#5 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#5 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#5 (size=4096KB linesize=128)
L2Cache L#5 (size=256KB linesize=128 ways=8)
L1dCache L#5 (size=32KB linesize=128 ways=8)
@@ -61,7 +61,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#21 (P#21)
PU L#22 (P#22)
PU L#23 (P#23)
- Socket L#6 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#6 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#6 (size=4096KB linesize=128)
L2Cache L#6 (size=256KB linesize=128 ways=8)
L1dCache L#6 (size=32KB linesize=128 ways=8)
@@ -71,7 +71,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#25 (P#25)
PU L#26 (P#26)
PU L#27 (P#27)
- Socket L#7 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#7 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#7 (size=4096KB linesize=128)
L2Cache L#7 (size=256KB linesize=128 ways=8)
L1dCache L#7 (size=32KB linesize=128 ways=8)
@@ -82,7 +82,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#30 (P#30)
PU L#31 (P#31)
NUMANode L#1 (P#1 local=66322432KB total=66322432KB)
- Socket L#8 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#8 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#8 (size=4096KB linesize=128)
L2Cache L#8 (size=256KB linesize=128 ways=8)
L1dCache L#8 (size=32KB linesize=128 ways=8)
@@ -92,7 +92,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#33 (P#33)
PU L#34 (P#34)
PU L#35 (P#35)
- Socket L#9 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#9 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#9 (size=4096KB linesize=128)
L2Cache L#9 (size=256KB linesize=128 ways=8)
L1dCache L#9 (size=32KB linesize=128 ways=8)
@@ -102,7 +102,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#37 (P#37)
PU L#38 (P#38)
PU L#39 (P#39)
- Socket L#10 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#10 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#10 (size=4096KB linesize=128)
L2Cache L#10 (size=256KB linesize=128 ways=8)
L1dCache L#10 (size=32KB linesize=128 ways=8)
@@ -112,7 +112,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#41 (P#41)
PU L#42 (P#42)
PU L#43 (P#43)
- Socket L#11 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#11 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#11 (size=4096KB linesize=128)
L2Cache L#11 (size=256KB linesize=128 ways=8)
L1dCache L#11 (size=32KB linesize=128 ways=8)
@@ -122,7 +122,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#45 (P#45)
PU L#46 (P#46)
PU L#47 (P#47)
- Socket L#12 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#12 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#12 (size=4096KB linesize=128)
L2Cache L#12 (size=256KB linesize=128 ways=8)
L1dCache L#12 (size=32KB linesize=128 ways=8)
@@ -132,7 +132,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#49 (P#49)
PU L#50 (P#50)
PU L#51 (P#51)
- Socket L#13 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#13 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#13 (size=4096KB linesize=128)
L2Cache L#13 (size=256KB linesize=128 ways=8)
L1dCache L#13 (size=32KB linesize=128 ways=8)
@@ -142,7 +142,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#53 (P#53)
PU L#54 (P#54)
PU L#55 (P#55)
- Socket L#14 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#14 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#14 (size=4096KB linesize=128)
L2Cache L#14 (size=256KB linesize=128 ways=8)
L1dCache L#14 (size=32KB linesize=128 ways=8)
@@ -152,7 +152,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#57 (P#57)
PU L#58 (P#58)
PU L#59 (P#59)
- Socket L#15 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#15 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#15 (size=4096KB linesize=128)
L2Cache L#15 (size=256KB linesize=128 ways=8)
L1dCache L#15 (size=32KB linesize=128 ways=8)
@@ -164,7 +164,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#63 (P#63)
Group0 L#1 (total=133955584KB)
NUMANode L#2 (P#4 local=66846720KB total=66846720KB)
- Socket L#16 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#16 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#16 (size=4096KB linesize=128)
L2Cache L#16 (size=256KB linesize=128 ways=8)
L1dCache L#16 (size=32KB linesize=128 ways=8)
@@ -174,7 +174,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#65 (P#65)
PU L#66 (P#66)
PU L#67 (P#67)
- Socket L#17 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#17 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#17 (size=4096KB linesize=128)
L2Cache L#17 (size=256KB linesize=128 ways=8)
L1dCache L#17 (size=32KB linesize=128 ways=8)
@@ -184,7 +184,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#69 (P#69)
PU L#70 (P#70)
PU L#71 (P#71)
- Socket L#18 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#18 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#18 (size=4096KB linesize=128)
L2Cache L#18 (size=256KB linesize=128 ways=8)
L1dCache L#18 (size=32KB linesize=128 ways=8)
@@ -194,7 +194,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#73 (P#73)
PU L#74 (P#74)
PU L#75 (P#75)
- Socket L#19 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#19 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#19 (size=4096KB linesize=128)
L2Cache L#19 (size=256KB linesize=128 ways=8)
L1dCache L#19 (size=32KB linesize=128 ways=8)
@@ -204,7 +204,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#77 (P#77)
PU L#78 (P#78)
PU L#79 (P#79)
- Socket L#20 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#20 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#20 (size=4096KB linesize=128)
L2Cache L#20 (size=256KB linesize=128 ways=8)
L1dCache L#20 (size=32KB linesize=128 ways=8)
@@ -214,7 +214,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#81 (P#81)
PU L#82 (P#82)
PU L#83 (P#83)
- Socket L#21 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#21 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#21 (size=4096KB linesize=128)
L2Cache L#21 (size=256KB linesize=128 ways=8)
L1dCache L#21 (size=32KB linesize=128 ways=8)
@@ -224,7 +224,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#85 (P#85)
PU L#86 (P#86)
PU L#87 (P#87)
- Socket L#22 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#22 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#22 (size=4096KB linesize=128)
L2Cache L#22 (size=256KB linesize=128 ways=8)
L1dCache L#22 (size=32KB linesize=128 ways=8)
@@ -234,7 +234,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#89 (P#89)
PU L#90 (P#90)
PU L#91 (P#91)
- Socket L#23 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#23 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#23 (size=4096KB linesize=128)
L2Cache L#23 (size=256KB linesize=128 ways=8)
L1dCache L#23 (size=32KB linesize=128 ways=8)
@@ -245,7 +245,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#94 (P#94)
PU L#95 (P#95)
NUMANode L#3 (P#5 local=67108864KB total=67108864KB)
- Socket L#24 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#24 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#24 (size=4096KB linesize=128)
L2Cache L#24 (size=256KB linesize=128 ways=8)
L1dCache L#24 (size=32KB linesize=128 ways=8)
@@ -255,7 +255,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#97 (P#97)
PU L#98 (P#98)
PU L#99 (P#99)
- Socket L#25 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#25 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#25 (size=4096KB linesize=128)
L2Cache L#25 (size=256KB linesize=128 ways=8)
L1dCache L#25 (size=32KB linesize=128 ways=8)
@@ -265,7 +265,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#101 (P#101)
PU L#102 (P#102)
PU L#103 (P#103)
- Socket L#26 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#26 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#26 (size=4096KB linesize=128)
L2Cache L#26 (size=256KB linesize=128 ways=8)
L1dCache L#26 (size=32KB linesize=128 ways=8)
@@ -275,7 +275,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#105 (P#105)
PU L#106 (P#106)
PU L#107 (P#107)
- Socket L#27 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#27 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#27 (size=4096KB linesize=128)
L2Cache L#27 (size=256KB linesize=128 ways=8)
L1dCache L#27 (size=32KB linesize=128 ways=8)
@@ -285,7 +285,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#109 (P#109)
PU L#110 (P#110)
PU L#111 (P#111)
- Socket L#28 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#28 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#28 (size=4096KB linesize=128)
L2Cache L#28 (size=256KB linesize=128 ways=8)
L1dCache L#28 (size=32KB linesize=128 ways=8)
@@ -295,7 +295,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#113 (P#113)
PU L#114 (P#114)
PU L#115 (P#115)
- Socket L#29 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#29 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#29 (size=4096KB linesize=128)
L2Cache L#29 (size=256KB linesize=128 ways=8)
L1dCache L#29 (size=32KB linesize=128 ways=8)
@@ -305,7 +305,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#117 (P#117)
PU L#118 (P#118)
PU L#119 (P#119)
- Socket L#30 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#30 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#30 (size=4096KB linesize=128)
L2Cache L#30 (size=256KB linesize=128 ways=8)
L1dCache L#30 (size=32KB linesize=128 ways=8)
@@ -315,7 +315,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#121 (P#121)
PU L#122 (P#122)
PU L#123 (P#123)
- Socket L#31 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#31 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#31 (size=4096KB linesize=128)
L2Cache L#31 (size=256KB linesize=128 ways=8)
L1dCache L#31 (size=32KB linesize=128 ways=8)
@@ -327,7 +327,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#127 (P#127)
Group0 L#2 (total=133955584KB)
NUMANode L#4 (P#8 local=66846720KB total=66846720KB)
- Socket L#32 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#32 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#32 (size=4096KB linesize=128)
L2Cache L#32 (size=256KB linesize=128 ways=8)
L1dCache L#32 (size=32KB linesize=128 ways=8)
@@ -337,7 +337,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#129 (P#129)
PU L#130 (P#130)
PU L#131 (P#131)
- Socket L#33 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#33 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#33 (size=4096KB linesize=128)
L2Cache L#33 (size=256KB linesize=128 ways=8)
L1dCache L#33 (size=32KB linesize=128 ways=8)
@@ -347,7 +347,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#133 (P#133)
PU L#134 (P#134)
PU L#135 (P#135)
- Socket L#34 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#34 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#34 (size=4096KB linesize=128)
L2Cache L#34 (size=256KB linesize=128 ways=8)
L1dCache L#34 (size=32KB linesize=128 ways=8)
@@ -357,7 +357,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#137 (P#137)
PU L#138 (P#138)
PU L#139 (P#139)
- Socket L#35 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#35 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#35 (size=4096KB linesize=128)
L2Cache L#35 (size=256KB linesize=128 ways=8)
L1dCache L#35 (size=32KB linesize=128 ways=8)
@@ -367,7 +367,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#141 (P#141)
PU L#142 (P#142)
PU L#143 (P#143)
- Socket L#36 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#36 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#36 (size=4096KB linesize=128)
L2Cache L#36 (size=256KB linesize=128 ways=8)
L1dCache L#36 (size=32KB linesize=128 ways=8)
@@ -377,7 +377,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#145 (P#145)
PU L#146 (P#146)
PU L#147 (P#147)
- Socket L#37 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#37 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#37 (size=4096KB linesize=128)
L2Cache L#37 (size=256KB linesize=128 ways=8)
L1dCache L#37 (size=32KB linesize=128 ways=8)
@@ -387,7 +387,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#149 (P#149)
PU L#150 (P#150)
PU L#151 (P#151)
- Socket L#38 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#38 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#38 (size=4096KB linesize=128)
L2Cache L#38 (size=256KB linesize=128 ways=8)
L1dCache L#38 (size=32KB linesize=128 ways=8)
@@ -397,7 +397,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#153 (P#153)
PU L#154 (P#154)
PU L#155 (P#155)
- Socket L#39 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#39 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#39 (size=4096KB linesize=128)
L2Cache L#39 (size=256KB linesize=128 ways=8)
L1dCache L#39 (size=32KB linesize=128 ways=8)
@@ -408,7 +408,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#158 (P#158)
PU L#159 (P#159)
NUMANode L#5 (P#9 local=67108864KB total=67108864KB)
- Socket L#40 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#40 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#40 (size=4096KB linesize=128)
L2Cache L#40 (size=256KB linesize=128 ways=8)
L1dCache L#40 (size=32KB linesize=128 ways=8)
@@ -418,7 +418,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#161 (P#161)
PU L#162 (P#162)
PU L#163 (P#163)
- Socket L#41 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#41 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#41 (size=4096KB linesize=128)
L2Cache L#41 (size=256KB linesize=128 ways=8)
L1dCache L#41 (size=32KB linesize=128 ways=8)
@@ -428,7 +428,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#165 (P#165)
PU L#166 (P#166)
PU L#167 (P#167)
- Socket L#42 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#42 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#42 (size=4096KB linesize=128)
L2Cache L#42 (size=256KB linesize=128 ways=8)
L1dCache L#42 (size=32KB linesize=128 ways=8)
@@ -438,7 +438,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#169 (P#169)
PU L#170 (P#170)
PU L#171 (P#171)
- Socket L#43 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#43 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#43 (size=4096KB linesize=128)
L2Cache L#43 (size=256KB linesize=128 ways=8)
L1dCache L#43 (size=32KB linesize=128 ways=8)
@@ -448,7 +448,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#173 (P#173)
PU L#174 (P#174)
PU L#175 (P#175)
- Socket L#44 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#44 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#44 (size=4096KB linesize=128)
L2Cache L#44 (size=256KB linesize=128 ways=8)
L1dCache L#44 (size=32KB linesize=128 ways=8)
@@ -458,7 +458,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#177 (P#177)
PU L#178 (P#178)
PU L#179 (P#179)
- Socket L#45 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#45 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#45 (size=4096KB linesize=128)
L2Cache L#45 (size=256KB linesize=128 ways=8)
L1dCache L#45 (size=32KB linesize=128 ways=8)
@@ -468,7 +468,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#181 (P#181)
PU L#182 (P#182)
PU L#183 (P#183)
- Socket L#46 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#46 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#46 (size=4096KB linesize=128)
L2Cache L#46 (size=256KB linesize=128 ways=8)
L1dCache L#46 (size=32KB linesize=128 ways=8)
@@ -478,7 +478,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#185 (P#185)
PU L#186 (P#186)
PU L#187 (P#187)
- Socket L#47 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#47 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#47 (size=4096KB linesize=128)
L2Cache L#47 (size=256KB linesize=128 ways=8)
L1dCache L#47 (size=32KB linesize=128 ways=8)
@@ -490,7 +490,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#191 (P#191)
Group0 L#3 (total=123731968KB)
NUMANode L#6 (P#12 local=66846720KB total=66846720KB)
- Socket L#48 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#48 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#48 (size=4096KB linesize=128)
L2Cache L#48 (size=256KB linesize=128 ways=8)
L1dCache L#48 (size=32KB linesize=128 ways=8)
@@ -500,7 +500,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#193 (P#193)
PU L#194 (P#194)
PU L#195 (P#195)
- Socket L#49 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#49 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#49 (size=4096KB linesize=128)
L2Cache L#49 (size=256KB linesize=128 ways=8)
L1dCache L#49 (size=32KB linesize=128 ways=8)
@@ -510,7 +510,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#197 (P#197)
PU L#198 (P#198)
PU L#199 (P#199)
- Socket L#50 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#50 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#50 (size=4096KB linesize=128)
L2Cache L#50 (size=256KB linesize=128 ways=8)
L1dCache L#50 (size=32KB linesize=128 ways=8)
@@ -520,7 +520,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#201 (P#201)
PU L#202 (P#202)
PU L#203 (P#203)
- Socket L#51 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#51 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#51 (size=4096KB linesize=128)
L2Cache L#51 (size=256KB linesize=128 ways=8)
L1dCache L#51 (size=32KB linesize=128 ways=8)
@@ -530,7 +530,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#205 (P#205)
PU L#206 (P#206)
PU L#207 (P#207)
- Socket L#52 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#52 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#52 (size=4096KB linesize=128)
L2Cache L#52 (size=256KB linesize=128 ways=8)
L1dCache L#52 (size=32KB linesize=128 ways=8)
@@ -540,7 +540,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#209 (P#209)
PU L#210 (P#210)
PU L#211 (P#211)
- Socket L#53 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#53 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#53 (size=4096KB linesize=128)
L2Cache L#53 (size=256KB linesize=128 ways=8)
L1dCache L#53 (size=32KB linesize=128 ways=8)
@@ -550,7 +550,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#213 (P#213)
PU L#214 (P#214)
PU L#215 (P#215)
- Socket L#54 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#54 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#54 (size=4096KB linesize=128)
L2Cache L#54 (size=256KB linesize=128 ways=8)
L1dCache L#54 (size=32KB linesize=128 ways=8)
@@ -560,7 +560,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#217 (P#217)
PU L#218 (P#218)
PU L#219 (P#219)
- Socket L#55 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#55 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#55 (size=4096KB linesize=128)
L2Cache L#55 (size=256KB linesize=128 ways=8)
L1dCache L#55 (size=32KB linesize=128 ways=8)
@@ -571,7 +571,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#222 (P#222)
PU L#223 (P#223)
NUMANode L#7 (P#13 local=56885248KB total=56885248KB)
- Socket L#56 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#56 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#56 (size=4096KB linesize=128)
L2Cache L#56 (size=256KB linesize=128 ways=8)
L1dCache L#56 (size=32KB linesize=128 ways=8)
@@ -581,7 +581,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#225 (P#225)
PU L#226 (P#226)
PU L#227 (P#227)
- Socket L#57 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#57 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#57 (size=4096KB linesize=128)
L2Cache L#57 (size=256KB linesize=128 ways=8)
L1dCache L#57 (size=32KB linesize=128 ways=8)
@@ -591,7 +591,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#229 (P#229)
PU L#230 (P#230)
PU L#231 (P#231)
- Socket L#58 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#58 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#58 (size=4096KB linesize=128)
L2Cache L#58 (size=256KB linesize=128 ways=8)
L1dCache L#58 (size=32KB linesize=128 ways=8)
@@ -601,7 +601,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#233 (P#233)
PU L#234 (P#234)
PU L#235 (P#235)
- Socket L#59 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#59 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#59 (size=4096KB linesize=128)
L2Cache L#59 (size=256KB linesize=128 ways=8)
L1dCache L#59 (size=32KB linesize=128 ways=8)
@@ -611,7 +611,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#237 (P#237)
PU L#238 (P#238)
PU L#239 (P#239)
- Socket L#60 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#60 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#60 (size=4096KB linesize=128)
L2Cache L#60 (size=256KB linesize=128 ways=8)
L1dCache L#60 (size=32KB linesize=128 ways=8)
@@ -621,7 +621,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#241 (P#241)
PU L#242 (P#242)
PU L#243 (P#243)
- Socket L#61 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#61 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#61 (size=4096KB linesize=128)
L2Cache L#61 (size=256KB linesize=128 ways=8)
L1dCache L#61 (size=32KB linesize=128 ways=8)
@@ -631,7 +631,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#245 (P#245)
PU L#246 (P#246)
PU L#247 (P#247)
- Socket L#62 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#62 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#62 (size=4096KB linesize=128)
L2Cache L#62 (size=256KB linesize=128 ways=8)
L1dCache L#62 (size=32KB linesize=128 ways=8)
@@ -641,7 +641,7 @@ Machine (P#0 total=516423680KB Backend=Linux)
PU L#249 (P#249)
PU L#250 (P#250)
PU L#251 (P#251)
- Socket L#63 (CPUModel="POWER7 (architected), altivec supported")
+ Socket L#63 (CPUModel="POWER7 (architected), altivec supported" CPURevision="2.1 (pvr 003f 0201)")
L3Cache L#63 (size=4096KB linesize=128)
L2Cache L#63 (size=256KB linesize=128 ways=8)
L1dCache L#63 (size=32KB linesize=128 ways=8)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2
index 7a8af68..9ceae14 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output
index 1e3d52b..6e861f5 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output
@@ -1,4 +1,4 @@
-Machine (P#0 local=280840KB total=280840KB Backend=Linux)
+Machine (P#0 local=280840KB total=280840KB CPUModel="ARMv7 Processor rev 1 (v7l)" CPUImplementer=0x41 CPUArchitecture=7 CPUVariant=0x2 CPUPart=0xc09 CPURevision=1 HardwareName="ST-Ericsson MOP500 platform" HardwareRevision=0000 HardwareSerial=0000000000000000 Backend=Linux Architecture=arm)
Socket L#0 (P#3)
Core L#0 (P#0)
PU L#0 (P#0)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2
index 4fd0762..ffae66e 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output
index e677b2c..a20f5d1 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output
@@ -1,4 +1,4 @@
-Machine (P#0 Backend=Linux)
+Machine (P#0 PlatformName=PS3 PlatformModel=SonyPS3 Backend=Linux Architecture=ppc)
Core L#0
PU L#0 (P#0)
PU L#1 (P#1)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2
index 3b12a3e..a37b648 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.output
new file mode 100644
index 0000000..86a2319
--- /dev/null
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.output
@@ -0,0 +1,49 @@
+Machine (P#0 total=2096684KB DMIProductName=AltixXE320 DMIProductVersion=AltixXE DMIBoardVendor=SM DMIBoardName=X7DWT-INF DMIBoardVersion=1.01 DMIBoardAssetTag= DMIChassisVendor=SGI.COM DMIChassisType=1 DMIChassisVersion=013-5556-002 DMIChassisAssetTag=" " DMIBIOSVendor="Phoenix Technologies LTD" DMIBIOSVersion=.0b
DMIBIOSDate=03/24/2008 DMISysVendor=SGI.COM Backend=Linux LinuxCgroup=/)
+ NUMANode L#0 (P#0 local=2096684KB total=2096684KB)
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(R) CPU E5472 @ 3.00GHz")
+ L2Cache L#0 (size=6144KB linesize=64 ways=24)
+ L1dCache L#0 (size=32KB linesize=64 ways=8)
+ L1iCache L#0 (size=32KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L1dCache L#1 (size=32KB linesize=64 ways=8)
+ L1iCache L#1 (size=32KB linesize=64 ways=8)
+ Core L#1 (P#1)
+ PU L#1 (P#2)
+ L2Cache L#1 (size=6144KB linesize=64 ways=24)
+ L1dCache L#2 (size=32KB linesize=64 ways=8)
+ L1iCache L#2 (size=32KB linesize=64 ways=8)
+ Core L#2 (P#2)
+ PU L#2 (P#4)
+ L1dCache L#3 (size=32KB linesize=64 ways=8)
+ L1iCache L#3 (size=32KB linesize=64 ways=8)
+ Core L#3 (P#3)
+ PU L#3 (P#6)
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(R) CPU E5472 @ 3.00GHz")
+ L2Cache L#2 (size=6144KB linesize=64 ways=24)
+ L1dCache L#4 (size=32KB linesize=64 ways=8)
+ L1iCache L#4 (size=32KB linesize=64 ways=8)
+ Core L#4 (P#0)
+ PU L#4 (P#1)
+ L1dCache L#5 (size=32KB linesize=64 ways=8)
+ L1iCache L#5 (size=32KB linesize=64 ways=8)
+ Core L#5 (P#1)
+ PU L#5 (P#3)
+ L2Cache L#3 (size=6144KB linesize=64 ways=24)
+ L1dCache L#6 (size=32KB linesize=64 ways=8)
+ L1iCache L#6 (size=32KB linesize=64 ways=8)
+ Core L#6 (P#2)
+ PU L#6 (P#5)
+ L1dCache L#7 (size=32KB linesize=64 ways=8)
+ L1iCache L#7 (size=32KB linesize=64 ways=8)
+ Core L#7 (P#3)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 1 NUMANode (type #2)
+ depth 2: 2 Socket (type #3)
+ depth 3: 4 L2Cache (type #4)
+ depth 4: 8 L1dCache (type #4)
+ depth 5: 8 L1iCache (type #4)
+ depth 6: 8 Core (type #5)
+ depth 7: 8 PU (type #6)
+Topology not from this system
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.tar.bz2
new file mode 100644
index 0000000..f32afc5
Binary files /dev/null and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output
index 7abf221..e5d0270 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output
@@ -1,5 +1,5 @@
-Machine (P#0 local=1016272KB total=1016272KB Backend=Linux)
- Socket L#0 (P#1 CPUModel="Genuine Intel(R) CPU @ 0000 @ 2.93GHz")
+Machine (P#0 local=1016272KB total=1016272KB Backend=Linux Architecture=x86_64)
+ Socket L#0 (P#1 CPUVendor=GenuineIntel CPUFamilyNumber=6 CPUModelNumber=26 CPUModel="Genuine Intel(R) CPU @ 0000 @ 2.93GHz")
L3Cache L#0 (size=8192KB linesize=64 ways=16)
L2Cache L#0 (size=256KB linesize=64 ways=8)
L1dCache L#0 (size=32KB linesize=64 ways=8)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2 b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2
index 47a7b6f..419f024 100644
Binary files a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2 and b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2 differ
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am
index 97a019a..f23cd98 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright © 2009-2013 Inria. All rights reserved.
+# Copyright © 2009-2014 Inria. All rights reserved.
# Copyright © 2009-2011 Université Bordeaux 1
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
@@ -26,6 +26,7 @@ sysfs_outputs = \
8amd64-4n2c.output \
8em64t-4c2t.output \
8em64t-2s2ca2c.output \
+ 8em64t-2s2ca2c-buggynuma.output \
8em64t-2s4c-heterogeneous.output \
8ia64-2n2s2c.output \
8ia64-2s2c2t.output \
@@ -35,7 +36,7 @@ sysfs_outputs = \
16amd64-8n2c-cpusets.output \
16amd64-8n2c-cpusets.xml.output \
16amd64-8n2c-cpusets_noadmin.output \
- 16em64t-4s2cu2c.output \
+ 16em64t-4s2ca2c-cpusetreorder.output \
16em64t-4s2c2t.output \
16em64t-4s2c2t-offlines.output \
16em64t-4s2c2t-offlines.xml.output \
@@ -82,6 +83,7 @@ sysfs_tarballs = \
8amd64-4n2c.tar.bz2 \
8em64t-4c2t.tar.bz2 \
8em64t-2s2ca2c.tar.bz2 \
+ 8em64t-2s2ca2c-buggynuma.tar.bz2 \
8em64t-2s4c-heterogeneous.tar.bz2 \
8ia64-2n2s2c.tar.bz2 \
8ia64-2s2c2t.tar.bz2 \
@@ -91,7 +93,7 @@ sysfs_tarballs = \
16amd64-8n2c-cpusets.tar.bz2 \
16amd64-8n2c-cpusets.xml.source \
16amd64-8n2c-cpusets_noadmin.source \
- 16em64t-4s2cu2c.tar.bz2 \
+ 16em64t-4s2ca2c-cpusetreorder.tar.bz2 \
16em64t-4s2c2t.tar.bz2 \
16em64t-4s2c2t-offlines.tar.bz2 \
16em64t-4s2c2t-offlines.xml.source \
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in
index 572d928..7735646 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in
@@ -2,7 +2,7 @@
#-*-sh-*-
#
-# Copyright © 2012-2013 Inria. All rights reserved.
+# Copyright © 2012-2014 Inria. All rights reserved.
# Copyright © 2010 Cisco Systems, Inc. All rights reserved.
# Copyright © 2011 Université Bordeaux 1
# See COPYING in top-level directory.
@@ -68,6 +68,8 @@ if ! ( cd "$tmpdir" && tar xfj save.tar.bz2 ) ; then
fi
export HWLOC_FSROOT="$tmpdir/save"
+rm -f "$tmpdir/save/proc/hwloc-nofile-info"
+
echo "Saving tarball topology to XML..."
if ! "$lstopo" --no-io "$tmpdir/save2.xml" ; then
error "Failed"
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in
index bffa794..c3a6356 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in
@@ -3,7 +3,7 @@
#
# Copyright © 2009 CNRS
-# Copyright © 2009-2013 Inria. All rights reserved.
+# Copyright © 2009-2014 Inria. All rights reserved.
# Copyright © 2009-2012 Université Bordeaux 1
# See COPYING in top-level directory.
#
@@ -22,6 +22,12 @@ export LANG LC_ALL
gatherio=0
+if [ ! -x "$lstopo" ]
+then
+ error "Could not find lstopo executable in the install or build dir."
+ exit 1
+fi
+
error()
{
echo $@ 2>&1
@@ -158,17 +164,18 @@ cat /proc/mounts | while read -r dummy1 mntpath mnttype mntopts dummy2 ; do
[ x$mnttype = xcgroup ] && echo $mntopts | grep -w cpuset >/dev/null && savemntpnt "$mntpath"
done
+# export /proc/hwloc-nofile-info during lstopo (needs HWLOC_DUMP_NOFILE_INFO with HWLOC_THISSYSTEM=1)
+export HWLOC_DUMP_NOFILE_INFO="$destdir/$basename/proc/hwloc-nofile-info"
+"$lstopo" - >/dev/null
+# disable HWLOC_DUMP_NOFILE_INFO for next lstopo invocation
+export HWLOC_DUMP_NOFILE_INFO=
+
# Create the archive and keep the tree in /tmp for testing
( cd "$destdir/" && tar cfj "$basename.tar.bz2" "$basename" )
mv "$destdir/$basename.tar.bz2" "$dirname/$basename.tar.bz2"
echo "Hierarchy gathered in $dirname/$basename.tar.bz2 and kept in $destdir/$basename/"
# Generate the output as well
-if [ ! -x "$lstopo" ]
-then
- error "Could not find lstopo executable in the install or build dir."
- exit 1
-fi
# we need "Topology not from this system" in the output so as to make test-topology.sh happy
export HWLOC_THISSYSTEM=0
"$lstopo" - -v > "$dirname/$basename.output"
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cuda/cuda_runtime_api.h b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cuda/cuda_runtime_api.h
index fcf8bb9..1c4b53c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cuda/cuda_runtime_api.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cuda/cuda_runtime_api.h
@@ -1,17 +1,30 @@
/*
- * Copyright © 2013 Inria. All rights reserved.
+ * Copyright © 2013-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
#ifndef HWLOC_PORT_CUDA_CUDA_RUNTIME_API_H
#define HWLOC_PORT_CUDA_CUDA_RUNTIME_API_H
+/* we need to replace any CUDA-related #define that configure may have put in private/autogen/config.h */
+#ifndef HWLOC_CONFIGURE_H
+#error cuda_runtime_api.h must be included after private/autogen/config.h
+#endif
+#undef HWLOC_HAVE_CUDA_L2CACHESIZE
+#define HWLOC_HAVE_CUDA_L2CACHESIZE 1
+
typedef unsigned cudaError_t;
struct cudaDeviceProp {
char * name;
int pciBusID;
int pciDeviceID;
+ size_t totalGlobalMem;
+ size_t sharedMemPerBlock;
+ int major;
+ int minor;
+ int l2CacheSize;
+ int multiProcessorCount;
};
cudaError_t cudaGetDeviceProperties(struct cudaDeviceProp *, int);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/opencl/CL/cl_ext.h b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/opencl/CL/cl_ext.h
index 8a347cb..953f23e 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/opencl/CL/cl_ext.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/opencl/CL/cl_ext.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2013 Inria. All rights reserved.
+ * Copyright © 2013-2014 Inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -7,6 +7,7 @@
#define HWLOC_PORT_OPENCL_CL_CL_EXT_H
typedef char cl_char;
+typedef unsigned long cl_ulong;
typedef unsigned int cl_uint;
typedef unsigned int cl_int;
typedef unsigned int cl_device_type;
@@ -33,6 +34,8 @@ cl_int clGetPlatformInfo(cl_platform_id, cl_platform_info, size_t, void *, size_
#define CL_PLATFORM_NAME 0x0902
#define CL_DEVICE_TYPE 0x1000
+#define CL_DEVICE_MAX_COMPUTE_UNITS 0x1002
+#define CL_DEVICE_GLOBAL_MEM_SIZE 0x101F
#define CL_DEVICE_NAME 0x102B
#define CL_DEVICE_VENDOR 0x102C
#define CL_DEVICE_PLATFORM 0x1031
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/solaris/sys/procset.h b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/solaris/sys/procset.h
index ab42eb2..3f2c811 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/solaris/sys/procset.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/solaris/sys/procset.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009 Université Bordeaux 1
* See COPYING in top-level directory.
*/
@@ -7,10 +7,17 @@
#ifndef HWLOC_PORT_SOLARIS_SYS_PROCSET_H
#define HWLOC_PORT_SOLARIS_SYS_PROCSET_H
-typedef enum idtype {
- P_PID,
- P_LWPID,
- P_MYID
-} idtype_t;
+#ifndef __ENUM_IDTYPE_T
+/* Linux doesn't have idtype_t unless __ENUM_IDTYPE_T is set */
+typedef int idtype_t;
+#ifndef P_PID
+/* If there's no idtype_t, P_PID could exist as a #define */
+#define P_PID 1
+#endif
+#endif
+
+/* Linux never has P_LWPID and P_MYID */
+#define P_LWPID 2
+#define P_MYID 3
#endif /* HWLOC_PORT_SOLARIS_SYS_PROCSET_H */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c
index 32ed71d..85f4c85 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c
@@ -43,7 +43,7 @@
#include "private/autogen/config.h"
#include "private/components.h"
-#include "private/cpuid.h"
+#include "private/cpuid-x86.h"
#include "private/debug.h"
#include "private/misc.h"
#include "private/private.h"
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in
index 1d85f6f..1a48641 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in
@@ -48,7 +48,7 @@ Report the current bindings.
When combined with \fB\-\-membind\fR, report the memory binding
instead of CPU binding.
.TP
-\fB\-\-get-last-cpu-location\fR
+\fB\-e\fR \fB\-\-get-last-cpu-location\fR
Report the last processors where the process ran.
Note that the result may already be outdated when reported since
the operating system may move the process to other processors
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c
index ed773b1..741eaef 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c
@@ -33,7 +33,7 @@ void usage(const char *name, FILE *where)
fprintf(where, " --single Bind on a single CPU to prevent migration\n");
fprintf(where, " --strict Require strict binding\n");
fprintf(where, " --get Retrieve current process binding\n");
- fprintf(where, " --get-last-cpu-location\n"
+ fprintf(where, " -e --get-last-cpu-location\n"
" Retrieve the last processors where the current process ran\n");
fprintf(where, " --pid <pid> Operate on process <pid>\n");
fprintf(where, " --taskset Use taskset-specific format when displaying cpuset strings\n");
@@ -67,7 +67,7 @@ int main(int argc, char *argv[])
int membind_flags = 0;
int opt;
int ret;
- int pid_number = 0;
+ int pid_number = -1;
hwloc_pid_t pid;
char *callname;
@@ -144,7 +144,7 @@ int main(int argc, char *argv[])
taskset = 1;
goto next;
}
- else if (!strncmp (argv[0], "--get-last-cpu-location", 10)) {
+ else if (!strcmp (argv[0], "-e") || !strncmp (argv[0], "--get-last-cpu-location", 10)) {
get_last_cpu_location = 1;
goto next;
}
@@ -233,7 +233,12 @@ int main(int argc, char *argv[])
argv += opt+1;
}
- pid = hwloc_pid_from_number(pid_number, !(get_binding || get_last_cpu_location));
+ if (pid_number > 0) {
+ pid = hwloc_pid_from_number(pid_number, !(get_binding || get_last_cpu_location));
+ /* no need to set_pid()
+ * the doc just says we're operating on pid, not that we're retrieving the topo/cpuset as seen from inside pid
+ */
+ }
if (get_binding || get_last_cpu_location) {
char *s;
@@ -241,19 +246,19 @@ int main(int argc, char *argv[])
int err;
if (working_on_cpubind) {
if (get_last_cpu_location) {
- if (pid_number)
+ if (pid_number > 0)
err = hwloc_get_proc_last_cpu_location(topology, pid, cpubind_set, 0);
else
err = hwloc_get_last_cpu_location(topology, cpubind_set, 0);
} else {
- if (pid_number)
+ if (pid_number > 0)
err = hwloc_get_proc_cpubind(topology, pid, cpubind_set, 0);
else
err = hwloc_get_cpubind(topology, cpubind_set, 0);
}
if (err) {
const char *errmsg = strerror(errno);
- if (pid_number)
+ if (pid_number > 0)
fprintf(stderr, "hwloc_get_proc_%s %d failed (errno %d %s)\n", get_last_cpu_location ? "last_cpu_location" : "cpubind", pid_number, errno, errmsg);
else
fprintf(stderr, "hwloc_get_%s failed (errno %d %s)\n", get_last_cpu_location ? "last_cpu_location" : "cpubind", errno, errmsg);
@@ -265,13 +270,13 @@ int main(int argc, char *argv[])
hwloc_bitmap_asprintf(&s, cpubind_set);
} else {
hwloc_membind_policy_t policy;
- if (pid_number)
+ if (pid_number > 0)
err = hwloc_get_proc_membind(topology, pid, membind_set, &policy, 0);
else
err = hwloc_get_membind(topology, membind_set, &policy, 0);
if (err) {
const char *errmsg = strerror(errno);
- if (pid_number)
+ if (pid_number > 0)
fprintf(stderr, "hwloc_get_proc_membind %d failed (errno %d %s)\n", pid_number, errno, errmsg);
else
fprintf(stderr, "hwloc_get_membind failed (errno %d %s)\n", errno, errmsg);
@@ -314,7 +319,7 @@ int main(int argc, char *argv[])
}
if (single)
hwloc_bitmap_singlify(membind_set);
- if (pid_number)
+ if (pid_number > 0)
ret = hwloc_set_proc_membind(topology, pid, membind_set, membind_policy, membind_flags);
else
ret = hwloc_set_membind(topology, membind_set, membind_policy, membind_flags);
@@ -323,7 +328,7 @@ int main(int argc, char *argv[])
const char *errmsg = strerror(bind_errno);
char *s;
hwloc_bitmap_asprintf(&s, membind_set);
- if (pid_number)
+ if (pid_number > 0)
fprintf(stderr, "hwloc_set_proc_membind %s %d failed (errno %d %s)\n", s, pid_number, bind_errno, errmsg);
else
fprintf(stderr, "hwloc_set_membind %s failed (errno %d %s)\n", s, bind_errno, errmsg);
@@ -348,7 +353,7 @@ int main(int argc, char *argv[])
}
if (single)
hwloc_bitmap_singlify(cpubind_set);
- if (pid_number)
+ if (pid_number > 0)
ret = hwloc_set_proc_cpubind(topology, pid, cpubind_set, cpubind_flags);
else
ret = hwloc_set_cpubind(topology, cpubind_set, cpubind_flags);
@@ -357,7 +362,7 @@ int main(int argc, char *argv[])
const char *errmsg = strerror(bind_errno);
char *s;
hwloc_bitmap_asprintf(&s, cpubind_set);
- if (pid_number)
+ if (pid_number > 0)
fprintf(stderr, "hwloc_set_proc_cpubind %s %d failed (errno %d %s)\n", s, pid_number, bind_errno, errmsg);
else
fprintf(stderr, "hwloc_set_cpubind %s failed (errno %d %s)\n", s, bind_errno, errmsg);
@@ -372,7 +377,7 @@ int main(int argc, char *argv[])
hwloc_topology_destroy(topology);
- if (pid_number)
+ if (pid_number > 0)
return EXIT_SUCCESS;
if (0 == argc) {
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c
index 0d91a27..bcd4b9b 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -161,9 +161,9 @@ hwloc_calc_output(hwloc_topology_t topology, const char *sep, hwloc_bitmap_t set
static int hwloc_calc_type_depth(const char *string, hwloc_obj_type_t *typep, int *depthp)
{
- hwloc_obj_type_t type = hwloc_obj_type_of_string(string);
+ hwloc_obj_type_t type = (hwloc_obj_type_t) -1; /* in case we match a depth */
int depth = -1;
- if (type == (hwloc_obj_type_t) -1) {
+ if (hwloc_obj_type_sscanf(string, &type, NULL, NULL, 0) < 0) {
char *endptr;
depth = strtoul(string, &endptr, 0);
if (*endptr)
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h
index 5a1dfc5..a1e7d36 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -85,79 +85,6 @@ hwloc_calc_get_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const
}
}
-/* extended version of hwloc_obj_type_of_string()
- *
- * matches L2, L3Cache and Group4, and return the corresponding depth attribute if depthattrp isn't NULL.
- * only looks at the beginning of the string to allow truncated type names.
- */
-static __hwloc_inline int
-hwloc_obj_type_sscanf(const char *string, hwloc_obj_type_t *typep, int *depthattrp, hwloc_obj_cache_type_t *cachetypeattrp)
-{
- hwloc_obj_type_t type = (hwloc_obj_type_t) -1;
- int depthattr = -1;
- hwloc_obj_cache_type_t cachetypeattr = (hwloc_obj_cache_type_t) -1; /* unspecified */
- char *end;
-
- /* types without depthattr */
- if (!hwloc_strncasecmp(string, "system", 2)) {
- type = HWLOC_OBJ_SYSTEM;
- } else if (!hwloc_strncasecmp(string, "machine", 2)) {
- type = HWLOC_OBJ_MACHINE;
- } else if (!hwloc_strncasecmp(string, "node", 1)) {
- type = HWLOC_OBJ_NODE;
- } else if (!hwloc_strncasecmp(string, "socket", 2)) {
- type = HWLOC_OBJ_SOCKET;
- } else if (!hwloc_strncasecmp(string, "core", 2)) {
- type = HWLOC_OBJ_CORE;
- } else if (!hwloc_strncasecmp(string, "pu", 2)) {
- type = HWLOC_OBJ_PU;
- } else if (!hwloc_strncasecmp(string, "misc", 2)) {
- type = HWLOC_OBJ_MISC;
- } else if (!hwloc_strncasecmp(string, "pci", 2)) {
- type = HWLOC_OBJ_PCI_DEVICE;
- } else if (!hwloc_strncasecmp(string, "os", 2)) {
- type = HWLOC_OBJ_OS_DEVICE;
-
- /* types with depthattr */
- } else if (!hwloc_strncasecmp(string, "cache", 2)) {
- type = HWLOC_OBJ_CACHE;
- } else if ((string[0] == 'l' || string[0] == 'L') && string[1] >= '0' && string[1] <= '9') {
- type = HWLOC_OBJ_CACHE;
- depthattr = strtol(string+1, &end, 10);
- if (*end == 'd') {
- cachetypeattr = HWLOC_OBJ_CACHE_DATA;
- end++;
- } else if (*end == 'i') {
- cachetypeattr = HWLOC_OBJ_CACHE_INSTRUCTION;
- end++;
- } else if (*end == 'u') {
- cachetypeattr = HWLOC_OBJ_CACHE_UNIFIED;
- end++;
- }
- if (*end && hwloc_strncasecmp(end, "cache", 2))
- return -1;
-
- } else if (!hwloc_strncasecmp(string, "group", 1)) {
- int length;
- type = HWLOC_OBJ_GROUP;
- length = strcspn(string, "0123456789");
- if (string[length] != '\0') {
- depthattr = strtol(string+length, &end, 10);
- if (*end)
- return -1;
- }
- } else
- return -1;
-
- *typep = type;
- if (depthattrp)
- *depthattrp = depthattr;
- if (cachetypeattrp)
- *cachetypeattrp = cachetypeattr;
-
- return 0;
-}
-
static __hwloc_inline int
hwloc_calc_depth_of_type(hwloc_topology_t topology, hwloc_obj_type_t type,
int depthattr, hwloc_obj_cache_type_t cachetype /* -1 if not specified */,
@@ -242,7 +169,7 @@ hwloc_calc_parse_depth_prefix(hwloc_topology_t topology, unsigned topodepth,
typestring[typelen] = '\0';
/* try to match a type name */
- err = hwloc_obj_type_sscanf(typestring, &type, &depthattr, &cachetypeattr);
+ err = hwloc_obj_type_sscanf(typestring, &type, &depthattr, &cachetypeattr, sizeof(cachetypeattr));
if (!err) {
*typep = type;
return hwloc_calc_depth_of_type(topology, type, depthattr, cachetypeattr, verbose);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in
index be79db2..a11265c 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2010-2013 Inria. All rights reserved.
+.\" Copyright © 2010-2014 Inria. All rights reserved.
.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
.\" See COPYING in top-level directory.
.TH HWLOC-DISTRIB "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
@@ -62,12 +62,17 @@ above.
Distribute down to objects of the given type instead of down to the bottom of
the topology hierarchy, i.e. ignoring the structure given by objects below.
This may be useful if some latitude is desired for the binding, e.g. just bind
-on sockets and not to precise cores or caches.
+several processes to each socket without specifying a single core for each
+of them.
.TP
\fB\-\-at\fR <type>
Distribute among objects of the given type. This is equivalent to specifying
both \fB\-\-from\fR and \fB\-\-to\fR at the same time.
.TP
+\fB\-\-reverse\fR
+Distribute by starting with the last objects first,
+and singlify CPU sets by keeping the last bit (instead of the first bit).
+.TP
\fB\-\-restrict\fR <cpuset>
Restrict the topology to the given cpuset.
.TP
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c
index b04c15b..50e22b2 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -23,6 +23,7 @@ void usage(const char *callname __hwloc_attribute_unused, FILE *where)
fprintf(where, " --from <type> Distribute starting from objects of the given type\n");
fprintf(where, " --to <type> Distribute down to objects of the given type\n");
fprintf(where, " --at <type> Distribute among objects of the given type\n");
+ fprintf(where, " --reverse Distribute by starting from last objects\n");
fprintf(where, "Input topology options:\n");
fprintf(where, " --restrict <set> Restrict the topology to processors listed in <set>\n");
fprintf(where, " --whole-system Do not consider administration limitations\n");
@@ -48,6 +49,7 @@ int main(int argc, char *argv[])
hwloc_obj_type_t from_type = (hwloc_obj_type_t) -1, to_type = (hwloc_obj_type_t) -1;
hwloc_topology_t topology;
unsigned long flags = 0;
+ unsigned long dflags = 0;
int opt;
int err;
@@ -103,11 +105,10 @@ int main(int argc, char *argv[])
usage(callname, stdout);
exit(EXIT_FAILURE);
}
- type = hwloc_obj_type_of_string(argv[1]);
- if (type != (hwloc_obj_type_t) -1)
- hwloc_topology_ignore_type(topology, type);
- else
+ if (hwloc_obj_type_sscanf(argv[1], &type, NULL, NULL, 0) < 0)
fprintf(stderr, "Unsupported type `%s' passed to --ignore, ignoring.\n", argv[1]);
+ else
+ hwloc_topology_ignore_type(topology, type);
argc--;
argv++;
goto next;
@@ -117,8 +118,7 @@ int main(int argc, char *argv[])
usage(callname, stdout);
exit(EXIT_FAILURE);
}
- from_type = hwloc_obj_type_of_string(argv[1]);
- if (from_type == (hwloc_obj_type_t) -1)
+ if (hwloc_obj_type_sscanf(argv[1], &from_type, NULL, NULL, 0) < 0)
fprintf(stderr, "Unsupported type `%s' passed to --from, ignoring.\n", argv[1]);
argc--;
argv++;
@@ -129,8 +129,7 @@ int main(int argc, char *argv[])
usage(callname, stdout);
exit(EXIT_FAILURE);
}
- to_type = hwloc_obj_type_of_string(argv[1]);
- if (to_type == (hwloc_obj_type_t) -1)
+ if (hwloc_obj_type_sscanf(argv[1], &to_type, NULL, NULL, 0) < 0)
fprintf(stderr, "Unsupported type `%s' passed to --to, ignoring.\n", argv[1]);
argc--;
argv++;
@@ -141,11 +140,17 @@ int main(int argc, char *argv[])
usage(callname, stdout);
exit(EXIT_FAILURE);
}
- from_type = to_type = hwloc_obj_type_of_string(argv[1]);
+ if (hwloc_obj_type_sscanf(argv[1], &to_type, NULL, NULL, 0) < 0)
+ fprintf(stderr, "Unsupported type `%s' passed to --at, ignoring.\n", argv[1]);
+ from_type = to_type;
argc--;
argv++;
goto next;
}
+ else if (!strcmp (argv[0], "--reverse")) {
+ dflags |= HWLOC_DISTRIB_FLAG_REVERSE;
+ goto next;
+ }
else if (!strcmp (argv[0], "--restrict")) {
if (argc < 2) {
usage (callname, stdout);
@@ -250,12 +255,18 @@ int main(int argc, char *argv[])
for (i = 0; i < chunks; i++)
roots[i] = hwloc_get_obj_by_depth(topology, from_depth, i);
- hwloc_distributev(topology, roots, chunks, cpuset, n, to_depth);
+ hwloc_distrib(topology, roots, chunks, cpuset, n, to_depth, dflags);
for (i = 0; (long) i < n; i++) {
char *str = NULL;
- if (singlify)
- hwloc_bitmap_singlify(cpuset[i]);
+ if (singlify) {
+ if (dflags & HWLOC_DISTRIB_FLAG_REVERSE) {
+ unsigned last = hwloc_bitmap_last(cpuset[i]);
+ hwloc_bitmap_only(cpuset[i], last);
+ } else {
+ hwloc_bitmap_singlify(cpuset[i]);
+ }
+ }
if (taskset)
hwloc_bitmap_taskset_asprintf(&str, cpuset[i]);
else
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-info.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-info.c
index 96e225a..6c6eb26 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-info.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-info.c
@@ -226,6 +226,7 @@ hwloc_calc_process_arg_info_cb(void *_data __hwloc_attribute_unused,
goto next;
if (parent->type == HWLOC_OBJ_CACHE
&& show_ancestor_attrcachetype != (hwloc_obj_cache_type_t) -1
+ && parent->attr->cache.type != HWLOC_OBJ_CACHE_UNIFIED
&& show_ancestor_attrcachetype != parent->attr->cache.type)
goto next;
hwloc_obj_type_snprintf(parents, sizeof(parents), parent, 1);
@@ -303,7 +304,7 @@ main (int argc, char *argv[])
usage (callname, stderr);
exit(EXIT_FAILURE);
}
- err = hwloc_obj_type_sscanf(argv[1], &show_ancestor_type, &show_ancestor_attrdepth, &show_ancestor_attrcachetype);
+ err = hwloc_obj_type_sscanf(argv[1], &show_ancestor_type, &show_ancestor_attrdepth, &show_ancestor_attrcachetype, sizeof(show_ancestor_attrcachetype));
if (err < 0) {
fprintf(stderr, "unrecognized --ancestor type %s\n", argv[1]);
usage(callname, stderr);
@@ -373,7 +374,7 @@ main (int argc, char *argv[])
return err;
}
- if (pid_number != -1 && pid_number != 0) {
+ if (pid_number > 0) {
pid = hwloc_pid_from_number(pid_number, 0);
if (hwloc_topology_set_pid(topology, pid)) {
perror("Setting target pid");
@@ -390,7 +391,7 @@ main (int argc, char *argv[])
if (restrictstring) {
hwloc_bitmap_t restrictset = hwloc_bitmap_alloc();
if (!strcmp (restrictstring, "binding")) {
- if (pid_number != -1 && pid_number != 0)
+ if (pid_number > 0)
hwloc_get_proc_cpubind(topology, pid, restrictset, HWLOC_CPUBIND_PROCESS);
else
hwloc_get_cpubind(topology, restrictset, HWLOC_CPUBIND_PROCESS);
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in
index 7fe73e2..124cf5f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in
@@ -39,6 +39,12 @@ If \fB\-a\fR is given as well, list all threads within each process.
Otherwise, show all threads inside each process where at least one
thread is bound.
.TP
+\fB\-e\fR \fB\-\-get\-last\-cpu\-location\fR
+Report the last processors where the process/thread ran.
+Note that the result may already be outdated when reported
+since the operating system may move the tasks to other processors
+at any time according to the binding.
+.TP
\fB\-\-whole\-system\fR
Do not consider administration limitations.
.TP
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c
index 04c42a7..6c3fe50 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c
@@ -33,6 +33,8 @@ void usage(const char *name, FILE *where)
fprintf (where, " -p --physical Use physical object indexes\n");
fprintf (where, " -c --cpuset Show cpuset instead of objects\n");
fprintf (where, " -t --threads Show threads\n");
+ fprintf (where, " -e --get-last-cpu-location\n");
+ fprintf (where, " Retrieve the last processors where the tasks ran\n");
fprintf (where, " --pid-cmd <cmd> Append the output of <cmd> <pid> to each PID line\n");
fprintf (where, " --whole-system Do not consider administration limitations\n");
}
@@ -56,6 +58,9 @@ static void print_task(hwloc_topology_t topology,
char type[64];
unsigned idx;
hwloc_obj_t obj = hwloc_get_first_largest_obj_inside_cpuset(topology, remaining);
+ /* don't show a cache if there's something equivalent and nicer */
+ while (obj->type == HWLOC_OBJ_CACHE && obj->arity == 1)
+ obj = obj->first_child;
hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
idx = logical ? obj->logical_index : obj->os_index;
if (idx == (unsigned) -1)
@@ -82,6 +87,7 @@ int main(int argc, char *argv[])
struct dirent *dirent;
int show_all = 0;
int show_threads = 0;
+ int get_last_cpu_location = 0;
char *callname;
char *pidcmd = NULL;
int err;
@@ -106,6 +112,8 @@ int main(int argc, char *argv[])
logical = 0;
} else if (!strcmp(argv[0], "-c") || !strcmp(argv[0], "--cpuset")) {
show_cpuset = 1;
+ } else if (!strcmp(argv[0], "-e") || !strncmp(argv[0], "--get-last-cpu-location", 10)) {
+ get_last_cpu_location = 1;
} else if (!strcmp(argv[0], "-t") || !strcmp(argv[0], "--threads")) {
#ifdef HWLOC_LINUX_SYS
show_threads = 1;
@@ -142,8 +150,13 @@ int main(int argc, char *argv[])
support = hwloc_topology_get_support(topology);
- if (!support->cpubind->get_thisproc_cpubind)
- goto out_with_topology;
+ if (get_last_cpu_location) {
+ if (!support->cpubind->get_proc_last_cpu_location)
+ goto out_with_topology;
+ } else {
+ if (!support->cpubind->get_proc_cpubind)
+ goto out_with_topology;
+ }
topocpuset = hwloc_topology_get_topology_cpuset(topology);
@@ -233,8 +246,13 @@ int main(int argc, char *argv[])
if (*end)
/* Not a number */
continue;
- if (hwloc_linux_get_tid_cpubind(topology, tid, cpuset))
- continue;
+ if (get_last_cpu_location) {
+ if (hwloc_linux_get_tid_last_cpu_location(topology, tid, cpuset))
+ continue;
+ } else {
+ if (hwloc_linux_get_tid_cpubind(topology, tid, cpuset))
+ continue;
+ }
hwloc_bitmap_and(cpuset, cpuset, topocpuset);
tids[i] = tid;
tidcpusets[i] = hwloc_bitmap_dup(cpuset);
@@ -256,8 +274,13 @@ int main(int argc, char *argv[])
#endif /* HWLOC_LINUX_SYS */
}
- if (hwloc_get_proc_cpubind(topology, pid, cpuset, 0))
- continue;
+ if (get_last_cpu_location) {
+ if (hwloc_get_proc_last_cpu_location(topology, pid, cpuset, 0))
+ continue;
+ } else {
+ if (hwloc_get_proc_cpubind(topology, pid, cpuset, 0))
+ continue;
+ }
hwloc_bitmap_and(cpuset, cpuset, topocpuset);
if (hwloc_bitmap_iszero(cpuset))
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c
index a4a68ad..d1fc950 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2012 Inria. All rights reserved.
- * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009-2014 Inria. All rights reserved.
+ * Copyright © 2009-2010, 2014 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -181,6 +181,8 @@ x11_start(void *output __hwloc_attribute_unused, int width, int height)
root = RootWindow(dpy, scr);
disp->top = top = XCreateSimpleWindow(dpy, root, 0, 0, screen_width, screen_height, 0, WhitePixel(dpy, scr), WhitePixel(dpy, scr));
+ XStoreName(dpy, top, "lstopo");
+ XSetIconName(dpy, top, "lstopo");
XSelectInput(dpy,top, StructureNotifyMask);
XMapWindow(dpy, top);
@@ -246,7 +248,7 @@ move_x11(struct display *disp, int logical, int legend, hwloc_topology_t topolog
}
void
-output_x11(hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+output_x11(hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int overwrite __hwloc_attribute_unused, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
struct display *disp = output_draw_start(&x11_draw_methods, logical, legend, topology, NULL);
int finish = 0;
@@ -386,9 +388,9 @@ static struct draw_methods png_draw_methods = {
};
void
-output_png(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+output_png(hwloc_topology_t topology, const char *filename, int overwrite, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
- FILE *output = open_file(filename, "w");
+ FILE *output = open_output(filename, overwrite);
cairo_surface_t *cs;
if (!output) {
@@ -425,9 +427,9 @@ static struct draw_methods pdf_draw_methods = {
};
void
-output_pdf(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+output_pdf(hwloc_topology_t topology, const char *filename, int overwrite, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
- FILE *output = open_file(filename, "w");
+ FILE *output = open_output(filename, overwrite);
cairo_surface_t *cs;
if (!output) {
@@ -464,9 +466,9 @@ static struct draw_methods ps_draw_methods = {
};
void
-output_ps(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+output_ps(hwloc_topology_t topology, const char *filename, int overwrite, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
- FILE *output = open_file(filename, "w");
+ FILE *output = open_output(filename, overwrite);
cairo_surface_t *cs;
if (!output) {
@@ -503,12 +505,12 @@ static struct draw_methods svg_draw_methods = {
};
void
-output_svg(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+output_svg(hwloc_topology_t topology, const char *filename, int overwrite, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
FILE *output;
cairo_surface_t *cs;
- output = open_file(filename, "w");
+ output = open_output(filename, overwrite);
if (!output) {
fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
return;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c
index 9021efc..6822612 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2013 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -618,11 +618,85 @@ os_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_m
unsigned totwidth = gridsize;
struct style style;
int n;
+ unsigned nmorelines = 0, i;
+ char morelines[3][64];
if (fontsize) {
+ if (HWLOC_OBJ_OSDEV_COPROC == level->attr->osdev.type) {
+ const char *coproctype = hwloc_obj_get_info_by_name(level, "CoProcType");
+
+ if (!strcmp(coproctype, "CUDA")) {
+ const char *value, *value2, *value3;
+
+ value = hwloc_obj_get_info_by_name(level, "CUDAGlobalMemorySize");
+ if (value) {
+ unsigned long long mb = strtoull(value, NULL, 10) / 1024;
+ snprintf(morelines[nmorelines], sizeof(morelines[0]),
+ mb >= 10240 ? "%llu GB" : "%llu MB",
+ mb >= 10240 ? mb/1024 : mb);
+ nmorelines++;
+ }
+
+ value = hwloc_obj_get_info_by_name(level, "CUDAL2CacheSize");
+ if (value) {
+ unsigned long long kb = strtoull(value, NULL, 10);
+ snprintf(morelines[nmorelines], sizeof(morelines[0]),
+ kb >= 10240 ? "L2 (%llu MB)" : "L2 (%llu kB)",
+ kb >= 10240 ? kb/1024 : kb);
+ nmorelines++;
+ }
+
+ value = hwloc_obj_get_info_by_name(level, "CUDAMultiProcessors");
+ value2 = hwloc_obj_get_info_by_name(level, "CUDACoresPerMP");
+ value3 = hwloc_obj_get_info_by_name(level, "CUDASharedMemorySizePerMP");
+ if (value && value2 && value3) {
+ snprintf(morelines[nmorelines], sizeof(morelines[0]), "%s MP x (%s cores + %s kB)", value, value2, value3);
+ nmorelines++;
+ }
+
+ } else if (!strcmp(coproctype, "MIC")) {
+ const char *value;
+ value = hwloc_obj_get_info_by_name(level, "MICActiveCores");
+ if (value) {
+ snprintf(morelines[nmorelines], sizeof(morelines[0]), "%s cores", value);
+ nmorelines++;
+ }
+ value = hwloc_obj_get_info_by_name(level, "MICMemorySize");
+ if (value) {
+ unsigned long long mb = strtoull(value, NULL, 10) / 1024;
+ snprintf(morelines[nmorelines], sizeof(morelines[0]),
+ mb >= 10240 ? "%llu GB" : "%llu MB",
+ mb >= 10240 ? mb/1024 : mb);
+ nmorelines++;
+ }
+
+ } else if (!strcmp(coproctype, "OpenCL")) {
+ const char *value;
+ value = hwloc_obj_get_info_by_name(level, "OpenCLComputeUnits");
+ if (value) {
+ unsigned long long cu = strtoull(value, NULL, 10);
+ snprintf(morelines[nmorelines], sizeof(morelines[0]), "%llu compute units", cu);
+ nmorelines++;
+ }
+ value = hwloc_obj_get_info_by_name(level, "OpenCLGlobalMemorySize");
+ if (value) {
+ unsigned long long mb = strtoull(value, NULL, 10) / 1024;
+ snprintf(morelines[nmorelines], sizeof(morelines[0]),
+ mb >= 10240 ? "%llu GB" : "%llu MB",
+ mb >= 10240 ? mb/1024 : mb);
+ nmorelines++;
+ }
+ }
+ }
+
n = strlen(level->name);
+ for(i=0; i<nmorelines; i++) {
+ int nn = strlen(morelines[i]);
+ if (nn > n)
+ n = nn;
+ }
textwidth = (n * fontsize * 3) / 4;
- totheight = gridsize + fontsize + gridsize;
+ totheight = gridsize + (fontsize + gridsize)*(nmorelines+1);
totwidth = gridsize + textwidth + gridsize;
}
@@ -632,8 +706,11 @@ os_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_m
lstopo_set_object_color(methods, topology, level, 0, &style);
methods->box(output, style.bg.r, style.bg.g, style.bg.b, depth, x, *retwidth, y, *retheight);
- if (fontsize)
+ if (fontsize) {
methods->text(output, style.t.r, style.t.g, style.t.b, fontsize, depth-1, x + gridsize, y + gridsize, level->name);
+ for(i=0; i<nmorelines; i++)
+ methods->text(output, style.t.r, style.t.g, style.t.b, fontsize, depth-1, x + gridsize, y + (i+2)*gridsize + (i+1)*fontsize, morelines[i]);
+ }
}
static void
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c
index 801e3f8..636dca7 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -116,9 +116,9 @@ static struct draw_methods fig_draw_methods = {
};
void
-output_fig (hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+output_fig (hwloc_topology_t topology, const char *filename, int overwrite, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
- FILE *output = open_file(filename, "w");
+ FILE *output = open_output(filename, overwrite);
if (!output) {
fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
return;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c
index 64369f7..5d6c27f 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -143,19 +143,15 @@ output_only (hwloc_topology_t topology, hwloc_obj_t l, FILE *output, int logical
output_only (topology, l->children[x], output, logical, verbose_mode);
}
-void output_console(hwloc_topology_t topology, const char *filename, int logical, int legend __hwloc_attribute_unused, int verbose_mode)
+void output_console(hwloc_topology_t topology, const char *filename, int overwrite, int logical, int legend __hwloc_attribute_unused, int verbose_mode)
{
unsigned topodepth;
FILE *output;
- if (!filename || !strcmp(filename, "-"))
- output = stdout;
- else {
- output = open_file(filename, "w");
- if (!output) {
- fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
- return;
- }
+ output = open_output(filename, overwrite);
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
}
topodepth = hwloc_topology_get_depth(topology);
@@ -251,7 +247,7 @@ void output_console(hwloc_topology_t topology, const char *filename, int logical
fclose(output);
}
-void output_synthetic(hwloc_topology_t topology, const char *filename, int logical __hwloc_attribute_unused, int legend __hwloc_attribute_unused, int verbose_mode __hwloc_attribute_unused)
+void output_synthetic(hwloc_topology_t topology, const char *filename, int overwrite, int logical __hwloc_attribute_unused, int legend __hwloc_attribute_unused, int verbose_mode __hwloc_attribute_unused)
{
FILE *output;
hwloc_obj_t obj = hwloc_get_root_obj(topology);
@@ -263,20 +259,18 @@ void output_synthetic(hwloc_topology_t topology, const char *filename, int logic
return;
}
- if (!filename || !strcmp(filename, "-"))
- output = stdout;
- else {
- output = open_file(filename, "w");
- if (!output) {
- fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
- return;
- }
+ output = open_output(filename, overwrite);
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
}
arity = obj->arity;
while (arity) {
+ char types[64];
obj = obj->first_child;
- fprintf(output, "%s:%u ", hwloc_obj_type_string(obj->type), arity);
+ hwloc_obj_type_snprintf(types, sizeof(types), obj, 1);
+ fprintf(output, "%s:%u ", types, arity);
arity = obj->arity;
}
fprintf(output, "\n");
@@ -661,7 +655,7 @@ text_text(void *output, int r, int g, int b, int size __hwloc_attribute_unused,
x /= (gridsize/2);
y /= gridsize;
-#if defined(HAVE_PUTWC) && !defined(__MINGW32__)
+#if defined(HAVE_PUTWC) && !defined(__MINGW32__) && !defined(_MSC_VER)
{
size_t len = strlen(text) + 1;
wchar_t *wbuf = malloc(len * sizeof(wchar_t)), *wtext;
@@ -684,7 +678,7 @@ static struct draw_methods text_draw_methods = {
text_text,
};
-void output_text(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+void output_text(hwloc_topology_t topology, const char *filename, int overwrite, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
FILE *output;
struct display *disp;
@@ -696,14 +690,10 @@ void output_text(hwloc_topology_t topology, const char *filename, int logical, i
char *tmp;
#endif
- if (!filename || !strcmp(filename, "-"))
- output = stdout;
- else {
- output = open_file(filename, "w");
- if (!output) {
- fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
- return;
- }
+ output = open_output(filename, overwrite);
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
}
/* Try to use utf-8 characters */
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c
index 60baeca..b3b27ca 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2010, 2012 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -291,7 +291,7 @@ struct draw_methods windows_draw_methods = {
};
void
-output_windows (hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+output_windows (hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int overwrite __hwloc_attribute_unused, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
{
HWND toplevel;
MSG msg;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c
index 288f310..c8a336a 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -10,13 +10,22 @@
#include <hwloc.h>
#include <string.h>
+#include <sys/stat.h>
#include "lstopo.h"
-void output_xml(hwloc_topology_t topology, const char *filename, int logical __hwloc_attribute_unused, int legend __hwloc_attribute_unused, int verbose_mode __hwloc_attribute_unused)
+void output_xml(hwloc_topology_t topology, const char *filename, int overwrite, int logical __hwloc_attribute_unused, int legend __hwloc_attribute_unused, int verbose_mode __hwloc_attribute_unused)
{
+ struct stat st;
+
if (!filename || !strcasecmp(filename, "-.xml"))
filename = "-";
+ /* hwloc_topology_export_xml() writes to stdout if "-" is given */
+
+ if (strcmp(filename, "-") && !stat(filename, &st) && !overwrite) {
+ fprintf(stderr, "Failed to export XML to %s (%s)\n", filename, strerror(EEXIST));
+ return;
+ }
if (hwloc_topology_export_xml(topology, filename) < 0) {
fprintf(stderr, "Failed to export XML to %s (%s)\n", filename, strerror(errno));
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in
index 6fe1035..3e4ebe9 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in
@@ -1,5 +1,5 @@
.\" -*- nroff -*-
-.\" Copyright © 2009-2013 Inria. All rights reserved.
+.\" Copyright © 2009-2014 Inria. All rights reserved.
.\" Copyright © 2009-2010 Université of Bordeaux
.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
.\" See COPYING in top-level directory.
@@ -63,6 +63,9 @@ about specific objects.
\fB\-s\fR \fB\-\-silent\fR
Reduce the amount of details to show.
.TP
+\fB\s\fR \fB\-\-force\fR
+If the destination file already exists, overwrite it.
+.TP
\fB\-l\fR \fB\-\-logical\fR
Display hwloc logical indexes instead of physical/OS indexes (default for console output).
These indexes are prefixed with "L#".
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c
index 8dd3501..5651265 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -19,6 +19,7 @@
#include <dirent.h>
#endif
#include <fcntl.h>
+#include <sys/stat.h>
#include <assert.h>
#ifdef LSTOPO_HAVE_GRAPHICS
@@ -48,22 +49,29 @@ unsigned int fontsize = 10;
unsigned int gridsize = 10;
enum lstopo_orient_e force_orient[HWLOC_OBJ_TYPE_MAX];
+static int overwrite = 0;
static int logical = -1;
static unsigned int legend = 1;
static unsigned int top = 0;
-FILE *open_file(const char *filename, const char *mode)
+FILE *open_output(const char *filename, int overwrite)
{
const char *extn;
+ struct stat st;
- if (!filename)
+ if (!filename || !strcmp(filename, "-"))
return stdout;
extn = strrchr(filename, '.');
if (filename[0] == '-' && extn == filename + 1)
return stdout;
- return fopen(filename, mode);
+ if (!stat(filename, &st) && !overwrite) {
+ errno = EEXIST;
+ return NULL;
+ }
+
+ return fopen(filename, "w");
}
static hwloc_obj_t insert_task(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const char * name)
@@ -109,7 +117,7 @@ static void add_process_objects(hwloc_topology_t topology)
support = hwloc_topology_get_support(topology);
- if (!support->cpubind->get_thisproc_cpubind)
+ if (!support->cpubind->get_proc_cpubind)
return;
dir = opendir("/proc");
@@ -251,6 +259,7 @@ void usage(const char *name, FILE *where)
fprintf (where, "Output options:\n");
fprintf (where, " --output-format <format>\n");
fprintf (where, " --of <format> Force the output to use the given format\n");
+ fprintf (where, " -f --force Overwrite the output file if it exists\n");
fprintf (where, "Textual output options:\n");
fprintf (where, " --only <type> Only show objects of the given type in the textual output\n");
fprintf (where, " -v --verbose Include additional details\n");
@@ -388,7 +397,9 @@ main (int argc, char *argv[])
} else if (!strcmp (argv[0], "-h") || !strcmp (argv[0], "--help")) {
usage(callname, stdout);
exit(EXIT_SUCCESS);
- } else if (!strcmp (argv[0], "-l") || !strcmp (argv[0], "--logical"))
+ } else if (!strcmp (argv[0], "-f") || !strcmp (argv[0], "--force"))
+ overwrite = 1;
+ else if (!strcmp (argv[0], "-l") || !strcmp (argv[0], "--logical"))
logical = 1;
else if (!strcmp (argv[0], "-p") || !strcmp (argv[0], "--physical"))
logical = 0;
@@ -405,8 +416,7 @@ main (int argc, char *argv[])
usage (callname, stderr);
exit(EXIT_FAILURE);
}
- lstopo_show_only = hwloc_obj_type_of_string(argv[1]);
- if (lstopo_show_only == (hwloc_obj_type_t) -1)
+ if (hwloc_obj_type_sscanf(argv[1], &lstopo_show_only, NULL, NULL, 0) < 0)
fprintf(stderr, "Unsupported type `%s' passed to --only, ignoring.\n", argv[1]);
opt = 1;
}
@@ -416,8 +426,7 @@ main (int argc, char *argv[])
usage (callname, stderr);
exit(EXIT_FAILURE);
}
- type = hwloc_obj_type_of_string(argv[1]);
- if (type == (hwloc_obj_type_t) -1)
+ if (hwloc_obj_type_sscanf(argv[1], &type, NULL, NULL, 0) < 0)
fprintf(stderr, "Unsupported type `%s' passed to --ignore, ignoring.\n", argv[1]);
else if (type == HWLOC_OBJ_PU)
lstopo_ignore_pus = 1;
@@ -467,11 +476,10 @@ main (int argc, char *argv[])
hwloc_obj_type_t type;
if (end)
*end = '\0';
- type = hwloc_obj_type_of_string(tmp);
- if (type != (hwloc_obj_type_t) -1)
- force_orient[type] = orient;
- else
+ if (hwloc_obj_type_sscanf(tmp, &type, NULL, NULL, 0) < 0)
fprintf(stderr, "Unsupported type `%s' passed to %s, ignoring.\n", tmp, argv[0]);
+ else
+ force_orient[type] = orient;
if (!end)
break;
tmp = end+1;
@@ -562,7 +570,7 @@ main (int argc, char *argv[])
return err;
}
- if (lstopo_pid_number != -1 && lstopo_pid_number != 0) {
+ if (lstopo_pid_number > 0) {
lstopo_pid = hwloc_pid_from_number(lstopo_pid_number, 0);
if (hwloc_topology_set_pid(topology, lstopo_pid)) {
perror("Setting target pid");
@@ -582,7 +590,7 @@ main (int argc, char *argv[])
if (restrictstring) {
hwloc_bitmap_t restrictset = hwloc_bitmap_alloc();
if (!strcmp (restrictstring, "binding")) {
- if (lstopo_pid_number != -1 && lstopo_pid_number != 0)
+ if (lstopo_pid_number > 0)
hwloc_get_proc_cpubind(topology, lstopo_pid, restrictset, HWLOC_CPUBIND_PROCESS);
else
hwloc_get_cpubind(topology, restrictset, HWLOC_CPUBIND_PROCESS);
@@ -636,14 +644,14 @@ main (int argc, char *argv[])
if (getenv("DISPLAY")) {
if (logical == -1)
logical = 0;
- output_x11(topology, NULL, logical, legend, verbose_mode);
+ output_x11(topology, NULL, overwrite, logical, legend, verbose_mode);
} else
#endif /* CAIRO_HAS_XLIB_SURFACE */
#ifdef HWLOC_WIN_SYS
{
if (logical == -1)
logical = 0;
- output_windows(topology, NULL, logical, legend, verbose_mode);
+ output_windows(topology, NULL, overwrite, logical, legend, verbose_mode);
}
#endif
#endif /* !LSTOPO_HAVE_GRAPHICS */
@@ -651,47 +659,47 @@ main (int argc, char *argv[])
{
if (logical == -1)
logical = 1;
- output_console(topology, NULL, logical, legend, verbose_mode);
+ output_console(topology, NULL, overwrite, logical, legend, verbose_mode);
}
#endif
break;
case LSTOPO_OUTPUT_CONSOLE:
- output_console(topology, filename, logical, legend, verbose_mode);
+ output_console(topology, filename, overwrite, logical, legend, verbose_mode);
break;
case LSTOPO_OUTPUT_SYNTHETIC:
- output_synthetic(topology, filename, logical, legend, verbose_mode);
+ output_synthetic(topology, filename, overwrite, logical, legend, verbose_mode);
break;
case LSTOPO_OUTPUT_TEXT:
- output_text(topology, filename, logical, legend, verbose_mode);
+ output_text(topology, filename, overwrite, logical, legend, verbose_mode);
break;
case LSTOPO_OUTPUT_FIG:
- output_fig(topology, filename, logical, legend, verbose_mode);
+ output_fig(topology, filename, overwrite, logical, legend, verbose_mode);
break;
#ifdef LSTOPO_HAVE_GRAPHICS
# if CAIRO_HAS_PNG_FUNCTIONS
case LSTOPO_OUTPUT_PNG:
- output_png(topology, filename, logical, legend, verbose_mode);
+ output_png(topology, filename, overwrite, logical, legend, verbose_mode);
break;
# endif /* CAIRO_HAS_PNG_FUNCTIONS */
# if CAIRO_HAS_PDF_SURFACE
case LSTOPO_OUTPUT_PDF:
- output_pdf(topology, filename, logical, legend, verbose_mode);
+ output_pdf(topology, filename, overwrite, logical, legend, verbose_mode);
break;
# endif /* CAIRO_HAS_PDF_SURFACE */
# if CAIRO_HAS_PS_SURFACE
case LSTOPO_OUTPUT_PS:
- output_ps(topology, filename, logical, legend, verbose_mode);
+ output_ps(topology, filename, overwrite, logical, legend, verbose_mode);
break;
#endif /* CAIRO_HAS_PS_SURFACE */
#if CAIRO_HAS_SVG_SURFACE
case LSTOPO_OUTPUT_SVG:
- output_svg(topology, filename, logical, legend, verbose_mode);
+ output_svg(topology, filename, overwrite, logical, legend, verbose_mode);
break;
#endif /* CAIRO_HAS_SVG_SURFACE */
#endif /* LSTOPO_HAVE_GRAPHICS */
case LSTOPO_OUTPUT_XML:
- output_xml(topology, filename, logical, legend, verbose_mode);
+ output_xml(topology, filename, overwrite, logical, legend, verbose_mode);
break;
default:
fprintf(stderr, "file format not supported\n");
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h
index cf0f52a..9747447 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2013 Inria. All rights reserved.
+ * Copyright © 2009-2014 Inria. All rights reserved.
* Copyright © 2009-2010, 2012 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -20,9 +20,9 @@ extern hwloc_pid_t lstopo_pid;
extern char ** lstopo_append_legends;
extern unsigned lstopo_append_legends_nr;
-typedef void output_method (struct hwloc_topology *topology, const char *output, int logical, int legend, int verbose_mode);
+typedef void output_method (struct hwloc_topology *topology, const char *output, int overwrite, int logical, int legend, int verbose_mode);
-FILE *open_file(const char *filename, const char *mode) __hwloc_attribute_malloc;
+FILE *open_output(const char *filename, int overwrite) __hwloc_attribute_malloc;
extern output_method output_console, output_synthetic, output_text, output_x11, output_fig, output_png, output_pdf, output_ps, output_svg, output_windows, output_xml;
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output
index 35fb98d..b74d5a3 100644
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output
@@ -50,3 +50,18 @@
0x00000038
0x0003fe00
0x07fc0000
+
+0x00000001
+0x00000008
+0x00000200
+0x00040000
+
+0x07000000
+0x00e00000
+0x0003fe00
+0x000001ff
+
+0x04000000
+0x00800000
+0x00020000
+0x00000100
diff --git a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in
index f820757..c2d7276 100755
--- a/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in
+++ b/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in
@@ -3,7 +3,7 @@
#
# Copyright © 2009 CNRS
-# Copyright © 2009-2013 Inria. All rights reserved.
+# Copyright © 2009-2014 Inria. All rights reserved.
# Copyright © 2009 Université Bordeaux 1
# See COPYING in top-level directory.
#
@@ -40,6 +40,12 @@ set -e
$distrib --if synthetic --input "2 2 2" 16
echo
$distrib --if synthetic --input "3 3 3" 4
+ echo
+ $distrib --if synthetic --input "3 3 3" 4 --single
+ echo
+ $distrib --if synthetic --input "3 3 3" 4 --reverse
+ echo
+ $distrib --if synthetic --input "3 3 3" 4 --reverse --single
) > "$file"
diff @HWLOC_DIFF_U@ $HWLOC_top_srcdir/utils/test-hwloc-distrib.output "$file"
rm -rf "$tmp"
-----------------------------------------------------------------------
Summary of changes:
src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am | 31 +-
src/pm/hydra/tools/topo/hwloc/hwloc/NEWS | 76 ++-
src/pm/hydra/tools/topo/hwloc/hwloc/README | 9 +-
src/pm/hydra/tools/topo/hwloc/hwloc/VERSION | 4 +-
.../tools/topo/hwloc/hwloc/config/distscript.csh | 68 +--
.../hydra/tools/topo/hwloc/hwloc/config/hwloc.m4 | 37 +-
.../topo/hwloc/hwloc/config/hwloc_internal.m4 | 12 +-
.../contrib/ci.inria.fr/hwloc-windows-build.sh | 53 ++
.../hwloc/hwloc/contrib/dist/make_dist_tarball | 2 +-
.../tools/topo/hwloc/hwloc/contrib/git/README.txt | 10 +
.../hwloc/contrib/git/github-send-commit-mails.pl | 42 ++
.../nightly/build-server/hwloc-nightly-tarball.sh | 80 +++
.../hwloc/contrib/nightly/make_snapshot_tarball | 6 +-
.../hwloc/hwloc/contrib/update-my-copyright.pl | 22 +-
.../tools/topo/hwloc/hwloc/contrib/windows/README | 33 +
.../hwloc/contrib/windows/hwloc-annotate.vcxproj | 90 +++
.../contrib/windows/hwloc-annotate.vcxproj.filters | 72 ++
.../hwloc/contrib/windows/hwloc-assembler.vcxproj | 89 +++
.../windows/hwloc-assembler.vcxproj.filters | 69 ++
.../hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj | 91 +++
.../contrib/windows/hwloc-bind.vcxproj.filters | 75 +++
.../hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj | 91 +++
.../contrib/windows/hwloc-calc.vcxproj.filters | 75 +++
.../hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj | 89 +++
.../contrib/windows/hwloc-diff.vcxproj.filters | 69 ++
.../hwloc/contrib/windows/hwloc-distances.vcxproj | 90 +++
.../windows/hwloc-distances.vcxproj.filters | 72 ++
.../hwloc/contrib/windows/hwloc-distrib.vcxproj | 90 +++
.../contrib/windows/hwloc-distrib.vcxproj.filters | 72 ++
.../hwloc/hwloc/contrib/windows/hwloc-info.vcxproj | 91 +++
.../contrib/windows/hwloc-info.vcxproj.filters | 75 +++
.../hwloc/contrib/windows/hwloc-patch.vcxproj | 89 +++
.../contrib/windows/hwloc-patch.vcxproj.filters | 69 ++
.../topo/hwloc/hwloc/contrib/windows/hwloc.sln | 113 ++++
.../hwloc/hwloc/contrib/windows/hwloc_config.h | 61 ++
.../hwloc/hwloc/contrib/windows/libhwloc.vcxproj | 234 +++++++
.../hwloc/contrib/windows/libhwloc.vcxproj.filters | 123 ++++
.../contrib/windows/lstopo-no-graphics.vcxproj | 96 +++
.../windows/lstopo-no-graphics.vcxproj.filters | 90 +++
.../hwloc/hwloc/contrib/windows/lstopo-win.vcxproj | 98 +++
.../contrib/windows/lstopo-win.vcxproj.filters | 93 +++
.../hwloc/hwloc/contrib/windows/lstopo.vcxproj | 97 +++
.../hwloc/contrib/windows/lstopo.vcxproj.filters | 93 +++
.../hwloc/hwloc/contrib/windows/private_config.h | 695 ++++++++++++++++++++
.../hwloc/contrib/windows/static-components.h | 17 +
.../hydra/tools/topo/hwloc/hwloc/doc/Makefile.am | 142 ++---
.../hydra/tools/topo/hwloc/hwloc/doc/doxygen.cfg | 4 +-
src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy | 59 ++-
.../tools/topo/hwloc/hwloc/include/Makefile.am | 4 +-
.../hydra/tools/topo/hwloc/hwloc/include/hwloc.h | 55 ++-
.../topo/hwloc/hwloc/include/hwloc/deprecated.h | 41 ++-
.../tools/topo/hwloc/hwloc/include/hwloc/diff.h | 37 +-
.../tools/topo/hwloc/hwloc/include/hwloc/helper.h | 77 ++-
.../tools/topo/hwloc/hwloc/include/hwloc/linux.h | 13 +
.../tools/topo/hwloc/hwloc/include/hwloc/plugins.h | 69 ++-
.../tools/topo/hwloc/hwloc/include/hwloc/rename.h | 38 +-
.../hwloc/hwloc/include/private/autogen/README.txt | 3 +-
.../topo/hwloc/hwloc/include/private/cpuid-x86.h | 89 +++
.../tools/topo/hwloc/hwloc/include/private/cpuid.h | 79 ---
.../topo/hwloc/hwloc/include/private/private.h | 16 +-
.../hydra/tools/topo/hwloc/hwloc/src/Makefile.am | 6 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c | 5 +-
.../hydra/tools/topo/hwloc/hwloc/src/components.c | 4 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/diff.c | 14 +-
.../hydra/tools/topo/hwloc/hwloc/src/distances.c | 4 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c | 33 +-
.../tools/topo/hwloc/hwloc/src/topology-aix.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-bgq.c | 9 +-
.../tools/topo/hwloc/hwloc/src/topology-cuda.c | 47 ++-
.../tools/topo/hwloc/hwloc/src/topology-darwin.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-freebsd.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-hpux.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-linux.c | 419 ++++++++++---
.../tools/topo/hwloc/hwloc/src/topology-netbsd.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-noos.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-opencl.c | 19 +-
.../tools/topo/hwloc/hwloc/src/topology-osf.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-pci.c | 13 +-
.../tools/topo/hwloc/hwloc/src/topology-solaris.c | 2 +-
.../topo/hwloc/hwloc/src/topology-synthetic.c | 115 ++--
.../tools/topo/hwloc/hwloc/src/topology-windows.c | 2 +-
.../tools/topo/hwloc/hwloc/src/topology-x86.c | 264 +++++---
.../topo/hwloc/hwloc/src/topology-xml-libxml.c | 13 +-
.../topo/hwloc/hwloc/src/topology-xml-nolibxml.c | 6 +-
.../tools/topo/hwloc/hwloc/src/topology-xml.c | 5 +-
src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c | 202 +++++--
.../hydra/tools/topo/hwloc/hwloc/src/traversal.c | 74 ++-
.../tools/topo/hwloc/hwloc/tests/hwloc_backends.c | 9 +-
.../tools/topo/hwloc/hwloc/tests/hwloc_custom.c | 4 +-
.../hwloc/tests/hwloc_get_last_cpu_location.c | 1 -
.../tests/hwloc_get_obj_below_array_by_type.c | 4 +-
.../topo/hwloc/hwloc/tests/hwloc_object_userdata.c | 1 -
.../linux/16em64t-4s2ca2c-cpusetreorder.output | 60 ++
.../linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2 | Bin 0 -> 5677 bytes
.../hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output | 73 --
.../hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2 | Bin 5408 -> 0 bytes
.../hwloc/hwloc/tests/linux/16ia64-8n2s.output | 34 +-
.../hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2 | Bin 6115 -> 6170 bytes
.../topo/hwloc/hwloc/tests/linux/1alpha.output | 2 +-
.../hwloc/tests/linux/256ppc-8n8s4t-nocache.output | 130 ++--
.../hwloc/tests/linux/256ppc-8n8s4t-nosys.output | 2 +-
.../hwloc/hwloc/tests/linux/256ppc-8n8s4t.output | 130 ++--
.../hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2 | Bin 83316 -> 83319 bytes
.../topo/hwloc/hwloc/tests/linux/2arm-2c.output | 2 +-
.../topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2 | Bin 4355 -> 3260 bytes
.../topo/hwloc/hwloc/tests/linux/2ps3-2t.output | 2 +-
.../topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2 | Bin 785 -> 815 bytes
.../tests/linux/8em64t-2s2ca2c-buggynuma.output | 49 ++
.../tests/linux/8em64t-2s2ca2c-buggynuma.tar.bz2 | Bin 0 -> 10547 bytes
.../hwloc/hwloc/tests/linux/8em64t-4c2t.output | 4 +-
.../hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2 | Bin 18469 -> 18476 bytes
.../tools/topo/hwloc/hwloc/tests/linux/Makefile.am | 8 +-
.../tests/linux/gather/test-gather-topology.sh.in | 4 +-
.../hwloc/tests/linux/hwloc-gather-topology.in | 19 +-
.../tests/ports/include/cuda/cuda_runtime_api.h | 15 +-
.../hwloc/tests/ports/include/opencl/CL/cl_ext.h | 5 +-
.../tests/ports/include/solaris/sys/procset.h | 19 +-
.../tools/topo/hwloc/hwloc/tests/rename/main.c | 2 +-
.../tools/topo/hwloc/hwloc/utils/hwloc-bind.1in | 2 +-
.../tools/topo/hwloc/hwloc/utils/hwloc-bind.c | 33 +-
.../tools/topo/hwloc/hwloc/utils/hwloc-calc.c | 6 +-
.../tools/topo/hwloc/hwloc/utils/hwloc-calc.h | 77 +---
.../tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in | 9 +-
.../tools/topo/hwloc/hwloc/utils/hwloc-distrib.c | 37 +-
.../tools/topo/hwloc/hwloc/utils/hwloc-info.c | 7 +-
.../tools/topo/hwloc/hwloc/utils/hwloc-ps.1in | 6 +
.../hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c | 35 +-
.../tools/topo/hwloc/hwloc/utils/lstopo-cairo.c | 24 +-
.../tools/topo/hwloc/hwloc/utils/lstopo-draw.c | 83 +++-
.../tools/topo/hwloc/hwloc/utils/lstopo-fig.c | 6 +-
.../tools/topo/hwloc/hwloc/utils/lstopo-text.c | 50 +-
.../tools/topo/hwloc/hwloc/utils/lstopo-windows.c | 4 +-
.../tools/topo/hwloc/hwloc/utils/lstopo-xml.c | 13 +-
.../hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in | 5 +-
src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c | 64 +-
src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h | 6 +-
.../hwloc/hwloc/utils/test-hwloc-distrib.output | 15 +
.../hwloc/hwloc/utils/test-hwloc-distrib.sh.in | 8 +-
138 files changed, 5612 insertions(+), 1206 deletions(-)
create mode 100755 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/ci.inria.fr/hwloc-windows-build.sh
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/README.txt
create mode 100755 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/git/github-send-commit-mails.pl
create mode 100755 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/nightly/build-server/hwloc-nightly-tarball.sh
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/README
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-annotate.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-assembler.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-bind.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-calc.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-diff.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distances.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-distrib.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-info.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc-patch.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc.sln
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/hwloc_config.h
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/libhwloc.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-no-graphics.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo-win.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/lstopo.vcxproj.filters
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/private_config.h
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/contrib/windows/static-components.h
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid-x86.h
delete mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.output
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2ca2c-cpusetreorder.tar.bz2
delete mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output
delete mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.output
create mode 100644 src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c-buggynuma.tar.bz2
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.1.1-58-g6b62d39
by noreply@mpich.org 07 Jul '14
by noreply@mpich.org 07 Jul '14
07 Jul '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 6b62d390c90af7acdd740bc076c847ce9e8b44c2 (commit)
from e807b314caa3b7960b7eca58270d9b53d7d732f7 (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/6b62d390c90af7acdd740bc076c847ce9…
commit 6b62d390c90af7acdd740bc076c847ce9e8b44c2
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Fri Jun 13 12:21:20 2014 -0400
pamid: fix MPI_Abort hang with dynamic tasking
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/misc/mpid_abort.c b/src/mpid/pamid/src/misc/mpid_abort.c
index dc618af..55bbbb8 100644
--- a/src/mpid/pamid/src/misc/mpid_abort.c
+++ b/src/mpid/pamid/src/misc/mpid_abort.c
@@ -85,8 +85,11 @@ int MPID_Abort(MPID_Comm * comm, int mpi_errno, int exit_code, const char *error
MPIDI_Abort_core(comm, mpi_errno, exit_code, error_msg);
#ifdef DYNAMIC_TASKING
- return PMI2_Abort(1,error_msg);
-#else
+ extern int mpidi_dynamic_tasking;
+ if (mpidi_dynamic_tasking)
+ return PMI2_Abort(1,error_msg);
+#endif
+
/* The POE and BGQ control systems both catch the exit value for additional
* processing. If a process exits with '1' then all processes in the job
* are terminated. The requested error code is lost in this process however
@@ -97,5 +100,4 @@ int MPID_Abort(MPID_Comm * comm, int mpi_errno, int exit_code, const char *error
* dump by setting the environment variable 'BG_COREDUMPONERROR=1'.
*/
exit(1);
-#endif
}
-----------------------------------------------------------------------
Summary of changes:
src/mpid/pamid/src/misc/mpid_abort.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0