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
May 2013
- 1 participants
- 70 discussions
[mpich] MPICH primary repository branch, master, updated. v3.0.4-216-gcf31e37
by noreply@mpich.org 17 May '13
by noreply@mpich.org 17 May '13
17 May '13
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 cf31e37add0a36154ca5849c9390be38f870f750 (commit)
via cbcde2f48326572c65b6bfd7688968205615eb85 (commit)
via e279b1ae6ea2d369c24efcdab03d21ddc3ac3281 (commit)
via 60a89bbdbad3d303b54c78b96d285e22b68c0f65 (commit)
via 4456bbeccb7229bfc7ed1bbcb09168afba6349a6 (commit)
via 430514fda404e88a48decbf76e67b06ea21778d0 (commit)
via c6084635dec65194544475604890cf50896fdcf2 (commit)
via fa950cb50d36b94397604db30546b41dc60f0e77 (commit)
from 50d4516ddfe85f041ca52a0953c1d930ce1051cf (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/cf31e37add0a36154ca5849c9390be38f…
commit cf31e37add0a36154ca5849c9390be38f870f750
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Wed May 15 18:52:22 2013 -0500
Allow pamid to override max message size for SMP collectives.
Reviewed by Charles Archer @ IBM.
diff --git a/src/mpid/pamid/include/mpidpre.h b/src/mpid/pamid/include/mpidpre.h
index 68ab472..ebb99af 100644
--- a/src/mpid/pamid/include/mpidpre.h
+++ b/src/mpid/pamid/include/mpidpre.h
@@ -70,4 +70,8 @@
#define MPID_HANDLE_NUM_INDICES 256
#endif /* __BGQ__ */
+#define MPID_MAX_SMP_BCAST_MSG_SIZE (16384)
+#define MPID_MAX_SMP_REDUCE_MSG_SIZE (16384)
+#define MPID_MAX_SMP_ALLREDUCE_MSG_SIZE (16384)
+
#endif
http://git.mpich.org/mpich.git/commitdiff/cbcde2f48326572c65b6bfd7688968205…
commit cbcde2f48326572c65b6bfd7688968205615eb85
Author: Charles Archer <archerc(a)us.ibm.com>
Date: Mon Mar 11 12:47:33 2013 -0400
Enable SMP aware collectives via PAMI local task detection
(ibm) D188808
(ibm) 2021904184004ba65cb4f277d01dc88b47d692bc
Signed-off-by: Bob Cernohous <bobc(a)us.ibm.com>
Modified significantly by Pavan Balaji to utilize mpich infrastructure
more consistently for all SMP collectives.
Reviewed by Charles Archer @ IBM.
diff --git a/src/mpi/coll/allreduce.c b/src/mpi/coll/allreduce.c
index 11191da..9a818f5 100644
--- a/src/mpi/coll/allreduce.c
+++ b/src/mpi/coll/allreduce.c
@@ -139,6 +139,7 @@ int MPIR_Allreduce_intra (
int comm_size, rank, type_size;
int mpi_errno = MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
+ int nbytes = 0;
int mask, dst, is_commutative, pof2, newrank, rem, newdst, i,
send_idx, recv_idx, last_idx, send_cnt, recv_cnt, *cnts, *disps;
MPI_Aint true_extent, true_lb, extent;
@@ -156,7 +157,10 @@ int MPIR_Allreduce_intra (
if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_PARAM_ENABLE_SMP_ALLREDUCE) {
/* is the op commutative? We do SMP optimizations only if it is. */
- if (MPIR_Comm_is_node_aware(comm_ptr) && is_commutative) {
+ MPID_Datatype_get_size_macro(datatype, type_size);
+ nbytes = MPIR_PARAM_MAX_SMP_ALLREDUCE_MSG_SIZE ? type_size*count : 0;
+ if (MPIR_Comm_is_node_aware(comm_ptr) && is_commutative &&
+ nbytes <= MPIR_PARAM_MAX_SMP_ALLREDUCE_MSG_SIZE) {
/* on each node, do a reduce to the local root */
if (comm_ptr->node_comm != NULL) {
/* take care of the MPI_IN_PLACE case. For reduce,
diff --git a/src/mpi/coll/bcast.c b/src/mpi/coll/bcast.c
index c25b714..da83463 100644
--- a/src/mpi/coll/bcast.c
+++ b/src/mpi/coll/bcast.c
@@ -1150,8 +1150,10 @@ int MPIR_Bcast_intra (
if (count == 0) goto fn_exit;
+ MPID_Datatype_get_size_macro(datatype, type_size);
+ nbytes = MPIR_PARAM_MAX_SMP_BCAST_MSG_SIZE ? type_size*count : 0;
if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_PARAM_ENABLE_SMP_BCAST &&
- MPIR_Comm_is_node_aware(comm_ptr)) {
+ nbytes <= MPIR_PARAM_MAX_SMP_BCAST_MSG_SIZE && MPIR_Comm_is_node_aware(comm_ptr)) {
mpi_errno = MPIR_SMP_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
diff --git a/src/mpi/coll/reduce.c b/src/mpi/coll/reduce.c
index f343b8e..99bb5b9 100644
--- a/src/mpi/coll/reduce.c
+++ b/src/mpi/coll/reduce.c
@@ -684,6 +684,7 @@ int MPIR_Reduce_intra (
int mpi_errno = MPI_SUCCESS;
int mpi_errno_ret = MPI_SUCCESS;
int comm_size, is_commutative, type_size, pof2;
+ int nbytes = 0;
MPID_Op *op_ptr;
MPIU_CHKLMEM_DECL(1);
@@ -700,7 +701,10 @@ int MPIR_Reduce_intra (
is_commutative = (op_ptr->kind == MPID_OP_USER_NONCOMMUTE) ? 0 : 1;
}
- if (MPIR_Comm_is_node_aware(comm_ptr) && is_commutative) {
+ MPID_Datatype_get_size_macro(datatype, type_size);
+ nbytes = MPIR_PARAM_MAX_SMP_REDUCE_MSG_SIZE ? type_size*count : 0;
+ if (MPIR_Comm_is_node_aware(comm_ptr) && is_commutative &&
+ nbytes <= MPIR_PARAM_MAX_SMP_REDUCE_MSG_SIZE) {
void *tmp_buf = NULL;
MPI_Aint true_lb, true_extent, extent;
diff --git a/src/mpid/pamid/include/mpidi_datatypes.h b/src/mpid/pamid/include/mpidi_datatypes.h
index 2ec80d4..62adcbf 100644
--- a/src/mpid/pamid/include/mpidi_datatypes.h
+++ b/src/mpid/pamid/include/mpidi_datatypes.h
@@ -104,7 +104,7 @@ typedef struct
unsigned statistics; /**< The current level of stats collection. */
unsigned rma_pending; /**< The max num outstanding requests during an RMA op */
unsigned shmem_pt2pt; /**< Enable optimized shared memory point-to-point functions. */
-
+ unsigned smp_detect;
pami_geometry_t world_geometry;
struct
diff --git a/src/mpid/pamid/include/mpidi_platform.h b/src/mpid/pamid/include/mpidi_platform.h
index e706e03..9337c7d 100644
--- a/src/mpid/pamid/include/mpidi_platform.h
+++ b/src/mpid/pamid/include/mpidi_platform.h
@@ -79,6 +79,7 @@
#define PAMIX_IS_LOCAL_TASK
#define PAMIX_IS_LOCAL_TASK_STRIDE (4)
#define PAMIX_IS_LOCAL_TASK_SHIFT (6)
+#define MPIDI_SMP_DETECT_DEFAULT 0
#define TOKEN_FLOW_CONTROL 0
/*
@@ -128,11 +129,15 @@ static const char _ibm_release_version_[] = "V1R2M0";
#define TOKEN_FLOW_CONTROL 1
#define DYNAMIC_TASKING 1
+/* Allow MPICH to detect local tasks */
+#define MPID_USE_NODE_IDS 1
+typedef int32_t MPID_Node_id_t;
+
/* 'is local task' extension and limits */
#define PAMIX_IS_LOCAL_TASK
#define PAMIX_IS_LOCAL_TASK_STRIDE (1)
#define PAMIX_IS_LOCAL_TASK_SHIFT (0)
-
+#define MPIDI_SMP_DETECT_DEFAULT 1
/*
* Enable only the 'local vs remote' point-to-point eager limits.
*/
diff --git a/src/mpid/pamid/include/pamix.h b/src/mpid/pamid/include/pamix.h
index 3f55400..6adbab5 100644
--- a/src/mpid/pamid/include/pamix.h
+++ b/src/mpid/pamid/include/pamix.h
@@ -26,11 +26,14 @@
#include <pami.h>
#include <mpidi_platform.h>
-
#if defined(__cplusplus)
extern "C" {
#endif
+typedef pami_result_t (*node_info_fn)(pami_task_t task,
+ uint32_t *node_id,
+ uint32_t *offset,
+ uint32_t *max_nodes);
typedef struct
{
pami_extension_t progress;
@@ -42,6 +45,7 @@ typedef struct
uint8_t * base;
uintptr_t stride;
uintptr_t bitmask;
+ node_info_fn node_info;
} is_local_task;
#if defined(__BGQ__)
diff --git a/src/mpid/pamid/src/mpid_init.c b/src/mpid/pamid/src/mpid_init.c
index e7bb3bc..45b6ff2 100644
--- a/src/mpid/pamid/src/mpid_init.c
+++ b/src/mpid/pamid/src/mpid_init.c
@@ -117,7 +117,7 @@ MPIDI_Process_t MPIDI_Process = {
.rma_pending = 1000,
.shmem_pt2pt = 1,
-
+ .smp_detect = MPIDI_SMP_DETECT_DEFAULT,
.optimized = {
.collectives = MPIDI_OPTIMIZED_COLLECTIVE_DEFAULT,
.subcomms = 1,
diff --git a/src/mpid/pamid/src/mpidi_env.c b/src/mpid/pamid/src/mpidi_env.c
index e80c818..c14c617 100644
--- a/src/mpid/pamid/src/mpidi_env.c
+++ b/src/mpid/pamid/src/mpidi_env.c
@@ -1119,6 +1119,14 @@ MPIDI_Env_setup(int rank, int requested)
ENV_Char(names, &MPIDI_Process.mp_s_use_pami_get);
}
#endif
+ /* MP_S_SMP_DETECT */
+ {
+ char* names[] = {"MP_S_SMP_DETECT", "PAMID_SMP_DIRECT", NULL};
+ ENV_Char(names, &MPIDI_Process.smp_detect);
+ if(!MPIDI_Process.smp_detect)
+ PAMIX_Extensions.is_local_task.node_info=NULL;
+ }
+
}
{
#if TOKEN_FLOW_CONTROL
diff --git a/src/mpid/pamid/src/pamix/pamix.c b/src/mpid/pamid/src/pamix/pamix.c
index eae7934..e213d3a 100644
--- a/src/mpid/pamid/src/pamix/pamix.c
+++ b/src/mpid/pamid/src/pamix/pamix.c
@@ -101,18 +101,19 @@ PAMIX_Initialize(pami_client_t client)
#ifdef PAMIX_IS_LOCAL_TASK
{
- PAMIX_Extensions.is_local_task.base = NULL;
- PAMIX_Extensions.is_local_task.stride = 0;
- PAMIX_Extensions.is_local_task.bitmask = 0;
- PAMIX_Extensions.is_local_task.status =
- PAMI_Extension_open(client, "EXT_is_local_task",
- &PAMIX_Extensions.is_local_task.extension);
+ PAMIX_Extensions.is_local_task.base = NULL;
+ PAMIX_Extensions.is_local_task.stride = 0;
+ PAMIX_Extensions.is_local_task.bitmask = 0;
+ PAMIX_Extensions.is_local_task.node_info = NULL;
+ PAMIX_Extensions.is_local_task.status = PAMI_Extension_open(client, "EXT_is_local_task",
+ &PAMIX_Extensions.is_local_task.extension);
if (PAMIX_Extensions.is_local_task.status == PAMI_SUCCESS)
{
PAMIX_Extensions.is_local_task.base = PAMI_EXTENSION_FUNCTION(uint8_t *, "base", PAMIX_Extensions.is_local_task.extension);
PAMIX_Extensions.is_local_task.stride = PAMI_EXTENSION_FUNCTION(uintptr_t, "stride", PAMIX_Extensions.is_local_task.extension);
PAMIX_Extensions.is_local_task.bitmask = PAMI_EXTENSION_FUNCTION(uintptr_t, "bitmask", PAMIX_Extensions.is_local_task.extension);
+ PAMIX_Extensions.is_local_task.node_info = PAMI_EXTENSION_FUNCTION(node_info_fn, "get_node_info", PAMIX_Extensions.is_local_task.extension);
}
#if defined(PAMIX_IS_LOCAL_TASK_STRIDE) && defined(PAMIX_IS_LOCAL_TASK_BITMASK)
http://git.mpich.org/mpich.git/commitdiff/e279b1ae6ea2d369c24efcdab03d21ddc…
commit e279b1ae6ea2d369c24efcdab03d21ddc3ac3281
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Wed May 15 18:08:49 2013 -0500
Cap the maximum SMP collective size.
Reviewed by Charles Archer @ IBM.
diff --git a/src/util/param/params.yml b/src/util/param/params.yml
index 4f7d645..635f8a3 100644
--- a/src/util/param/params.yml
+++ b/src/util/param/params.yml
@@ -226,6 +226,15 @@ parameters:
Enable SMP aware broadcast.
- category : collective
+ name : MAX_SMP_BCAST_MSG_SIZE
+ type : int
+ default : 0
+ class : device
+ description : >-
+ Maximum message size for which SMP-aware broadcast is used. A
+ value of '0' uses SMP-aware broadcast for all message sizes.
+
+ - category : collective
name : ENABLE_SMP_REDUCE
type : boolean
default : true
@@ -234,6 +243,15 @@ parameters:
Enable SMP aware reduce.
- category : collective
+ name : MAX_SMP_REDUCE_MSG_SIZE
+ type : int
+ default : 0
+ class : device
+ description : >-
+ Maximum message size for which SMP-aware reduce is used. A
+ value of '0' uses SMP-aware reduce for all message sizes.
+
+ - category : collective
name : ENABLE_SMP_ALLREDUCE
type : boolean
default : true
@@ -241,6 +259,15 @@ parameters:
description : >-
Enable SMP aware allreduce.
+ - category : collective
+ name : MAX_SMP_ALLREDUCE_MSG_SIZE
+ type : int
+ default : 0
+ class : device
+ description : >-
+ Maximum message size for which SMP-aware allreduce is used. A
+ value of '0' uses SMP-aware allreduce for all message sizes.
+
##############################################################
# communicator parameters
- category : communicator
http://git.mpich.org/mpich.git/commitdiff/60a89bbdbad3d303b54c78b96d285e22b…
commit 60a89bbdbad3d303b54c78b96d285e22b68c0f65
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Wed May 15 17:53:42 2013 -0500
Added ability to enable/disable individual SMP collectives.
Reviewed by Charles Archer @ IBM.
diff --git a/src/mpi/coll/allreduce.c b/src/mpi/coll/allreduce.c
index 5ef7d37..11191da 100644
--- a/src/mpi/coll/allreduce.c
+++ b/src/mpi/coll/allreduce.c
@@ -154,7 +154,7 @@ int MPIR_Allreduce_intra (
is_commutative = MPIR_Op_is_commutative(op);
- if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES) {
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_PARAM_ENABLE_SMP_ALLREDUCE) {
/* is the op commutative? We do SMP optimizations only if it is. */
if (MPIR_Comm_is_node_aware(comm_ptr) && is_commutative) {
/* on each node, do a reduce to the local root */
diff --git a/src/mpi/coll/barrier.c b/src/mpi/coll/barrier.c
index 4406d66..8c056e6 100644
--- a/src/mpi/coll/barrier.c
+++ b/src/mpi/coll/barrier.c
@@ -270,7 +270,8 @@ int MPIR_Barrier_impl(MPID_Comm *comm_ptr, int *errflag)
else
{
if (comm_ptr->comm_kind == MPID_INTRACOMM) {
- if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_Comm_is_node_aware(comm_ptr)) {
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_PARAM_ENABLE_SMP_BARRIER &&
+ MPIR_Comm_is_node_aware(comm_ptr)) {
/* do the intranode barrier on all nodes */
if (comm_ptr->node_comm != NULL)
diff --git a/src/mpi/coll/bcast.c b/src/mpi/coll/bcast.c
index db0e5c0..c25b714 100644
--- a/src/mpi/coll/bcast.c
+++ b/src/mpi/coll/bcast.c
@@ -917,7 +917,7 @@ static int MPIR_SMP_Bcast(
MPI_Status status;
int recvd_size;
- if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES || !MPIR_PARAM_ENABLE_SMP_BCAST)
MPIU_Assert(0);
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
@@ -1150,7 +1150,8 @@ int MPIR_Bcast_intra (
if (count == 0) goto fn_exit;
- if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_Comm_is_node_aware(comm_ptr)) {
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_PARAM_ENABLE_SMP_BCAST &&
+ MPIR_Comm_is_node_aware(comm_ptr)) {
mpi_errno = MPIR_SMP_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 1d0ccbc..29d573d 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -571,7 +571,7 @@ int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datat
MPID_Comm *nc;
MPID_Comm *nrc;
- if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES || !MPIR_PARAM_ENABLE_SMP_ALLREDUCE)
MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index fe3f48b..e2b8263 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -671,7 +671,7 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
int mpi_errno = MPI_SUCCESS;
int type_size, is_homogeneous;
- if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES || !MPIR_PARAM_ENABLE_SMP_BCAST)
MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index cdf1524..0e05112 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -579,7 +579,7 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
MPID_Comm *nrc;
MPIR_SCHED_CHKPMEM_DECL(1);
- if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES || !MPIR_PARAM_ENABLE_SMP_REDUCE)
MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
diff --git a/src/mpi/coll/reduce.c b/src/mpi/coll/reduce.c
index a13e42b..f343b8e 100644
--- a/src/mpi/coll/reduce.c
+++ b/src/mpi/coll/reduce.c
@@ -691,7 +691,7 @@ int MPIR_Reduce_intra (
/* check if multiple threads are calling this collective function */
MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
- if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES) {
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_PARAM_ENABLE_SMP_REDUCE) {
/* is the op commutative? We do SMP optimizations only if it is. */
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN)
is_commutative = 1;
diff --git a/src/util/param/params.yml b/src/util/param/params.yml
index 62cfb7e..4f7d645 100644
--- a/src/util/param/params.yml
+++ b/src/util/param/params.yml
@@ -207,8 +207,39 @@ parameters:
default : true
class : device
description : >-
- The smallest message size that will be used for the pipelined, large-message,
- ring algorithm in the MPI_Allgatherv implementation.
+ Enable SMP aware collective communication.
+
+ - category : collective
+ name : ENABLE_SMP_BARRIER
+ type : boolean
+ default : true
+ class : device
+ description : >-
+ Enable SMP aware barrier.
+
+ - category : collective
+ name : ENABLE_SMP_BCAST
+ type : boolean
+ default : true
+ class : device
+ description : >-
+ Enable SMP aware broadcast.
+
+ - category : collective
+ name : ENABLE_SMP_REDUCE
+ type : boolean
+ default : true
+ class : device
+ description : >-
+ Enable SMP aware reduce.
+
+ - category : collective
+ name : ENABLE_SMP_ALLREDUCE
+ type : boolean
+ default : true
+ class : device
+ description : >-
+ Enable SMP aware allreduce.
##############################################################
# communicator parameters
http://git.mpich.org/mpich.git/commitdiff/4456bbeccb7229bfc7ed1bbcb09168afb…
commit 4456bbeccb7229bfc7ed1bbcb09168afba6349a6
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Wed May 15 16:57:19 2013 -0500
Make enabling SMP collectives an environment variable instead of a
configure option.
Reviewed by Charles Archer @ IBM.
diff --git a/configure.ac b/configure.ac
index 7836b1c..b119e92 100644
--- a/configure.ac
+++ b/configure.ac
@@ -444,14 +444,6 @@ AC_ARG_ENABLE(debuginfo,
AC_HELP_STRING([--enable-debuginfo], [Enable support for debuggers]),,
enable_debuginfo=no)
-AC_ARG_ENABLE(smpcoll,
- AC_HELP_STRING([--enable-smpcoll],
- [Enable support for SMP/multi-core aware collectives]),
- smpcoll=$enableval,smpcoll=yes)
-if test $smpcoll = "yes" ; then
- AC_DEFINE(USE_SMP_COLLECTIVES,1,[define to enable SMP/multi-core aware collectives])
-fi
-
## Enable creation of libtool-style versioning or no versioning
AC_ARG_ENABLE(versioning,
diff --git a/src/mpi/coll/allreduce.c b/src/mpi/coll/allreduce.c
index 02999d0..5ef7d37 100644
--- a/src/mpi/coll/allreduce.c
+++ b/src/mpi/coll/allreduce.c
@@ -154,7 +154,7 @@ int MPIR_Allreduce_intra (
is_commutative = MPIR_Op_is_commutative(op);
-#if defined(USE_SMP_COLLECTIVES)
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES) {
/* is the op commutative? We do SMP optimizations only if it is. */
if (MPIR_Comm_is_node_aware(comm_ptr) && is_commutative) {
/* on each node, do a reduce to the local root */
@@ -215,8 +215,7 @@ int MPIR_Allreduce_intra (
}
goto fn_exit;
}
-#endif
-
+ }
#ifdef MPID_HAS_HETERO
if (comm_ptr->is_hetero)
diff --git a/src/mpi/coll/barrier.c b/src/mpi/coll/barrier.c
index 5459204..4406d66 100644
--- a/src/mpi/coll/barrier.c
+++ b/src/mpi/coll/barrier.c
@@ -270,8 +270,7 @@ int MPIR_Barrier_impl(MPID_Comm *comm_ptr, int *errflag)
else
{
if (comm_ptr->comm_kind == MPID_INTRACOMM) {
-#if defined(USE_SMP_COLLECTIVES)
- if (MPIR_Comm_is_node_aware(comm_ptr)) {
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_Comm_is_node_aware(comm_ptr)) {
/* do the intranode barrier on all nodes */
if (comm_ptr->node_comm != NULL)
@@ -314,10 +313,6 @@ int MPIR_Barrier_impl(MPID_Comm *comm_ptr, int *errflag)
mpi_errno = MPIR_Barrier_intra( comm_ptr, errflag );
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
-#else
- mpi_errno = MPIR_Barrier_intra( comm_ptr, errflag );
- if (mpi_errno) MPIU_ERR_POP(mpi_errno);
-#endif
}
else {
/* intercommunicator */
diff --git a/src/mpi/coll/bcast.c b/src/mpi/coll/bcast.c
index cf9ac0a..db0e5c0 100644
--- a/src/mpi/coll/bcast.c
+++ b/src/mpi/coll/bcast.c
@@ -917,9 +917,8 @@ static int MPIR_SMP_Bcast(
MPI_Status status;
int recvd_size;
-#if !defined(USE_SMP_COLLECTIVES)
- MPIU_Assert(0);
-#endif
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ MPIU_Assert(0);
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
is_homogeneous = 1;
@@ -1151,8 +1150,7 @@ int MPIR_Bcast_intra (
if (count == 0) goto fn_exit;
-#if defined(USE_SMP_COLLECTIVES)
- if (MPIR_Comm_is_node_aware(comm_ptr)) {
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES && MPIR_Comm_is_node_aware(comm_ptr)) {
mpi_errno = MPIR_SMP_Bcast(buffer, count, datatype, root, comm_ptr, errflag);
if (mpi_errno) {
/* for communication errors, just record the error but continue */
@@ -1162,7 +1160,6 @@ int MPIR_Bcast_intra (
}
goto fn_exit;
}
-#endif
comm_size = comm_ptr->local_size;
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index cefa272..1d0ccbc 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -571,9 +571,8 @@ int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datat
MPID_Comm *nc;
MPID_Comm *nrc;
-#if !defined(USE_SMP_COLLECTIVES)
- MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
-#endif
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
nc = comm_ptr->node_comm;
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index d619407..fe3f48b 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -671,9 +671,8 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
int mpi_errno = MPI_SUCCESS;
int type_size, is_homogeneous;
-#if !defined(USE_SMP_COLLECTIVES)
- MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
-#endif
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
is_homogeneous = 1;
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index cedd331..cdf1524 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -579,9 +579,8 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
MPID_Comm *nrc;
MPIR_SCHED_CHKPMEM_DECL(1);
-#if !defined(USE_SMP_COLLECTIVES)
- MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
-#endif
+ if (!MPIR_PARAM_ENABLE_SMP_COLLECTIVES)
+ MPID_Abort(comm_ptr, MPI_ERR_OTHER, 1, "SMP collectives are disabled!");
MPIU_Assert(MPIR_Comm_is_node_aware(comm_ptr));
MPIU_Assert(comm_ptr->comm_kind == MPID_INTRACOMM);
diff --git a/src/mpi/coll/reduce.c b/src/mpi/coll/reduce.c
index 8b80ad9..a13e42b 100644
--- a/src/mpi/coll/reduce.c
+++ b/src/mpi/coll/reduce.c
@@ -685,14 +685,13 @@ int MPIR_Reduce_intra (
int mpi_errno_ret = MPI_SUCCESS;
int comm_size, is_commutative, type_size, pof2;
MPID_Op *op_ptr;
-#if defined(USE_SMP_COLLECTIVES)
MPIU_CHKLMEM_DECL(1);
-#endif
+
if (count == 0) return MPI_SUCCESS;
/* check if multiple threads are calling this collective function */
MPIDU_ERR_CHECK_MULTIPLE_THREADS_ENTER( comm_ptr );
-#if defined(USE_SMP_COLLECTIVES)
+ if (MPIR_PARAM_ENABLE_SMP_COLLECTIVES) {
/* is the op commutative? We do SMP optimizations only if it is. */
if (HANDLE_GET_KIND(op) == HANDLE_KIND_BUILTIN)
is_commutative = 1;
@@ -803,8 +802,7 @@ int MPIR_Reduce_intra (
goto fn_exit;
}
-#endif
-
+ }
comm_size = comm_ptr->local_size;
@@ -841,9 +839,9 @@ int MPIR_Reduce_intra (
fn_exit:
/* check if multiple threads are calling this collective function */
MPIDU_ERR_CHECK_MULTIPLE_THREADS_EXIT( comm_ptr );
-#if defined(USE_SMP_COLLECTIVES)
+
MPIU_CHKLMEM_FREEALL();
-#endif
+
if (mpi_errno_ret)
mpi_errno = mpi_errno_ret;
else if (*errflag)
diff --git a/src/util/param/params.yml b/src/util/param/params.yml
index 1df39b2..62cfb7e 100644
--- a/src/util/param/params.yml
+++ b/src/util/param/params.yml
@@ -201,6 +201,15 @@ parameters:
The smallest message size that will be used for the pipelined, large-message,
ring algorithm in the MPI_Allgatherv implementation.
+ - category : collective
+ name : ENABLE_SMP_COLLECTIVES
+ type : boolean
+ default : true
+ class : device
+ description : >-
+ The smallest message size that will be used for the pipelined, large-message,
+ ring algorithm in the MPI_Allgatherv implementation.
+
##############################################################
# communicator parameters
- category : communicator
http://git.mpich.org/mpich.git/commitdiff/430514fda404e88a48decbf76e67b06ea…
commit 430514fda404e88a48decbf76e67b06ea21778d0
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Wed May 15 11:40:09 2013 -0500
Update parameter generation to allow device-overrides where needed.
Reviewed by Charles Archer @ IBM.
diff --git a/maint/genparams b/maint/genparams
index eb6090c..94c575d 100755
--- a/maint/genparams
+++ b/maint/genparams
@@ -330,7 +330,17 @@ foreach my $p (@{$params->{parameters}}) {
else {
$default = fmt_default($p->{name}, $p->{default}, $p->{defaultliteral}, $p->{type});
}
+
+ if ($p->{class} eq "device") {
+ printf PARAM_C "#if defined MPID_%s\n", $p->{name};
+ printf PARAM_C "%s ${uc_ns}_%s = MPID_%s;\n", type2ctype($p->{type}), $p->{name},
+ $p->{name};
+ printf PARAM_C "#else\n";
+ }
printf PARAM_C "%s ${uc_ns}_%s = %s;\n", type2ctype($p->{type}), $p->{name}, $default;
+ if ($p->{class} eq "device") {
+ printf PARAM_C "#endif /* MPID_%s */\n\n", $p->{name};
+ }
}
# FIXME the mpi_errno bit is MPICH-specific
diff --git a/src/util/param/params.yml b/src/util/param/params.yml
index d8c563e..1df39b2 100644
--- a/src/util/param/params.yml
+++ b/src/util/param/params.yml
@@ -13,6 +13,11 @@
# Listing "FOO" as a parameter name will cause two environment variables
# to be examined by default: MPIR_PARAM_FOO and MPICH_FOO, with the
# MPIR_PARAM value having priority.
+#
+# Each parameter has a class associated with it. The following
+# classes are defined: "device", and "none". Setting it to "device"
+# will allow the device to override the default value.
+
categories:
- name : collective
description : parameters that control collective communication behavior
@@ -52,6 +57,7 @@ parameters:
name : ALLTOALL_SHORT_MSG_SIZE
type : int
default : 256
+ class : device
description : >-
the short message algorithm will be used if the per-destination
message size (sendcount*size(sendtype)) is <= this value
@@ -60,6 +66,7 @@ parameters:
name : ALLTOALL_MEDIUM_MSG_SIZE
type : int
default : 32768
+ class : device
description : >-
the medium message algorithm will be used if the per-destination
message size (sendcount*size(sendtype)) is <= this value and
@@ -69,6 +76,7 @@ parameters:
name : ALLTOALL_THROTTLE
type : int
default : 32
+ class : device
description : >-
max no. of irecvs/isends posted at a time in some alltoall
algorithms. Setting it to 0 causes all irecvs/isends to be
@@ -78,6 +86,7 @@ parameters:
name : REDSCAT_COMMUTATIVE_LONG_MSG_SIZE
type : int
default : 524288
+ class : device
description : >-
the long message algorithm will be used if the operation is commutative
and the send buffer size is >= this value (in bytes)
@@ -86,6 +95,7 @@ parameters:
name : BCAST_MIN_PROCS
type : int
default : 8
+ class : device
description : >-
the minimum number of processes in a communicator to use a non-binomial
broadcast algorithm
@@ -94,6 +104,7 @@ parameters:
name : BCAST_SHORT_MSG_SIZE
type : int
default : 12288
+ class : device
description : >-
the short message algorithm will be used if the send buffer size is <
this value (in bytes)
@@ -102,6 +113,7 @@ parameters:
name : BCAST_LONG_MSG_SIZE
type : int
default : 524288
+ class : device
description : >-
the long message algorithm will be used if the send buffer size is >=
this value (in bytes)
@@ -110,6 +122,7 @@ parameters:
name : ALLGATHER_SHORT_MSG_SIZE
type : int
default : 81920
+ class : device
description : >-
For MPI_Allgather and MPI_Allgatherv, the short message algorithm will
be used if the send buffer size is < this value (in bytes).
@@ -118,6 +131,7 @@ parameters:
name : ALLGATHER_LONG_MSG_SIZE
type : int
default : 524288
+ class : device
description : >-
For MPI_Allgather and MPI_Allgatherv, the long message algorithm will be
used if the send buffer size is >= this value (in bytes)
@@ -126,6 +140,7 @@ parameters:
name : REDUCE_SHORT_MSG_SIZE
type : int
default : 2048
+ class : device
description : >-
the short message algorithm will be used if the send buffer size is <=
this value (in bytes)
@@ -134,6 +149,7 @@ parameters:
name : ALLREDUCE_SHORT_MSG_SIZE
type : int
default : 2048
+ class : device
description : >-
the short message algorithm will be used if the send buffer size is <=
this value (in bytes)
@@ -142,6 +158,7 @@ parameters:
name : GATHER_VSMALL_MSG_SIZE
type : int
default : 1024
+ class : device
description : >-
use a temporary buffer for intracommunicator MPI_Gather if the send
buffer size is < this value (in bytes)
@@ -150,6 +167,7 @@ parameters:
name : GATHER_INTER_SHORT_MSG_SIZE
type : int
default : 2048
+ class : device
description : >-
use the short message algorithm for intercommunicator MPI_Gather if the
send buffer size is < this value (in bytes)
@@ -158,6 +176,7 @@ parameters:
name : GATHERV_INTER_SSEND_MIN_PROCS
type : int
default : 32
+ class : device
description : >-
Use Ssend (synchronous send) for intercommunicator MPI_Gatherv if the
"group B" size is >= this value. Specifying "-1" always avoids using
@@ -168,6 +187,7 @@ parameters:
name : SCATTER_INTER_SHORT_MSG_SIZE
type : int
default : 2048
+ class : device
description : >-
use the short message algorithm for intercommunicator MPI_Scatter if the
send buffer size is < this value (in bytes)
@@ -176,6 +196,7 @@ parameters:
name : ALLGATHERV_PIPELINE_MSG_SIZE
type : int
default : 32768
+ class : device
description : >-
The smallest message size that will be used for the pipelined, large-message,
ring algorithm in the MPI_Allgatherv implementation.
@@ -186,6 +207,7 @@ parameters:
name : COMM_SPLIT_USE_QSORT
type : boolean
default : true
+ class : device
description : >-
Use qsort(3) in the implementation of MPI_Comm_split instead of bubble sort.
@@ -195,6 +217,7 @@ parameters:
name : DEBUG_HOLD
type : boolean
default : false
+ class : device
description : >-
If true, causes processes to wait in MPI_Init and
MPI_Initthread for a debugger to be attached. Once the
@@ -206,6 +229,7 @@ parameters:
name : PROCTABLE_SIZE
type : int
default : 64
+ class : device
description : >-
Size of the "MPIR" debugger interface proctable (process table).
@@ -213,6 +237,7 @@ parameters:
name : PROCTABLE_PRINT
type : boolean
default : true
+ class : device
description : >-
If true, dump the proctable entries at MPIR_WaitForDebugger-time.
(currently compile-time disabled by "#if 0")
@@ -223,6 +248,7 @@ parameters:
name : ENABLE_COLL_FT_RET
type : boolean
default : false
+ class : device
description : >-
NOT COMPATIBLE WITH NONBLOCKING COLLECTIVES (see tt#1601)!!!
Collectives called on a communicator with a failed process
@@ -237,6 +263,7 @@ parameters:
name : ABORT_ON_LEAKED_HANDLES
type : boolean
default : false
+ class : device
description : >-
If true, MPI will call MPI_Abort at MPI_Finalize if any MPI object
handles have been leaked. For example, if MPI_Comm_dup is called
@@ -252,6 +279,7 @@ parameters:
name : CTXID_EAGER_SIZE
type : int
default : 2
+ class : device
description : >-
The MPIR_PARAM_CTXID_EAGER_SIZE environment variable allows you to
specify how many words in the context ID mask will be set aside
@@ -264,6 +292,7 @@ parameters:
name : MEMDUMP
type : boolean
default : true
+ class : device
description : >-
If true, list any memory that was allocated by MPICH and that
remains allocated when MPI_Finalize completes.
@@ -272,6 +301,7 @@ parameters:
name : ERROR_CHECKING
type : boolean
default : true
+ class : device
description : >-
If true, perform checks for errors, typically to verify valid inputs
to MPI routines. Only effective when MPICH is configured with
@@ -281,6 +311,7 @@ parameters:
name : PRINT_ERROR_STACK
type : boolean
default : true
+ class : device
description : >-
If true, print an error stack trace at error handling time.
@@ -288,6 +319,7 @@ parameters:
name : CHOP_ERROR_STACK
type : int
default : 0
+ class : device
description : >-
If >0, truncate error stack output lines this many characters
wide. If 0, do not truncate, and if <0 use a sensible default.
@@ -298,6 +330,7 @@ parameters:
name : CH3_RMA_ACC_IMMED
type : boolean
default : true
+ class : none
description : >-
Use the immediate accumulate optimization
@@ -305,6 +338,7 @@ parameters:
name : CH3_RMA_NREQUEST_THRESHOLD
type : int
default : 4000
+ class : none
description : >-
Threshold at which the RMA implementation attempts to complete requests
while completing RMA operations and while using the lazy synchonization
@@ -315,6 +349,7 @@ parameters:
name : CH3_RMA_NREQUEST_NEW_THRESHOLD
type : int
default : 128
+ class : none
description : >-
Threshold for the number of new requests since the last attempt to
complete pending requests. Higher values can increase performance,
@@ -325,6 +360,7 @@ parameters:
name : CH3_RMA_LOCK_IMMED
type : boolean
default : false
+ class : none
description : >-
Issue a request for the passive target RMA lock immediately. Default
behavior is to defer the lock request until the call to MPI_Win_unlock.
@@ -333,6 +369,7 @@ parameters:
name : CH3_RMA_MERGE_LOCK_OP_UNLOCK
type : boolean
default : true
+ class : none
description : >-
Enable/disable an optimization that merges lock, op, and unlock
messages, for single-operation passive target epochs.
@@ -343,6 +380,7 @@ parameters:
- CH3_NO_LOCAL
type : boolean
default : false
+ class : none
description : >-
If true, force all processes to operate as though all processes
are located on another node. For example, this disables shared
@@ -354,6 +392,7 @@ parameters:
- CH3_EVEN_ODD_CLIQUES
type : boolean
default : false
+ class : none
description : >-
If true, odd procs on a node are seen as local to each other, and even
procs on a node are seen as local to each other. Used for debugging on
@@ -365,6 +404,7 @@ parameters:
- INTERFACE_HOSTNAME
type : string
defaultliteral : NULL
+ class : none
description : >-
If non-NULL, this parameter specifies the IP address that
other processes should use when connecting to this process.
@@ -376,6 +416,7 @@ parameters:
name : CH3_EAGER_MAX_MSG_SIZE
type : int
default : 131072
+ class : none
description : >-
This parameter controls the message size at which CH3 switches
from eager to rendezvous mode.
@@ -387,6 +428,7 @@ parameters:
- PORT_RANGE
type : range
default : "0:0"
+ class : none
description : >-
The MPIR_PARAM_CH3_PORT_RANGE environment variable allows you to
specify the range of TCP ports to be used by the process
@@ -399,6 +441,7 @@ parameters:
name : NEMESIS_POLLS_BEFORE_YIELD
type : int
default : 1000
+ class : none
description : >-
When MPICH is in a busy waiting loop, it will periodically
call a function to yield the processor. This parameter sets
@@ -409,6 +452,7 @@ parameters:
name : NEMESIS_LMT_DMA_THRESHOLD
type : int
default : 2097152
+ class : none
description : >-
Messages larger than this size will use the "dma" (knem)
intranode LMT implementation, if it is enabled and available.
@@ -417,6 +461,7 @@ parameters:
name : NEMESIS_NETMOD
type : string
default : ""
+ class : none
description : >-
If non-empty, this parameter specifies which network module
should be used for communication.
@@ -425,6 +470,7 @@ parameters:
name : NEMESIS_SHM_EAGER_MAX_SZ
type : int
default : -1
+ class : none
description : >-
This parameter controls the message size at which Nemesis
switches from eager to rendezvous mode for shared memory.
@@ -435,6 +481,7 @@ parameters:
name : NEMESIS_SHM_READY_EAGER_MAX_SZ
type : int
default : -2
+ class : none
description : >-
This parameter controls the message size at which Nemesis
switches from eager to rendezvous mode for ready-send
@@ -446,6 +493,7 @@ parameters:
name : NEMESIS_ENABLE_CKPOINT
type : boolean
default : false
+ class : none
description : >-
If true, enables checkpointing support and returns an error if
checkpointing library cannot be initialized.
@@ -458,6 +506,7 @@ parameters:
- NETWORK_IFACE
type : string
defaultliteral : NULL
+ class : none
description : >-
If non-NULL, this parameter specifies which pseudo-ethernet
interface the tcp netmod should use (e.g., "eth1", "ib0").
@@ -470,6 +519,7 @@ parameters:
name : NEMESIS_TCP_HOST_LOOKUP_RETRIES
type : int
default : 10
+ class : none
description : >-
This parameter controls the number of times to retry the
gethostbyname() function before giving up.
@@ -480,6 +530,7 @@ parameters:
name : NEMESIS_PORTALS_COMM_OVERRIDES
type : boolean
default : true
+ class : none
description : >-
If set to false, communication override functionality will be
disabled for netmods that provide the override feature.
http://git.mpich.org/mpich.git/commitdiff/c6084635dec65194544475604890cf508…
commit c6084635dec65194544475604890cf50896fdcf2
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Wed May 15 00:22:53 2013 -0500
Better arrange environment variables according to their categories.
Reviewed by Charles Archer @ IBM.
diff --git a/src/util/param/params.yml b/src/util/param/params.yml
index 93c50e8..d8c563e 100644
--- a/src/util/param/params.yml
+++ b/src/util/param/params.yml
@@ -156,9 +156,6 @@ parameters:
- category : collective
name : GATHERV_INTER_SSEND_MIN_PROCS
- # backwards compatibility
- abs-alt-env :
- - MPICH_GATHERV_MIN_PROCS
type : int
default : 32
description : >-
@@ -191,36 +188,140 @@ parameters:
default : true
description : >-
Use qsort(3) in the implementation of MPI_Comm_split instead of bubble sort.
+
+ ##############################################################
+ # debugging parameters
+ - category : debugger
+ name : DEBUG_HOLD
+ type : boolean
+ default : false
+ description : >-
+ If true, causes processes to wait in MPI_Init and
+ MPI_Initthread for a debugger to be attached. Once the
+ debugger has attached, the variable 'hold' should be set to 0
+ in order to allow the process to continue (e.g., in gdb, "set
+ hold=0").
+
+ - category : debugger
+ name : PROCTABLE_SIZE
+ type : int
+ default : 64
+ description : >-
+ Size of the "MPIR" debugger interface proctable (process table).
+
+ - category : debugger
+ name : PROCTABLE_PRINT
+ type : boolean
+ default : true
+ description : >-
+ If true, dump the proctable entries at MPIR_WaitForDebugger-time.
+ (currently compile-time disabled by "#if 0")
+
+ ##############################################################
+ # fault-tolerance parameters
+ - category : fault_tolerance
+ name : ENABLE_COLL_FT_RET
+ type : boolean
+ default : false
+ description : >-
+ NOT COMPATIBLE WITH NONBLOCKING COLLECTIVES (see tt#1601)!!!
+ Collectives called on a communicator with a failed process
+ should not hang, however the result of the operation may be
+ invalid even though the function returns MPI_SUCCESS. This
+ option enables an experimental feature that will return an error
+ if the result of the collective is invalid.
+
+ ##############################################################
+ # memory parameters
+ - category : memory
+ name : ABORT_ON_LEAKED_HANDLES
+ type : boolean
+ default : false
+ description : >-
+ If true, MPI will call MPI_Abort at MPI_Finalize if any MPI object
+ handles have been leaked. For example, if MPI_Comm_dup is called
+ without calling a corresponding MPI_Comm_free. For uninteresting
+ reasons, enabling this option may prevent all known object leaks from
+ being reported. MPICH must have been configure with
+ "--enable-g=handlealloc" or better in order for this functionality to
+ work.
+
+ ############################
+ # threads parameters
+ - category : threads
+ name : CTXID_EAGER_SIZE
+ type : int
+ default : 2
+ description : >-
+ The MPIR_PARAM_CTXID_EAGER_SIZE environment variable allows you to
+ specify how many words in the context ID mask will be set aside
+ for the eager allocation protocol. If the application is running
+ out of context IDs, reducing this value may help.
+
+ ##############################################################
+ # other MPI-level parameters
+ - category : developer
+ name : MEMDUMP
+ type : boolean
+ default : true
+ description : >-
+ If true, list any memory that was allocated by MPICH and that
+ remains allocated when MPI_Finalize completes.
+
+ - category : error_handling
+ name : ERROR_CHECKING
+ type : boolean
+ default : true
+ description : >-
+ If true, perform checks for errors, typically to verify valid inputs
+ to MPI routines. Only effective when MPICH is configured with
+ --enable-error-checking=runtime .
+
+ - category : error_handling
+ name : PRINT_ERROR_STACK
+ type : boolean
+ default : true
+ description : >-
+ If true, print an error stack trace at error handling time.
+
+ - category : error_handling
+ name : CHOP_ERROR_STACK
+ type : int
+ default : 0
+ description : >-
+ If >0, truncate error stack output lines this many characters
+ wide. If 0, do not truncate, and if <0 use a sensible default.
+
##############################################################
- # RMA parameters
- - category : rma
+ # ch3 parameters
+ - category : ch3
name : CH3_RMA_ACC_IMMED
type : boolean
default : true
description : >-
Use the immediate accumulate optimization
- - category : rma
+ - category : ch3
name : CH3_RMA_NREQUEST_THRESHOLD
type : int
default : 4000
description : >-
Threshold at which the RMA implementation attempts to complete requests
while completing RMA operations and while using the lazy synchonization
- approach. Change this value if programs fail because they run out of
+ approach. Change this value if programs fail because they run out of
requests or other internal resources
- - category : rma
+ - category : ch3
name : CH3_RMA_NREQUEST_NEW_THRESHOLD
type : int
default : 128
description : >-
Threshold for the number of new requests since the last attempt to
- complete pending requests. Higher values can increase performance,
+ complete pending requests. Higher values can increase performance,
but may run the risk of exceeding the available number of requests
or other internal resources.
- - category : rma
+ - category : ch3
name : CH3_RMA_LOCK_IMMED
type : boolean
default : false
@@ -228,7 +329,7 @@ parameters:
Issue a request for the passive target RMA lock immediately. Default
behavior is to defer the lock request until the call to MPI_Win_unlock.
- - category : rma
+ - category : ch3
name : CH3_RMA_MERGE_LOCK_OP_UNLOCK
type : boolean
default : true
@@ -236,9 +337,7 @@ parameters:
Enable/disable an optimization that merges lock, op, and unlock
messages, for single-operation passive target epochs.
- ##############################################################
- # intranode communication parameters
- - category : intranode
+ - category : ch3
name : CH3_NOLOCAL
alt-env :
- CH3_NO_LOCAL
@@ -249,7 +348,7 @@ parameters:
are located on another node. For example, this disables shared
memory communication hierarchical collectives.
- - category : intranode
+ - category : ch3
name : CH3_ODD_EVEN_CLIQUES
alt-env :
- CH3_EVEN_ODD_CLIQUES
@@ -260,67 +359,55 @@ parameters:
procs on a node are seen as local to each other. Used for debugging on
a single machine.
- - category : intranode
- name : NEMESIS_POLLS_BEFORE_YIELD
- type : int
- default : 1000
- description : >-
- When MPICH is in a busy waiting loop, it will periodically
- call a function to yield the processor. This parameter sets
- the number of loops before the yield function is called. A
- value of 0 disables yielding.
-
- - category : developer
- name : MEMDUMP
- type : boolean
- default : true
+ - category : ch3
+ name : CH3_INTERFACE_HOSTNAME
+ alt-env :
+ - INTERFACE_HOSTNAME
+ type : string
+ defaultliteral : NULL
description : >-
- If true, list any memory that was allocated by MPICH and that
- remains allocated when MPI_Finalize completes.
+ If non-NULL, this parameter specifies the IP address that
+ other processes should use when connecting to this process.
+ This parameter is mutually exclusive with the
+ MPIR_PARAM_CH3_NETWORK_IFACE parameter and it is an error to set them
+ both.
- - category : debugger
- name : PROCTABLE_SIZE
+ - category : ch3
+ name : CH3_EAGER_MAX_MSG_SIZE
type : int
- default : 64
- description : >-
- Size of the "MPIR" debugger interface proctable (process table).
-
- - category : debugger
- name : PROCTABLE_PRINT
- type : boolean
- default : true
- description : >-
- If true, dump the proctable entries at MPIR_WaitForDebugger-time.
- (currently compile-time disabled by "#if 0")
-
- - category : error_handling
- name : ERROR_CHECKING
- type : boolean
- default : true
+ default : 131072
description : >-
- If true, perform checks for errors, typically to verify valid inputs
- to MPI routines. Only effective when MPICH is configured with
- --enable-error-checking=runtime .
+ This parameter controls the message size at which CH3 switches
+ from eager to rendezvous mode.
- - category : error_handling
- name : PRINT_ERROR_STACK
- type : boolean
- default : true
+ - category : ch3
+ name : CH3_PORT_RANGE
+ alt-env :
+ - PORTRANGE
+ - PORT_RANGE
+ type : range
+ default : "0:0"
description : >-
- If true, print an error stack trace at error handling time.
+ The MPIR_PARAM_CH3_PORT_RANGE environment variable allows you to
+ specify the range of TCP ports to be used by the process
+ manager and the MPICH library. The format of this variable is
+ <low>:<high>.
- - category : error_handling
- name : CHOP_ERROR_STACK
+ ##############################################################
+ # nemesis parameters
+ - category : nemesis
+ name : NEMESIS_POLLS_BEFORE_YIELD
type : int
- default : 0
+ default : 1000
description : >-
- If >0, truncate error stack output lines this many characters
- wide. If 0, do not truncate, and if <0 use a sensible default.
+ When MPICH is in a busy waiting loop, it will periodically
+ call a function to yield the processor. This parameter sets
+ the number of loops before the yield function is called. A
+ value of 0 disables yielding.
- - category : intranode
+ - category : nemesis
name : NEMESIS_LMT_DMA_THRESHOLD
type : int
- # 2048*1024 == 2MiB
default : 2097152
description : >-
Messages larger than this size will use the "dma" (knem)
@@ -335,46 +422,11 @@ parameters:
should be used for communication.
- category : nemesis
- name : CH3_INTERFACE_HOSTNAME
- alt-env :
- - INTERFACE_HOSTNAME
- type : string
- defaultliteral : NULL
- description : >-
- If non-NULL, this parameter specifies the IP address that
- other processes should use when connecting to this process.
- This parameter is mutually exclusive with the
- MPIR_PARAM_CH3_NETWORK_IFACE parameter and it is an error to set them
- both.
-
- - category : nemesis
- name : NEMESIS_TCP_NETWORK_IFACE
- alt-env :
- - NETWORK_IFACE
- type : string
- defaultliteral : NULL
- description : >-
- If non-NULL, this parameter specifies which pseudo-ethernet
- interface the tcp netmod should use (e.g., "eth1", "ib0").
- Note, this is a Linux-specific parameter.
- This parameter is mutually exclusive with the
- MPICH_INTERFACE_HOSTNAME parameter and it is an error to set
- them both.
-
- - category : nemesis
- name : NEMESIS_TCP_HOST_LOOKUP_RETRIES
- type : int
- default : 10
- description : >-
- This parameter controls the number of times to retry the
- gethostbyname() function before giving up.
-
- - category : nemesis
name : NEMESIS_SHM_EAGER_MAX_SZ
type : int
default : -1
description : >-
- This parameter controls the message size at which Nemesis
+ This parameter controls the message size at which Nemesis
switches from eager to rendezvous mode for shared memory.
If this parameter is set to -1, then Nemesis will choose
an appropriate value.
@@ -391,40 +443,6 @@ parameters:
then Nemesis will choose an appropriate value.
- category : nemesis
- name : NEMESIS_PORTALS_COMM_OVERRIDES
- type : boolean
- default : true
- description : >-
- If set to false, communication override functionality will be
- disabled for netmods that provide the override feature.
- # Note the netmod must implement this functionality by not
- # setting the comm_ops table in any VC.
-
- - category : ch3
- name : CH3_EAGER_MAX_MSG_SIZE
- type : int
- default : 131072
- description : >-
- This parameter controls the message size at which CH3 switches
- from eager to rendezvous mode.
-
-
- ##############################################################
- # debugging parameters
- - category : debugger
- name : DEBUG_HOLD
- type : boolean
- default : false
- description : >-
- If true, causes processes to wait in MPI_Init and
- MPI_Initthread for a debugger to be attached. Once the
- debugger has attached, the variable 'hold' should be set to 0
- in order to allow the process to continue (e.g., in gdb, "set
- hold=0").
-
- ##############################################################
- # checkpointing parameters
- - category : checkpointing
name : NEMESIS_ENABLE_CKPOINT
type : boolean
default : false
@@ -432,61 +450,41 @@ parameters:
If true, enables checkpointing support and returns an error if
checkpointing library cannot be initialized.
- ##############################################################
- # fault-tolerance parameters
- - category : fault_tolerance
- name : ENABLE_COLL_FT_RET
- type : boolean
- default : false
- description : >-
- NOT COMPATIBLE WITH NONBLOCKING COLLECTIVES (see tt#1601)!!!
- Collectives called on a communicator with a failed process
- should not hang, however the result of the operation may be
- invalid even though the function returns MPI_SUCCESS. This
- option enables an experimental feature that will return an error
- if the result of the collective is invalid.
-
- ##############################################################
- # memory parameters
- - category : memory
- name : ABORT_ON_LEAKED_HANDLES
- type : boolean
- default : false
+ ##############################################################
+ # nemesis TCP parameters
+ - category : nemesis
+ name : NEMESIS_TCP_NETWORK_IFACE
+ alt-env :
+ - NETWORK_IFACE
+ type : string
+ defaultliteral : NULL
description : >-
- If true, MPI will call MPI_Abort at MPI_Finalize if any MPI object
- handles have been leaked. For example, if MPI_Comm_dup is called
- without calling a corresponding MPI_Comm_free. For uninteresting
- reasons, enabling this option may prevent all known object leaks from
- being reported. MPICH must have been configure with
- "--enable-g=handlealloc" or better in order for this functionality to
- work.
+ If non-NULL, this parameter specifies which pseudo-ethernet
+ interface the tcp netmod should use (e.g., "eth1", "ib0").
+ Note, this is a Linux-specific parameter.
+ This parameter is mutually exclusive with the
+ MPIR_PARAM_CH3_INTERFACE_HOSTNAME parameter and it is an error to set
+ them both.
- ############################
- # sockets parameters
- - category : sockets
- name : CH3_PORT_RANGE
- alt-env :
- - PORTRANGE
- - PORT_RANGE
- type : range
- default : "0:0"
+ - category : nemesis
+ name : NEMESIS_TCP_HOST_LOOKUP_RETRIES
+ type : int
+ default : 10
description : >-
- The MPICH_PORT_RANGE environment variable allows you to
- specify the range of TCP ports to be used by the process
- manager and the MPICH library. The format of this variable is
- <low>:<high>.
+ This parameter controls the number of times to retry the
+ gethostbyname() function before giving up.
- ############################
- # threads parameters
- - category : threads
- name : CTXID_EAGER_SIZE
- type : int
- default : 2
+ ##############################################################
+ # nemesis portals parameters
+ - category : nemesis
+ name : NEMESIS_PORTALS_COMM_OVERRIDES
+ type : boolean
+ default : true
description : >-
- The MPICH_CTXID_EAGER_SIZE environment variable allows you to
- specify how many words in the context ID mask will be set aside
- for the eager allocation protocol. If the application is running
- out of context IDs, reducing this value may help.
+ If set to false, communication override functionality will be
+ disabled for netmods that provide the override feature.
+ # Note the netmod must implement this functionality by not
+ # setting the comm_ops table in any VC.
...
http://git.mpich.org/mpich.git/commitdiff/fa950cb50d36b94397604db30546b41dc…
commit fa950cb50d36b94397604db30546b41dc60f0e77
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Tue May 14 21:51:07 2013 -0500
Make parameter names consistent.
All CH3 parameters start with CH3_ now. All nemesis parameters start
with NEMESIS_. For netmod specific parameters, we use
NEMESIS_<netmod>_.
Reviewed by Charles Archer @ IBM.
diff --git a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c
index e784524..1863ba0 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/tcp/tcp_init.c
@@ -234,16 +234,16 @@ static int GetSockInterfaceAddr(int myRank, char *ifname, int maxIfname,
MPIU_Assert(maxIfname);
ifname[0] = '\0';
- MPIU_ERR_CHKANDJUMP(MPIR_PARAM_INTERFACE_HOSTNAME && MPIR_PARAM_NETWORK_IFACE, mpi_errno, MPI_ERR_OTHER, "**ifname_and_hostname");
+ MPIU_ERR_CHKANDJUMP(MPIR_PARAM_CH3_INTERFACE_HOSTNAME && MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE, mpi_errno, MPI_ERR_OTHER, "**ifname_and_hostname");
/* Set "not found" for ifaddr */
ifaddr->len = 0;
/* Check if user specified ethernet interface name, e.g., ib0, eth1 */
- if (MPIR_PARAM_NETWORK_IFACE) {
+ if (MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE) {
int len;
- mpi_errno = MPIDI_Get_IP_for_iface(MPIR_PARAM_NETWORK_IFACE, ifaddr, &ifaddrFound);
- MPIU_ERR_CHKANDJUMP1(mpi_errno || !ifaddrFound, mpi_errno, MPI_ERR_OTHER, "**iface_notfound", "**iface_notfound %s", MPIR_PARAM_NETWORK_IFACE);
+ mpi_errno = MPIDI_Get_IP_for_iface(MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE, ifaddr, &ifaddrFound);
+ MPIU_ERR_CHKANDJUMP1(mpi_errno || !ifaddrFound, mpi_errno, MPI_ERR_OTHER, "**iface_notfound", "**iface_notfound %s", MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE);
MPIU_DBG_MSG_FMT(CH3_CONNECT, VERBOSE, (MPIU_DBG_FDEST,
"ifaddrFound=TRUE ifaddr->type=%d ifaddr->len=%d ifaddr->ifaddr[0-3]=%#08x",
@@ -256,7 +256,7 @@ static int GetSockInterfaceAddr(int myRank, char *ifname, int maxIfname,
}
/* Check for a host name supplied through an environment variable */
- ifname_string = MPIR_PARAM_INTERFACE_HOSTNAME;
+ ifname_string = MPIR_PARAM_CH3_INTERFACE_HOSTNAME;
if (!ifname_string) {
/* See if there is a per-process name for the interfaces (e.g.,
the process manager only delievers the same values for the
@@ -305,7 +305,7 @@ static int GetSockInterfaceAddr(int myRank, char *ifname, int maxIfname,
if (!ifaddrFound) {
int i;
struct hostent *info = NULL;
- for (i = 0; i < MPIR_PARAM_HOST_LOOKUP_RETRIES; ++i) {
+ for (i = 0; i < MPIR_PARAM_NEMESIS_TCP_HOST_LOOKUP_RETRIES; ++i) {
info = gethostbyname( ifname_string );
if (info || h_errno != TRY_AGAIN)
break;
@@ -558,11 +558,11 @@ int MPID_nem_tcp_bind (int sockfd)
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_TCP_BIND);
- MPIU_ERR_CHKANDJUMP(MPIR_PARAM_PORT_RANGE.low < 0 || MPIR_PARAM_PORT_RANGE.low > MPIR_PARAM_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
+ MPIU_ERR_CHKANDJUMP(MPIR_PARAM_CH3_PORT_RANGE.low < 0 || MPIR_PARAM_CH3_PORT_RANGE.low > MPIR_PARAM_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
/* default MPICH_PORT_RANGE is {0,0} so bind will use any available port */
ret = 0;
- for (port = MPIR_PARAM_PORT_RANGE.low; port <= MPIR_PARAM_PORT_RANGE.high; ++port)
+ for (port = MPIR_PARAM_CH3_PORT_RANGE.low; port <= MPIR_PARAM_CH3_PORT_RANGE.high; ++port)
{
memset ((void *)&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
diff --git a/src/mpid/ch3/channels/nemesis/netmod/wintcp/wintcp_init.c b/src/mpid/ch3/channels/nemesis/netmod/wintcp/wintcp_init.c
index 86e42fb..0d04c1d 100644
--- a/src/mpid/ch3/channels/nemesis/netmod/wintcp/wintcp_init.c
+++ b/src/mpid/ch3/channels/nemesis/netmod/wintcp/wintcp_init.c
@@ -421,13 +421,13 @@ int MPID_nem_newtcp_module_bind (MPIU_SOCKW_Sockfd_t sockfd)
MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_NEWTCP_MODULE_BIND);
- MPIU_ERR_CHKANDJUMP(MPIR_PARAM_PORT_RANGE.low < 0 || MPIR_PARAM_PORT_RANGE.low > MPIR_PARAM_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
+ MPIU_ERR_CHKANDJUMP(MPIR_PARAM_CH3_PORT_RANGE.low < 0 || MPIR_PARAM_CH3_PORT_RANGE.low > MPIR_PARAM_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
memset((void *)&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
- mpi_errno = MPIU_SOCKW_Bind_port_range(sockfd, &sin, MPIR_PARAM_PORT_RANGE.low, MPIR_PARAM_PORT_RANGE.high);
+ mpi_errno = MPIU_SOCKW_Bind_port_range(sockfd, &sin, MPIR_PARAM_CH3_PORT_RANGE.low, MPIR_PARAM_CH3_PORT_RANGE.high);
if(mpi_errno != MPI_SUCCESS) MPIU_ERR_POP(mpi_errno);
fn_exit:
diff --git a/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c b/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
index 19df691..a928362 100644
--- a/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
+++ b/src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c
@@ -513,15 +513,15 @@ MPID_nem_vc_init (MPIDI_VC_t *vc)
vc_ch->lmt_active_lmt = NULL;
vc_ch->lmt_enqueued = FALSE;
- if (MPIR_PARAM_SHM_EAGER_MAX_SZ == -1)
+ if (MPIR_PARAM_NEMESIS_SHM_EAGER_MAX_SZ == -1)
vc->eager_max_msg_sz = MPID_NEM_MPICH_DATA_LEN - sizeof(MPIDI_CH3_Pkt_t);
else
- vc->eager_max_msg_sz = MPIR_PARAM_SHM_EAGER_MAX_SZ;
+ vc->eager_max_msg_sz = MPIR_PARAM_NEMESIS_SHM_EAGER_MAX_SZ;
- if (MPIR_PARAM_SHM_READY_EAGER_MAX_SZ == -2)
+ if (MPIR_PARAM_NEMESIS_SHM_READY_EAGER_MAX_SZ == -2)
vc->ready_eager_max_msg_sz = vc->eager_max_msg_sz; /* force local ready sends to use LMT */
else
- vc->ready_eager_max_msg_sz = MPIR_PARAM_SHM_READY_EAGER_MAX_SZ;
+ vc->ready_eager_max_msg_sz = MPIR_PARAM_NEMESIS_SHM_READY_EAGER_MAX_SZ;
MPIU_DBG_MSG(VC, VERBOSE, "vc using shared memory");
}
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 6ee752f..3c73497 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -379,8 +379,8 @@ int MPIDI_Win_fence(int assert, MPID_Win *win_ptr)
this, significant overhead is added once the
number of requests exceeds the threshold, since the
number that are completed in a call may be small. */
- if (nRequest > MPIR_PARAM_RMA_NREQUEST_THRESHOLD &&
- nRequest - nRequestNew > MPIR_PARAM_RMA_NREQUEST_NEW_THRESHOLD) {
+ if (nRequest > MPIR_PARAM_CH3_RMA_NREQUEST_THRESHOLD &&
+ nRequest - nRequestNew > MPIR_PARAM_CH3_RMA_NREQUEST_NEW_THRESHOLD) {
int nDone = 0;
MPIDI_CH3I_RMAListPartialComplete(win_ptr, ops_list, curr_ptr, &nDone);
/* if (nDone > 0) printf( "nDone = %d\n", nDone ); */
@@ -875,7 +875,7 @@ static int MPIDI_CH3I_Send_contig_acc_msg(MPIDI_RMA_Op_t *rma_op,
MPID_Datatype_get_size_macro(rma_op->origin_datatype, origin_type_size);
/* FIXME: Make this size check efficient and match the packet type */
len = rma_op->origin_count * origin_type_size;
- if (MPIR_PARAM_RMA_ACC_IMMED && len <= MPIDI_RMA_IMMED_INTS*sizeof(int)) {
+ if (MPIR_PARAM_CH3_RMA_ACC_IMMED && len <= MPIDI_RMA_IMMED_INTS*sizeof(int)) {
MPIDI_CH3_Pkt_accum_immed_t * accumi_pkt = &upkt.accum_immed;
void *dest = accumi_pkt->data, *src = rma_op->origin_addr;
@@ -1675,8 +1675,8 @@ int MPIDI_Win_complete(MPID_Win *win_ptr)
nRequest++;
MPIU_INSTR_COUNTER_INCR(wincomplete_reqs,1);
curr_ptr = curr_ptr->next;
- if (nRequest > MPIR_PARAM_RMA_NREQUEST_THRESHOLD &&
- nRequest - nRequestNew > MPIR_PARAM_RMA_NREQUEST_NEW_THRESHOLD) {
+ if (nRequest > MPIR_PARAM_CH3_RMA_NREQUEST_THRESHOLD &&
+ nRequest - nRequestNew > MPIR_PARAM_CH3_RMA_NREQUEST_NEW_THRESHOLD) {
int nDone = 0;
MPIDI_CH3I_RMAListPartialComplete(win_ptr, ops_list, curr_ptr, &nDone);
nRequest -= nDone;
@@ -1939,7 +1939,7 @@ int MPIDI_Win_lock(int lock_type, int dest, int assert, MPID_Win *win_ptr)
mpi_errno = MPIDI_CH3I_Wait_for_lock_granted(win_ptr, dest);
if (mpi_errno) { MPIU_ERR_POP(mpi_errno); }
}
- else if (MPIR_PARAM_RMA_LOCK_IMMED && ((assert & MPI_MODE_NOCHECK) == 0)) {
+ else if (MPIR_PARAM_CH3_RMA_LOCK_IMMED && ((assert & MPI_MODE_NOCHECK) == 0)) {
/* TODO: Make this mode of operation available through an assert
argument or info key. */
mpi_errno = MPIDI_CH3I_Send_lock_msg(dest, lock_type, win_ptr);
@@ -2021,7 +2021,7 @@ int MPIDI_Win_unlock(int dest, MPID_Win *win_ptr)
/* TODO: MPI-3: Add lock_all->op optimization. */
/* LOCK-OP-UNLOCK Optimization -- This optimization can't be used if we
have already requested the lock. */
- if ( MPIR_PARAM_RMA_MERGE_LOCK_OP_UNLOCK &&
+ if ( MPIR_PARAM_CH3_RMA_MERGE_LOCK_OP_UNLOCK &&
win_ptr->targets[dest].remote_lock_state == MPIDI_CH3_WIN_LOCK_CALLED &&
rma_op && rma_op->next == NULL /* There is only one op */ &&
rma_op->type != MPIDI_RMA_COMPARE_AND_SWAP &&
@@ -2655,8 +2655,8 @@ static int MPIDI_CH3I_Do_passive_target_rma(MPID_Win *win_ptr, int target_rank,
nRequest++;
MPIU_INSTR_COUNTER_INCR(winunlock_reqs,1);
curr_ptr = curr_ptr->next;
- if (nRequest > MPIR_PARAM_RMA_NREQUEST_THRESHOLD &&
- nRequest - nRequestNew > MPIR_PARAM_RMA_NREQUEST_NEW_THRESHOLD) {
+ if (nRequest > MPIR_PARAM_CH3_RMA_NREQUEST_THRESHOLD &&
+ nRequest - nRequestNew > MPIR_PARAM_CH3_RMA_NREQUEST_NEW_THRESHOLD) {
int nDone = 0;
MPIDI_CH3I_RMAListPartialComplete(win_ptr,
&win_ptr->targets[target_rank].rma_ops_list,
diff --git a/src/mpid/ch3/src/mpid_vc.c b/src/mpid/ch3/src/mpid_vc.c
index 0d4afa6..cf511bd 100644
--- a/src/mpid/ch3/src/mpid_vc.c
+++ b/src/mpid/ch3/src/mpid_vc.c
@@ -1120,7 +1120,7 @@ int MPIDI_Populate_vc_node_ids(MPIDI_PG_t *pg, int our_pg_rank)
#ifdef ENABLED_NO_LOCAL
no_local = 1;
#else
- no_local = MPIR_PARAM_NOLOCAL;
+ no_local = MPIR_PARAM_CH3_NOLOCAL;
#endif
/* Used for debugging on a single machine: Odd procs on a node are
@@ -1129,7 +1129,7 @@ int MPIDI_Populate_vc_node_ids(MPIDI_PG_t *pg, int our_pg_rank)
#ifdef ENABLED_ODD_EVEN_CLIQUES
odd_even_cliques = 1;
#else
- odd_even_cliques = MPIR_PARAM_ODD_EVEN_CLIQUES;
+ odd_even_cliques = MPIR_PARAM_CH3_ODD_EVEN_CLIQUES;
#endif
if (no_local) {
diff --git a/src/mpid/common/sock/iocp/sock.c b/src/mpid/common/sock/iocp/sock.c
index 0098b13..e838d71 100644
--- a/src/mpid/common/sock/iocp/sock.c
+++ b/src/mpid/common/sock/iocp/sock.c
@@ -142,11 +142,11 @@ static int easy_create_ranged(SOCKET *sock, int port, unsigned long addr)
return mpi_errno;
}
- MPIU_ERR_CHKANDJUMP(MPIR_PARAM_PORT_RANGE.low < 0 || MPIR_PARAM_PORT_RANGE.low > MPIR_PARAM_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
- if (port == 0 && MPIR_PARAM_PORT_RANGE.low != 0 && MPIR_PARAM_PORT_RANGE.high != 0)
+ MPIU_ERR_CHKANDJUMP(MPIR_PARAM_CH3_PORT_RANGE.low < 0 || MPIR_PARAM_CH3_PORT_RANGE.low > MPIR_PARAM_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
+ if (port == 0 && MPIR_PARAM_CH3_PORT_RANGE.low != 0 && MPIR_PARAM_CH3_PORT_RANGE.high != 0)
{
use_range = 1;
- port = MPIR_PARAM_PORT_RANGE.low;
+ port = MPIR_PARAM_CH3_PORT_RANGE.low;
}
memset(&sockAddr,0,sizeof(sockAddr));
@@ -162,7 +162,7 @@ static int easy_create_ranged(SOCKET *sock, int port, unsigned long addr)
if (use_range)
{
port++;
- if (port > MPIR_PARAM_PORT_RANGE.high)
+ if (port > MPIR_PARAM_CH3_PORT_RANGE.high)
{
mpi_errno = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, FCNAME, __LINE__, MPIDU_SOCK_ERR_FAIL, "**socket", 0);
return mpi_errno;
diff --git a/src/mpid/common/sock/poll/sock_post.i b/src/mpid/common/sock/poll/sock_post.i
index e2d927c..9161ce1 100644
--- a/src/mpid/common/sock/poll/sock_post.i
+++ b/src/mpid/common/sock/poll/sock_post.i
@@ -333,10 +333,10 @@ int MPIDU_Sock_listen(struct MPIDU_Sock_set * sock_set, void * user_ptr,
int portnum;
/* see if we actually want to find values within a range */
- MPIU_ERR_CHKANDJUMP(MPIR_PARAM_PORT_RANGE.low < 0 || MPIR_PARAM_PORT_RANGE.low > MPIR_PARAM_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
+ MPIU_ERR_CHKANDJUMP(MPIR_PARAM_CH3_PORT_RANGE.low < 0 || MPIR_PARAM_CH3_PORT_RANGE.low > MPIR_PARAM_CH3_PORT_RANGE.high, mpi_errno, MPI_ERR_OTHER, "**badportrange");
/* default MPICH_PORT_RANGE is {0,0} so bind will use any available port */
- for (portnum = MPIR_PARAM_PORT_RANGE.low; portnum <= MPIR_PARAM_PORT_RANGE.high; ++portnum) {
+ for (portnum = MPIR_PARAM_CH3_PORT_RANGE.low; portnum <= MPIR_PARAM_CH3_PORT_RANGE.high; ++portnum) {
memset( (void *)&addr, 0, sizeof(addr) );
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
diff --git a/src/pm/hydra/ui/mpich/mpiexec.c b/src/pm/hydra/ui/mpich/mpiexec.c
index e9f01e1..83fbcfa 100644
--- a/src/pm/hydra/ui/mpich/mpiexec.c
+++ b/src/pm/hydra/ui/mpich/mpiexec.c
@@ -311,7 +311,7 @@ int main(int argc, char **argv)
* range. */
if (MPL_env2str("MPIEXEC_PORTRANGE", (const char **) &HYD_server_info.port_range) ||
MPL_env2str("MPIEXEC_PORT_RANGE", (const char **) &HYD_server_info.port_range) ||
- MPL_env2str("MPICH_PORT_RANGE", (const char **) &HYD_server_info.port_range))
+ MPL_env2str("MPIR_PARAM_CH3_PORT_RANGE", (const char **) &HYD_server_info.port_range))
HYD_server_info.port_range = HYDU_strdup(HYD_server_info.port_range);
/* Add the stdout/stderr callback handlers */
diff --git a/src/pm/hydra/ui/mpich/utils.c b/src/pm/hydra/ui/mpich/utils.c
index 3c6b48f..65eb3e0 100644
--- a/src/pm/hydra/ui/mpich/utils.c
+++ b/src/pm/hydra/ui/mpich/utils.c
@@ -1553,7 +1553,8 @@ static HYD_status set_default_values(void)
"cannot set iface and force hostname propagation");
}
- HYDU_append_env_to_list("MPICH_NETWORK_IFACE", HYD_server_info.user_global.iface,
+ HYDU_append_env_to_list("MPIR_PARAM_NEMESIS_TCP_NETWORK_IFACE",
+ HYD_server_info.user_global.iface,
&HYD_server_info.user_global.global_env.system);
/* Disable hostname propagation */
@@ -1563,7 +1564,7 @@ static HYD_status set_default_values(void)
/* If hostname propagation is requested (or not set), set the
* environment variable for doing that */
if (hostname_propagation || hostname_propagation == -1)
- HYD_server_info.iface_ip_env_name = HYDU_strdup("MPICH_INTERFACE_HOSTNAME");
+ HYD_server_info.iface_ip_env_name = HYDU_strdup("MPIR_PARAM_CH3_INTERFACE_HOSTNAME");
/* Default universe size if the user did not specify anything is
* INFINITE */
@@ -1753,7 +1754,7 @@ HYD_status HYD_uii_mpx_get_parameters(char **t_argv)
/* If the user set the checkpoint prefix, set env var to enable
* checkpointing on the processes */
if (HYD_server_info.user_global.ckpoint_prefix)
- HYDU_append_env_to_list("MPICH_ENABLE_CKPOINT", "1",
+ HYDU_append_env_to_list("MPIR_PARAM_ENABLE_CKPOINT", "1",
&HYD_server_info.user_global.global_env.system);
/* Preset common environment options for disabling STDIO buffering
diff --git a/src/util/param/params.yml b/src/util/param/params.yml
index adb6e56..93c50e8 100644
--- a/src/util/param/params.yml
+++ b/src/util/param/params.yml
@@ -194,14 +194,14 @@ parameters:
##############################################################
# RMA parameters
- category : rma
- name : RMA_ACC_IMMED
+ name : CH3_RMA_ACC_IMMED
type : boolean
default : true
description : >-
Use the immediate accumulate optimization
- category : rma
- name : RMA_NREQUEST_THRESHOLD
+ name : CH3_RMA_NREQUEST_THRESHOLD
type : int
default : 4000
description : >-
@@ -211,7 +211,7 @@ parameters:
requests or other internal resources
- category : rma
- name : RMA_NREQUEST_NEW_THRESHOLD
+ name : CH3_RMA_NREQUEST_NEW_THRESHOLD
type : int
default : 128
description : >-
@@ -221,7 +221,7 @@ parameters:
or other internal resources.
- category : rma
- name : RMA_LOCK_IMMED
+ name : CH3_RMA_LOCK_IMMED
type : boolean
default : false
description : >-
@@ -229,7 +229,7 @@ parameters:
behavior is to defer the lock request until the call to MPI_Win_unlock.
- category : rma
- name : RMA_MERGE_LOCK_OP_UNLOCK
+ name : CH3_RMA_MERGE_LOCK_OP_UNLOCK
type : boolean
default : true
description : >-
@@ -239,9 +239,9 @@ parameters:
##############################################################
# intranode communication parameters
- category : intranode
- name : NOLOCAL
+ name : CH3_NOLOCAL
alt-env :
- - NO_LOCAL
+ - CH3_NO_LOCAL
type : boolean
default : false
description : >-
@@ -250,9 +250,9 @@ parameters:
memory communication hierarchical collectives.
- category : intranode
- name : ODD_EVEN_CLIQUES
+ name : CH3_ODD_EVEN_CLIQUES
alt-env :
- - EVEN_ODD_CLIQUES
+ - CH3_EVEN_ODD_CLIQUES
type : boolean
default : false
description : >-
@@ -261,7 +261,7 @@ parameters:
a single machine.
- category : intranode
- name : POLLS_BEFORE_YIELD
+ name : NEMESIS_POLLS_BEFORE_YIELD
type : int
default : 1000
description : >-
@@ -318,7 +318,7 @@ parameters:
wide. If 0, do not truncate, and if <0 use a sensible default.
- category : intranode
- name : NEM_LMT_DMA_THRESHOLD
+ name : NEMESIS_LMT_DMA_THRESHOLD
type : int
# 2048*1024 == 2MiB
default : 2097152
@@ -335,18 +335,22 @@ parameters:
should be used for communication.
- category : nemesis
- name : INTERFACE_HOSTNAME
+ name : CH3_INTERFACE_HOSTNAME
+ alt-env :
+ - INTERFACE_HOSTNAME
type : string
defaultliteral : NULL
description : >-
If non-NULL, this parameter specifies the IP address that
other processes should use when connecting to this process.
This parameter is mutually exclusive with the
- MPICH_NETWORK_IFACE parameter and it is an error to set them
+ MPIR_PARAM_CH3_NETWORK_IFACE parameter and it is an error to set them
both.
- category : nemesis
- name : NETWORK_IFACE
+ name : NEMESIS_TCP_NETWORK_IFACE
+ alt-env :
+ - NETWORK_IFACE
type : string
defaultliteral : NULL
description : >-
@@ -358,7 +362,7 @@ parameters:
them both.
- category : nemesis
- name : HOST_LOOKUP_RETRIES
+ name : NEMESIS_TCP_HOST_LOOKUP_RETRIES
type : int
default : 10
description : >-
@@ -366,7 +370,7 @@ parameters:
gethostbyname() function before giving up.
- category : nemesis
- name : SHM_EAGER_MAX_SZ
+ name : NEMESIS_SHM_EAGER_MAX_SZ
type : int
default : -1
description : >-
@@ -376,7 +380,7 @@ parameters:
an appropriate value.
- category : nemesis
- name : SHM_READY_EAGER_MAX_SZ
+ name : NEMESIS_SHM_READY_EAGER_MAX_SZ
type : int
default : -2
description : >-
@@ -387,13 +391,12 @@ parameters:
then Nemesis will choose an appropriate value.
- category : nemesis
- name : COMM_OVERRIDES
+ name : NEMESIS_PORTALS_COMM_OVERRIDES
type : boolean
default : true
description : >-
If set to false, communication override functionality will be
- disabled for netmods that provide the override feature. Some
- netmods may not honor this flag.
+ disabled for netmods that provide the override feature.
# Note the netmod must implement this functionality by not
# setting the comm_ops table in any VC.
@@ -422,7 +425,7 @@ parameters:
##############################################################
# checkpointing parameters
- category : checkpointing
- name : ENABLE_CKPOINT
+ name : NEMESIS_ENABLE_CKPOINT
type : boolean
default : false
description : >-
@@ -461,9 +464,10 @@ parameters:
############################
# sockets parameters
- category : sockets
- name : PORT_RANGE
+ name : CH3_PORT_RANGE
alt-env :
- PORTRANGE
+ - PORT_RANGE
type : range
default : "0:0"
description : >-
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 8 -
maint/genparams | 10 +
src/mpi/coll/allreduce.c | 11 +-
src/mpi/coll/barrier.c | 8 +-
src/mpi/coll/bcast.c | 12 +-
src/mpi/coll/iallreduce.c | 5 +-
src/mpi/coll/ibcast.c | 5 +-
src/mpi/coll/ireduce.c | 5 +-
src/mpi/coll/reduce.c | 18 +-
.../ch3/channels/nemesis/netmod/tcp/tcp_init.c | 16 +-
.../channels/nemesis/netmod/wintcp/wintcp_init.c | 4 +-
src/mpid/ch3/channels/nemesis/src/mpid_nem_init.c | 8 +-
src/mpid/ch3/src/ch3u_rma_sync.c | 18 +-
src/mpid/ch3/src/mpid_vc.c | 4 +-
src/mpid/common/sock/iocp/sock.c | 8 +-
src/mpid/common/sock/poll/sock_post.i | 4 +-
src/mpid/pamid/include/mpidi_datatypes.h | 2 +-
src/mpid/pamid/include/mpidi_platform.h | 7 +-
src/mpid/pamid/include/mpidpre.h | 4 +
src/mpid/pamid/include/pamix.h | 6 +-
src/mpid/pamid/src/mpid_init.c | 2 +-
src/mpid/pamid/src/mpidi_env.c | 8 +
src/mpid/pamid/src/pamix/pamix.c | 13 +-
src/pm/hydra/ui/mpich/mpiexec.c | 2 +-
src/pm/hydra/ui/mpich/utils.c | 7 +-
src/util/param/params.yml | 492 ++++++++++++--------
26 files changed, 415 insertions(+), 272 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-208-g50d4516
by noreply@mpich.org 16 May '13
by noreply@mpich.org 16 May '13
16 May '13
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 50d4516ddfe85f041ca52a0953c1d930ce1051cf (commit)
from 1288cceddb93cc69130fcdd2cb6f96ba43431a63 (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/50d4516ddfe85f041ca52a0953c1d930c…
commit 50d4516ddfe85f041ca52a0953c1d930ce1051cf
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Thu May 16 06:57:43 2013 -0500
Reverted [c478a4fe] which seems to be causing build failures.
No reviewer.
diff --git a/confdb/aclocal_runlog.m4 b/confdb/aclocal_runlog.m4
index e7b5b32..a538975 100644
--- a/confdb/aclocal_runlog.m4
+++ b/confdb/aclocal_runlog.m4
@@ -44,6 +44,82 @@ PAC_COMMAND_IFELSE([$1 > $pac_TESTLOG],[
rm -f $pac_TESTLOG
])
+
+dnl PAC_VAR_PUSHVAL(VARNAME, [LastSavedValue]))
+dnl
+dnl Save the content of the shell variable, VARNAME, onto a stack.
+dnl The saved value of VARNAME is restorable with respect to the nesting
+dnl of the macro.
+dnl
+dnl The Last saved value of VARNAME on the stack is stored in shell variable
+dnl pac_LastSavedValueOf_$VARNAME if the 2nd argument is NOT supplied.
+dnl If the 2nd argument is present, the last saved value will be stored
+dnl in the 2nd argument instead.
+dnl
+dnl The First saved value of VARNAME on the stack is stored in shell variable
+dnl dnl pac_FirstSavedValueOf_$VARNAME.
+dnl
+AC_DEFUN([PAC_VAR_PUSHVAL],[
+# START of PUSHVAL
+dnl define local m4-name pac_stk_level.
+AS_VAR_PUSHDEF([pac_stk_level], [pac_stk_$1_level])
+AS_VAR_SET_IF([pac_stk_level],[
+ dnl autoconf < 2.64 does not have AS_VAR_ARITH, so use expr instead.
+ AS_VAR_SET([pac_stk_level], [`expr $pac_stk_level + 1`])
+],[
+ AS_VAR_SET([pac_stk_level], [0])
+])
+dnl AS_ECHO_N(["PUSHVAL: pac_stk_level = $pac_stk_level, "])
+dnl Save the content of VARNAME, i.e. $VARNAME, onto the stack.
+AS_VAR_SET([pac_stk_$1_$pac_stk_level],[$$1])
+AS_VAR_IF([pac_stk_level], [0], [
+ dnl Save the 1st pushed value of VARNAME as pac_FirstSavedValueOf_$VARNAME
+ AS_VAR_COPY([pac_FirstSavedValueOf_$1],[pac_stk_$1_$pac_stk_level])
+])
+ifelse([$2],[],[
+ dnl Save the last pushed value of VARNAME as pac_LastSavedValueOf_$VARNAME
+ AS_VAR_COPY([pac_LastSavedValueOf_$1],[pac_stk_$1_$pac_stk_level])
+ dnl AS_ECHO(["pac_LastSavedValueOf_$1 = $pac_LastSavedValueOf_$1"])
+],[
+ dnl Save the last pushed value of VARNAME as $2
+ AS_VAR_COPY([$2],[pac_stk_$1_$pac_stk_level])
+ dnl AS_ECHO(["$2 = $$2"])
+])
+AS_VAR_POPDEF([pac_stk_level])
+# END of PUSHVAL
+])
+dnl
+dnl
+dnl
+dnl PAC_VAR_POPVAL(VARNAME)
+dnl
+dnl Restore variable, VARNAME, from the stack.
+dnl This macro is safe with respect to the nesting.
+dnl Some minimal checking of nesting balance of PAC_VAR_PUSH[POP]VAL()
+dnl is done here.
+dnl
+AC_DEFUN([PAC_VAR_POPVAL],[
+# START of POPVAL
+dnl define local m4-name pac_stk_level.
+AS_VAR_PUSHDEF([pac_stk_level], [pac_stk_$1_level])
+AS_VAR_SET_IF([pac_stk_level],[
+ AS_VAR_IF([pac_stk_level],[-1],[
+ AC_MSG_WARN(["Imbalance of PUSHVAL/POPVAL of $1"])
+ ],[
+ dnl AS_ECHO_N(["POPVAL: pac_stk_level = $pac_stk_level, "])
+ AS_VAR_COPY([$1],[pac_stk_$1_$pac_stk_level])
+ dnl AS_ECHO(["popped_val = $$1"])
+ dnl autoconf < 2.64 does not have AS_VAR_ARITH, so use expr instead.
+ AS_VAR_SET([pac_stk_level], [`expr $pac_stk_level - 1`])
+ ])
+],[
+ AC_MSG_WARN(["Uninitialized PUSHVAL/POPVAL of $1"])
+])
+AS_VAR_POPDEF([pac_stk_level])
+# END of POPVAL
+])
+dnl
+dnl
dnl
dnl PAC_COMPILE_IFELSE_LOG is a wrapper around AC_COMPILE_IFELSE with the
dnl output of ac_compile to a specified logfile instead of AS_MESSAGE_LOG_FD
@@ -67,12 +143,22 @@ dnl
dnl Replace ">&AS_MESSAGE_LOG_FD" by "> FILE 2>&1" in ac_compile.
dnl Save a copy of ac_compile on a stack
dnl which is safe through nested invocations of this macro.
-PAC_PUSH_FLAG([ac_compile])
-ac_compile="`echo $ac_compile | sed -e 's|>.*$|> $1 2>\&1|g'`"
-AC_COMPILE_IFELSE([$2],[$3],[$4])
-PAC_POP_FLAG([ac_compile])
+PAC_VAR_PUSHVAL([ac_compile])
+dnl Modify ac_compile based on the unmodified ac_compile.
+echo "ac_compile: $ac_compile"
+echo "pac_FirstSavedValueOf_ac_compile: $pac_FirstSavedValueOf_ac_compile"
+ac_compile="`echo $pac_FirstSavedValueOf_ac_compile | sed -e 's|>.*$|> $1 2>\&1|g'`"
+AC_COMPILE_IFELSE([$2],[
+ ifelse([$3],[],[:],[$3])
+],[
+ ifelse([$4],[],[:],[$4])
])
-
+dnl Restore the original ac_compile from the stack.
+PAC_VAR_POPVAL([ac_compile])
+])
+dnl
+dnl
+dnl
dnl PAC_LINK_IFELSE_LOG is a wrapper around AC_LINK_IFELSE with the
dnl output of ac_link to a specified logfile instead of AS_MESSAGE_LOG_FD
dnl
@@ -95,12 +181,22 @@ dnl
dnl Replace ">&AS_MESSAGE_LOG_FD" by "> FILE 2>&1" in ac_link.
dnl Save a copy of ac_link on a stack
dnl which is safe through nested invocations of this macro.
-PAC_PUSH_FLAG([ac_link])
-ac_link="`echo $ac_link | sed -e 's|>.*$|> $1 2>\&1|g'`"
-AC_LINK_IFELSE([$2],[$3],[$4])
-PAC_POP_FLAG([ac_link])
+PAC_VAR_PUSHVAL([ac_link])
+dnl Modify ac_link based on the unmodified ac_link.
+echo "ac_link: $ac_link"
+echo "pac_FirstSavedValueOf_ac_link: $pac_FirstSavedValueOf_ac_link"
+ac_link="`echo $pac_FirstSavedValueOf_ac_link | sed -e 's|>.*$|> $1 2>\&1|g'`"
+dnl
+AC_LINK_IFELSE([$2],[
+ ifelse([$3],[],[:],[$3])
+],[
+ ifelse([$4],[],[:],[$4])
])
-
+dnl Restore the original ac_link from the stack.
+PAC_VAR_POPVAL([ac_link])
+])
+dnl
+dnl
dnl
dnl PAC_COMPLINK_IFELSE (input1, input2, [action-if-true], [action-if-false])
dnl
@@ -113,10 +209,18 @@ dnl
AC_DEFUN([PAC_COMPLINK_IFELSE],[
AC_COMPILE_IFELSE([$1],[
PAC_RUNLOG([mv conftest.$OBJEXT pac_conftest.$OBJEXT])
- PAC_PUSH_FLAG([LIBS])
- LIBS="pac_conftest.$OBJEXT $LIBS"
- AC_LINK_IFELSE([$2],[$3],[$4])
- PAC_POP_FLAG([LIBS])
+ PAC_VAR_PUSHVAL([LIBS])
+ echo "LIBS: $LIBS"
+ echo "pac_FirstSavedValueOf_LIBS: $pac_FirstSavedValueOf_LIBS"
+ LIBS="pac_conftest.$OBJEXT $pac_FirstSavedValueOf_LIBS"
+ AC_LINK_IFELSE([$2],[
+ ifelse([$3],[],[:],[$3])
+ ],[
+ ifelse([$4],[],[:],[$4])
+ ])
+ PAC_VAR_POPVAL([LIBS])
rm -f pac_conftest.$OBJEXT
-],[$4])
+],[
+ ifelse([$4],[],[:],[$4])
+])
])
-----------------------------------------------------------------------
Summary of changes:
confdb/aclocal_runlog.m4 | 134 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 119 insertions(+), 15 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-207-g1288cce
by noreply@mpich.org 15 May '13
by noreply@mpich.org 15 May '13
15 May '13
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 1288cceddb93cc69130fcdd2cb6f96ba43431a63 (commit)
from faf3fcc019e2e626fde00732bbf0593e8dda289a (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/1288cceddb93cc69130fcdd2cb6f96ba4…
commit 1288cceddb93cc69130fcdd2cb6f96ba43431a63
Author: Charles Archer <archerc(a)us.ibm.com>
Date: Tue May 14 11:37:11 2013 -0400
XL compiler prototype fix
diff --git a/src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c b/src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
index 1b84f53..4351ae9 100644
--- a/src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
+++ b/src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c
@@ -45,7 +45,7 @@ typedef struct {
extern transactionID_struct *_transactionID_list;
-
+void MPIDI_get_allremote_leaders(int *tid_arr, MPID_Comm *comm_ptr);
void MPIDI_send_AM_to_remote_leader_on_disconnect(int taskid, long long comm_cntr, int whichAM)
{
-----------------------------------------------------------------------
Summary of changes:
src/mpid/pamid/src/dyntask/mpid_comm_disconnect.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-206-gfaf3fcc
by noreply@mpich.org 15 May '13
by noreply@mpich.org 15 May '13
15 May '13
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 faf3fcc019e2e626fde00732bbf0593e8dda289a (commit)
via c756a7d8de9fa1c4390e28407c4109450a72ae8f (commit)
via afa9629ee9c05239272e365be4530618809deba7 (commit)
via 935805866050f525609866e3eaef36e2f9650b60 (commit)
via 978d1c70e5c1c5453a6c5afb849a5c66656ffbc9 (commit)
via 7da2069ffbe8ecd67a467a72b3c4e701a1bb6d99 (commit)
via 1820f7c5cf91c5edbdfd256dbad663824286dcae (commit)
via bfa19b4415a3ab2d95cd1ad456787f788b5a9bf3 (commit)
via 5a63aaf051c3efd62d18b632a8539eb373a5cbb0 (commit)
via d92aabf2eb291c603487ad9e41e8d8a35a7e0a66 (commit)
via 662d6ff062ec050ac84d9a45295b8f53d39e2554 (commit)
from 63e1d88fe9182bb1bc60488957624d467a68b9c8 (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/faf3fcc019e2e626fde00732bbf0593e8…
commit faf3fcc019e2e626fde00732bbf0593e8dda289a
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Wed May 1 13:43:52 2013 -0400
updates for token flow control
(ibm) D190238
(ibm) 1fe9a013d48ef38d1505dd96977fbe105b2a2b90
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
This is the 2nd commit message:
BGQ build break fix
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c b/src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
index c063bbc..bcdf5d5 100644
--- a/src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
+++ b/src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c
@@ -47,8 +47,8 @@ MPIDI_RecvCB(pami_context_t context,
#if TOKEN_FLOW_CONTROL
int rettoks=0;
void *uebuf;
- int source;
#endif
+ pami_task_t source;
if (recv == NULL)
{
if (msginfo->isSync)
@@ -77,6 +77,7 @@ MPIDI_RecvCB(pami_context_t context,
MPID_assert(msginfo_size == sizeof(MPIDI_MsgInfo));
MPID_Request * rreq = NULL;
+ source=PAMIX_Endpoint_query(sender);
/* -------------------- */
/* Match the request. */
@@ -89,7 +90,6 @@ MPIDI_RecvCB(pami_context_t context,
if (TOKEN_FLOW_CONTROL_ON)
{
#if TOKEN_FLOW_CONTROL
- source=PAMIX_Endpoint_query(sender);
MPIDI_Receive_tokens(msginfo,source);
#else
MPID_assert_always(0);
@@ -98,17 +98,8 @@ MPIDI_RecvCB(pami_context_t context,
#ifndef OUT_OF_ORDER_HANDLING
rreq = MPIDI_Recvq_FDP(rank, tag, context_id);
#else
- rreq = MPIDI_Recvq_FDP(rank, PAMIX_Endpoint_query(sender), tag, context_id, msginfo->MPIseqno);
+ rreq = MPIDI_Recvq_FDP(rank, source, tag, context_id, msginfo->MPIseqno);
#endif
- if ((TOKEN_FLOW_CONTROL_ON) && (MPIDI_MUST_RETURN_TOKENS(sender)))
- {
- #if TOKEN_FLOW_CONTROL
- rettoks=MPIDI_Token_cntr[sender].rettoks;
- MPIDI_Token_cntr[sender].rettoks=0;
- #else
- MPID_assert_always(0);
- #endif
- }
/* Match not found */
if (unlikely(rreq == NULL))
@@ -155,7 +146,7 @@ MPIDI_RecvCB(pami_context_t context,
#ifndef OUT_OF_ORDER_HANDLING
rreq = MPIDI_Recvq_FDP(rank, tag, context_id);
#else
- rreq = MPIDI_Recvq_FDP(rank, PAMIX_Endpoint_query(sender), tag, context_id, msginfo->MPIseqno);
+ rreq = MPIDI_Recvq_FDP(rank, source, tag, context_id, msginfo->MPIseqno);
#endif
if (unlikely(rreq == NULL))
@@ -188,7 +179,8 @@ MPIDI_RecvCB(pami_context_t context,
if (TOKEN_FLOW_CONTROL_ON)
{
#if TOKEN_FLOW_CONTROL
- MPIDI_Update_rettoks(sender);
+ MPIDI_Update_rettoks(source);
+ MPIDI_Must_return_tokens(context,source);
#else
MPID_assert_always(0);
#endif
@@ -226,7 +218,7 @@ MPIDI_RecvCB(pami_context_t context,
/* ----------------------------- */
if (unlikely(msginfo->isSync))
- MPIDI_SyncAck_post(context, rreq, PAMIX_Endpoint_query(sender));
+ MPIDI_SyncAck_post(context, rreq, source);
/* ----------------------------------------- */
/* Calculate message length for reception. */
@@ -308,14 +300,13 @@ MPIDI_RecvCB(pami_context_t context,
MPIDI_Trace_buf[(PAMIX_Endpoint_query(sender))].R[(rreq->mpid.idx)].bufadd=rreq->mpid.userbuf;
#endif
+ fn_exit_eager:
#ifdef OUT_OF_ORDER_HANDLING
- if (MPIDI_In_cntr[PAMIX_Endpoint_query(sender)].n_OutOfOrderMsgs > 0) {
- MPIDI_Recvq_process_out_of_order_msgs(PAMIX_Endpoint_query(sender), context);
+ if (MPIDI_In_cntr[source].n_OutOfOrderMsgs > 0) {
+ MPIDI_Recvq_process_out_of_order_msgs(source, context);
}
#endif
- fn_exit_eager:
- MPIDI_Return_tokens(context, source, rettoks);
/* ---------------------------------------- */
/* Signal that the recv has been started. */
/* ---------------------------------------- */
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c b/src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
index 3ec4228..45a7963 100644
--- a/src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
+++ b/src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c
@@ -79,7 +79,7 @@ MPIDI_RecvRzvCB_impl(pami_context_t context,
rreq->status.MPI_TAG = tag;
rreq->status.count = envelope->length;
MPIDI_Request_setPeerRank_comm(rreq, rank);
- MPIDI_Request_setPeerRank_pami(rreq, PAMIX_Endpoint_query(sender));
+ MPIDI_Request_setPeerRank_pami(rreq, source);
MPIDI_Request_cpyPeerRequestH (rreq, msginfo);
MPIDI_Request_setSync (rreq, msginfo->isSync);
MPIDI_Request_setRzv (rreq, 1);
@@ -117,11 +117,10 @@ MPIDI_RecvRzvCB_impl(pami_context_t context,
MPIDI_Trace_buf[source].R[(rreq->mpid.idx)].rlen=envelope->length;
MPIDI_Trace_buf[source].R[(rreq->mpid.idx)].sync=msginfo->isSync;
#endif
- if ((TOKEN_FLOW_CONTROL_ON) && (MPIDI_MUST_RETURN_TOKENS(sender)))
+ if (TOKEN_FLOW_CONTROL_ON)
{
#if TOKEN_FLOW_CONTROL
- rettoks=MPIDI_Token_cntr[sender].rettoks;
- MPIDI_Token_cntr[sender].rettoks=0;
+ MPIDI_Must_return_tokens(context,source);
#else
MPID_assert_always(0);
#endif
@@ -180,9 +179,6 @@ MPIDI_RecvRzvCB_impl(pami_context_t context,
#endif
MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
}
-#if TOKEN_FLOW_CONTROL
- MPIDI_Return_tokens(context, source, rettoks);
-#endif
/* ---------------------------------------- */
/* Signal that the recv has been started. */
/* ---------------------------------------- */
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_callback_short.c b/src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
index 73fd42d..14a6f2e 100644
--- a/src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
+++ b/src/mpid/pamid/src/pt2pt/mpidi_callback_short.c
@@ -80,18 +80,6 @@ MPIDI_RecvShortCB(pami_context_t context,
#if (MPIDI_STATISTICS)
MPID_NSTAT(mpid_statp->earlyArrivals);
#endif
- if (TOKEN_FLOW_CONTROL_ON)
- {
- #if TOKEN_FLOW_CONTROL
- if (MPIDI_MUST_RETURN_TOKENS(source))
- {
- rettoks=MPIDI_Token_cntr[source].rettoks;
- MPIDI_Token_cntr[source].rettoks=0;
- }
- #else
- MPID_assert_always(0);
- #endif
- }
MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
MPID_Request *newreq = MPIDI_Request_create2();
MPID_assert(newreq != NULL);
@@ -154,6 +142,7 @@ MPIDI_RecvShortCB(pami_context_t context,
{
#if TOKEN_FLOW_CONTROL
MPIDI_Update_rettoks(source);
+ MPIDI_Must_return_tokens(context,source);
#else
MPID_assert_always(0);
#endif
@@ -214,16 +203,15 @@ MPIDI_RecvShortCB(pami_context_t context,
#endif
MPIDI_Request_complete(rreq);
+ fn_exit_short:
#ifdef OUT_OF_ORDER_HANDLING
MPIU_THREAD_CS_ENTER(MSGQUEUE,0);
- if ((rank != MPI_ANY_SOURCE) && (MPIDI_In_cntr[source].n_OutOfOrderMsgs>0)) {
+ if (MPIDI_In_cntr[source].n_OutOfOrderMsgs>0) {
MPIDI_Recvq_process_out_of_order_msgs(source, context);
}
MPIU_THREAD_CS_EXIT(MSGQUEUE,0);
#endif
- fn_exit_short:
- MPIDI_Return_tokens(context, source, rettoks);
/* ---------------------------------------- */
/* Signal that the recv has been started. */
/* ---------------------------------------- */
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_done.c b/src/mpid/pamid/src/pt2pt/mpidi_done.c
index 0b5dd7a..c71acba 100644
--- a/src/mpid/pamid/src/pt2pt/mpidi_done.c
+++ b/src/mpid/pamid/src/pt2pt/mpidi_done.c
@@ -168,6 +168,7 @@ void MPIDI_Recvq_process_out_of_order_msgs(pami_task_t src, pami_context_t conte
MPIDI_Token_cntr[src].unmatched--;
MPIDI_Update_rettoks(src);
}
+ MPIDI_Must_return_tokens(context,src);
#else
MPID_assert_always(0);
#endif
diff --git a/src/mpid/pamid/src/pt2pt/mpidi_recv.h b/src/mpid/pamid/src/pt2pt/mpidi_recv.h
index 2ca6879..8ff9f10 100644
--- a/src/mpid/pamid/src/pt2pt/mpidi_recv.h
+++ b/src/mpid/pamid/src/pt2pt/mpidi_recv.h
@@ -42,11 +42,7 @@ extern char *EagerLimit;
#define MPIDI_Receive_tokens MPIDI_Receive_tokens_inline
#define MPIDI_Update_rettoks MPIDI_Update_rettoks_inline
#define MPIDI_Alloc_lock MPIDI_Alloc_lock_inline
-
-#define MPIDI_MUST_RETURN_TOKENS(dd) \
- (MPIDI_Token_cntr[(dd)].rettoks \
- && (MPIDI_Token_cntr[(dd)].rettoks + MPIDI_Token_cntr[(dd)].unmatched \
- >= MPIDI_tfctrl_hwmark))
+#define MPIDI_Must_return_tokens MPIDI_Must_return_tokens_inline
static inline void *
MPIDI_Return_tokens_inline(pami_context_t context, int dest, int tokens)
@@ -74,6 +70,23 @@ MPIDI_Return_tokens_inline(pami_context_t context, int dest, int tokens)
}
}
+
+static inline void *
+MPIDI_Must_return_tokens_inline(pami_context_t context,int dest)
+{
+ int rettoks=0;
+
+ if (MPIDI_Token_cntr[dest].rettoks
+ && (MPIDI_Token_cntr[dest].rettoks + MPIDI_Token_cntr[dest].unmatched
+ >= MPIDI_tfctrl_hwmark))
+ {
+ rettoks=MPIDI_Token_cntr[dest].rettoks;
+ MPIDI_Token_cntr[dest].rettoks=0;
+ MPIDI_Return_tokens_inline(context,dest,rettoks);
+
+ }
+}
+
static inline void *
MPIDI_Receive_tokens_inline(const MPIDI_MsgInfo *m, int dest)
{
@@ -101,7 +114,7 @@ MPIDI_Alloc_lock_inline(void **buf,size_t size)
#define MPIDI_Return_tokens(x,y,z)
#define MPIDI_Receive_tokens(x,y)
#define MPIDI_Update_rettoks(x)
-#define MPIDI_MUST_RETURN_TOKENS(x) (0)
+#define MPIDI_Must_return_tokens(x,y) (0)
#define MPIDI_Alloc_lock(x,y)
#endif
@@ -207,6 +220,7 @@ MPIDI_Recv(void * buf,
MPIDI_Token_cntr[(rreq->mpid.peer_pami)].unmatched--;
MPIDI_Update_rettoks(rreq->mpid.peer_pami);
}
+ MPIDI_Must_return_tokens(MPIDI_Context[0],(rreq->mpid.peer_pami));
#else
MPID_assert_always(0);
#endif
http://git.mpich.org/mpich.git/commitdiff/c756a7d8de9fa1c4390e28407c4109450…
commit c756a7d8de9fa1c4390e28407c4109450a72ae8f
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Mon Apr 29 16:41:39 2013 -0400
32bit(2) reduce&allreduce fail MPI_LONG w/ collective_selected
(ibm) D189842
(ibm) 7Z8
(ibm) b4718cf2b8bf3ddb7d39e2fdf7aee7b87eac8e1f
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/coll/coll_utils.c b/src/mpid/pamid/src/coll/coll_utils.c
index f4bcb0d..50a3d55 100644
--- a/src/mpid/pamid/src/coll/coll_utils.c
+++ b/src/mpid/pamid/src/coll/coll_utils.c
@@ -53,12 +53,11 @@ pami_result_t MPIDI_Pami_post_wrapper(pami_context_t context, void *cookie)
(x) == MPI_UNSIGNED_CHAR || (x) == MPI_UINT8_T )
/* sizeof(longlong) == sizeof(long) == sizeof(uint64) on bgq */
-#define isS_LONG(x) ( (x) == MPI_LONG || (x) == MPI_AINT || \
- (x) == MPI_OFFSET )
+#define isS_LONG(x) ( (x) == MPI_LONG || (x) == MPI_AINT )
#define isUS_LONG(x) ( (x) == MPI_UNSIGNED_LONG )
-#define isS_LONG_LONG(x) ( (x) == MPI_INT64_T || \
+#define isS_LONG_LONG(x) ( (x) == MPI_INT64_T || (x) == MPI_OFFSET || \
(x) == MPI_INTEGER8 || (x) == MPI_LONG_LONG || \
(x) == MPI_LONG_LONG_INT )
http://git.mpich.org/mpich.git/commitdiff/afa9629ee9c05239272e365be45306188…
commit afa9629ee9c05239272e365be4530618809deba7
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Mon Apr 29 13:55:15 2013 -0400
32bit reduce&allreduce fail MPI_LONG w/ collective_selected
(ibm) D189842
(ibm) 7Z8
(ibm) 017c9d99634bcfb225c4ede785709e3f3644a193
(ibm) a42fc06e0ed99acd968fc18405199bc98e5b1190
(ibm) 5326308445643a91cdd15ec7b402285aef9095e4
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/coll/coll_utils.c b/src/mpid/pamid/src/coll/coll_utils.c
index fcbbf95..f4bcb0d 100644
--- a/src/mpid/pamid/src/coll/coll_utils.c
+++ b/src/mpid/pamid/src/coll/coll_utils.c
@@ -53,13 +53,18 @@ pami_result_t MPIDI_Pami_post_wrapper(pami_context_t context, void *cookie)
(x) == MPI_UNSIGNED_CHAR || (x) == MPI_UINT8_T )
/* sizeof(longlong) == sizeof(long) == sizeof(uint64) on bgq */
-#define isS_LONG(x) ( (x) == MPI_INT64_T || (x) == MPI_LONG || \
+#define isS_LONG(x) ( (x) == MPI_LONG || (x) == MPI_AINT || \
+ (x) == MPI_OFFSET )
+
+#define isUS_LONG(x) ( (x) == MPI_UNSIGNED_LONG )
+
+#define isS_LONG_LONG(x) ( (x) == MPI_INT64_T || \
(x) == MPI_INTEGER8 || (x) == MPI_LONG_LONG || \
- (x) == MPI_LONG_LONG_INT || (x) == MPI_AINT || \
- (x) == MPI_OFFSET)
+ (x) == MPI_LONG_LONG_INT )
+
+#define isUS_LONG_LONG(x) ( (x) == MPI_UINT64_T || (x) == MPI_UNSIGNED_LONG_LONG )
+
-#define isUS_LONG(x) ( (x) == MPI_UINT64_T || (x) == MPI_UNSIGNED_LONG || \
- (x) == MPI_UNSIGNED_LONG_LONG)
#define isFLOAT(x) ( (x) == MPI_FLOAT || (x) == MPI_REAL)
@@ -137,8 +142,10 @@ int MPIDI_Datatype_to_pami(MPI_Datatype dt,
else if(isUS_CHAR(dt)) *pdt = PAMI_TYPE_UNSIGNED_CHAR;
else if(isS_SHORT(dt)) *pdt = PAMI_TYPE_SIGNED_SHORT;
else if(isUS_SHORT(dt)) *pdt = PAMI_TYPE_UNSIGNED_SHORT;
- else if(isS_LONG(dt)) *pdt = PAMI_TYPE_SIGNED_LONG_LONG;
- else if(isUS_LONG(dt)) *pdt = PAMI_TYPE_UNSIGNED_LONG_LONG;
+ else if(isS_LONG(dt)) *pdt = PAMI_TYPE_SIGNED_LONG;
+ else if(isUS_LONG(dt)) *pdt = PAMI_TYPE_UNSIGNED_LONG;
+ else if(isS_LONG_LONG(dt)) *pdt = PAMI_TYPE_SIGNED_LONG_LONG;
+ else if(isUS_LONG_LONG(dt)) *pdt = PAMI_TYPE_UNSIGNED_LONG_LONG;
else if(isSINGLE_COMPLEX(dt)) *pdt = PAMI_TYPE_SINGLE_COMPLEX;
else if(isDOUBLE_COMPLEX(dt)) *pdt = PAMI_TYPE_DOUBLE_COMPLEX;
else if(isLOC_TYPE(dt))
http://git.mpich.org/mpich.git/commitdiff/935805866050f525609866e3eaef36e2f…
commit 935805866050f525609866e3eaef36e2f9650b60
Author: Haizhu Liu <haizhu(a)us.ibm.com>
Date: Mon Apr 22 23:31:09 2013 -0400
second spawn reuse taskid would fail with ERROR 421
(ibm) D189968
(ibm) 4260cf9294bc75af0cb175823885f20d1d2b1ee8
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/dyntask/mpidi_port.c b/src/mpid/pamid/src/dyntask/mpidi_port.c
index 7bd2806..a90e24e 100644
--- a/src/mpid/pamid/src/dyntask/mpidi_port.c
+++ b/src/mpid/pamid/src/dyntask/mpidi_port.c
@@ -582,6 +582,7 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
}
/* broadcast the received info to local processes */
+ TRACE_ERR("accept:broadcasting 2 ints - %d and %d\n", recv_ints[0], recv_ints[1]);
mpi_errno = MPIR_Bcast_intra(recv_ints, 3, MPI_INT, root, comm_ptr, &errflag);
if (mpi_errno) TRACE_ERR("MPIR_Bcast_intra returned with mpi_errno=%d\n", mpi_errno);
@@ -663,6 +664,7 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root,
mpi_errno = MPIDI_SetupNewIntercomm( comm_ptr, remote_comm_size,
remote_translation, n_remote_pgs, remote_pg, *newcomm );
(*newcomm)->mpid.world_intercomm_cntr = comm_cntr;
+ WORLDINTCOMMCNTR = comm_cntr;
MPIDI_add_new_tranid(comm_cntr);
/* MPIDI_Parse_connection_info(n_remote_pgs, remote_pg); */
@@ -1321,6 +1323,7 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root,
mpi_errno = MPIDI_SetupNewIntercomm( comm_ptr, remote_comm_size,
remote_translation, n_remote_pgs, remote_pg, intercomm );
intercomm->mpid.world_intercomm_cntr = comm_cntr;
+ WORLDINTCOMMCNTR = comm_cntr;
MPIDI_add_new_tranid(comm_cntr);
if (mpi_errno != MPI_SUCCESS) {
@@ -1442,8 +1445,8 @@ static int MPIDI_SetupNewIntercomm( struct MPID_Comm *comm_ptr, int remote_comm_
remote_translation[i].pg_rank, remote_translation[i].pg_taskid,&intercomm->vcr[i]);
TRACE_ERR("MPIDI_SetupNewIntercomm - pg_id=%s pg_rank=%d pg_taskid=%d intercomm->vcr[%d]->taskid=%d intercomm->vcr[%d]->pg=%x\n ", remote_pg[remote_translation[i].pg_index]->id, remote_translation[i].pg_rank, remote_translation[i].pg_taskid, i, intercomm->vcr[i]->taskid, i, intercomm->vcr[i]->pg);
PAMI_Endpoint_create(MPIDI_Client, remote_translation[i].pg_taskid, 0, &dest);
- /*PAMI_Resume(MPIDI_Context[0],
- &dest, 1); */
+ PAMI_Resume(MPIDI_Context[0],
+ &dest, 1);
}
MPIDI_Parse_connection_info(n_remote_pgs, remote_pg);
http://git.mpich.org/mpich.git/commitdiff/978d1c70e5c1c5453a6c5afb849a5c666…
commit 978d1c70e5c1c5453a6c5afb849a5c66656ffbc9
Author: Sameh Sharkawi <sssharka(a)us.ibm.com>
Date: Mon Apr 15 19:16:24 2013 -0400
Correctly handling non-continuous data in vector collectives
(ibm) D189791
(ibm) 921af973d312be39763878d9478bea10187ad762
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/coll/allgather/mpido_allgather.c b/src/mpid/pamid/src/coll/allgather/mpido_allgather.c
index 49e6aef..47e9eb4 100644
--- a/src/mpid/pamid/src/coll/allgather/mpido_allgather.c
+++ b/src/mpid/pamid/src/coll/allgather/mpido_allgather.c
@@ -642,11 +642,17 @@ MPIDO_Allgather_simple(const void *sendbuf,
MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
"Fatal: Cannot allocate pack buffer");
}
- }
-
if(sendbuf == MPI_IN_PLACE)
+ {
sbuf = PAMI_IN_PLACE;
- else
+ size_t extent;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ MPIR_Localcopy(recvbuf + (rank*recvcount*extent), recvcount, recvtype,
+ rcv_noncontig_buff + (rank*recv_size), recv_size,MPI_CHAR);
+ }
+ }
+
+ if(sendbuf != MPI_IN_PLACE)
{
MPIDI_Datatype_get_info(sendcount,
sendtype,
diff --git a/src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c b/src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
index 95874b9..3fd0eb6 100644
--- a/src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
+++ b/src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
@@ -624,6 +624,7 @@ MPIDO_Allgatherv_simple(const void *sendbuf,
MPI_Aint recv_true_lb = 0;
size_t send_size = 0;
size_t recv_size = 0;
+ size_t rcvtypelen = 0;
int snd_data_contig = 0, rcv_data_contig = 0;
void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
int scount=sendcount;
@@ -631,9 +632,20 @@ MPIDO_Allgatherv_simple(const void *sendbuf,
char *sbuf, *rbuf;
pami_type_t stype = NULL, rtype;
const int rank = comm_ptr->rank;
+ const int size = comm_ptr->local_size;
const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
+ int recvcontinuous=0;
+ size_t totalrecvcount=0;
+ int *lrecvdispls = NULL; /* possible local displs calculated for noncontinous */
+ int *lrecvcounts = NULL;/* possible local counts calculated for noncontinous */
+ const int *precvdispls = displs; /* pointer to displs to use as pami parmi */
+ const int *precvcounts = recvcounts; /* pointer to counts to use as pami parmi */
+ int inplace = sendbuf == MPI_IN_PLACE? 1 : 0;
+
+
volatile unsigned allgatherv_active = 1;
+ int recvok=PAMI_SUCCESS, sendok=PAMI_SUCCESS;
int tmp;
const pami_metadata_t *my_md;
@@ -641,14 +653,14 @@ MPIDO_Allgatherv_simple(const void *sendbuf,
MPIDI_Datatype_get_info(1,
recvtype,
rcv_data_contig,
- recv_size,
+ rcvtypelen,
dt_null,
recv_true_lb);
if(MPIDI_Pamix_collsel_advise != NULL)
{
advisor_algorithm_t advisor_algorithms[1];
- int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_ALLGATHERV_INT, recv_size * recvcounts[0], advisor_algorithms, 1);
+ int num_algorithms = MPIDI_Pamix_collsel_advise(mpid->collsel_fast_query, PAMI_XFER_ALLGATHERV_INT, rcvtypelen * recvcounts[0], advisor_algorithms, 1);
if(num_algorithms)
{
if(advisor_algorithms[0].algorithm_type == COLLSEL_EXTERNAL_ALGO)
@@ -660,44 +672,77 @@ MPIDO_Allgatherv_simple(const void *sendbuf,
}
}
- if((sendbuf != MPI_IN_PLACE) && (MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS))
+
+ if(!inplace)
{
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
- }
- if(MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS)
+ sendok = MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp);
+ MPIDI_Datatype_get_info(sendcount, sendtype, snd_data_contig, send_size, dt_null, send_true_lb);
+ sbuf = (char *)sendbuf + send_true_lb;
+ if(!snd_data_contig || (sendok != PAMI_SUCCESS))
{
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
- }
-
-
- if(sendbuf == MPI_IN_PLACE)
+ stype = PAMI_TYPE_UNSIGNED_CHAR;
+ scount = send_size;
+ if(!snd_data_contig)
{
- sbuf = PAMI_IN_PLACE;
- }
- else
+ snd_noncontig_buff = MPIU_Malloc(send_size);
+ sbuf = snd_noncontig_buff;
+ if(snd_noncontig_buff == NULL)
{
- MPIDI_Datatype_get_info(sendcount,
- sendtype,
- snd_data_contig,
- send_size,
- dt_null,
- send_true_lb);
- sbuf = (char *)sendbuf+send_true_lb;
+ MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
+ "Fatal: Cannot allocate pack buffer");
}
+ MPIR_Localcopy(sendbuf, sendcount, sendtype,
+ snd_noncontig_buff, send_size,MPI_CHAR);
+ }
+ }
+ }
+ else
+ sbuf = PAMI_IN_PLACE;
+ recvok = MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp);
rbuf = (char *)recvbuf+recv_true_lb;
-
- if(!snd_data_contig || !rcv_data_contig)
- {
- return MPIR_Allgatherv(sendbuf, sendcount, sendtype,
- recvbuf, recvcounts, displs, recvtype,
- comm_ptr, mpierrno);
+ if(!rcv_data_contig || (recvok != PAMI_SUCCESS))
+ {
+ rtype = PAMI_TYPE_UNSIGNED_CHAR;
+ totalrecvcount = recvcounts[0];
+ recvcontinuous = displs[0] == 0? 1 : 0 ;
+ int i;
+ precvdispls = lrecvdispls = MPIU_Malloc(size*sizeof(int));
+ precvcounts = lrecvcounts = MPIU_Malloc(size*sizeof(int));
+ lrecvdispls[0]= 0;
+ lrecvcounts[0]= rcvtypelen * recvcounts[0];
+ for(i=1; i<size; ++i)
+ {
+ lrecvdispls[i]= rcvtypelen * totalrecvcount;
+ totalrecvcount += recvcounts[i];
+ if(displs[i] != (displs[i-1] + recvcounts[i-1]))
+ recvcontinuous = 0;
+ lrecvcounts[i]= rcvtypelen * recvcounts[i];
+ }
+ recv_size = rcvtypelen * totalrecvcount;
+ TRACE_ERR("Pack receive rcv_contig %zu, recvok %zd, totalrecvcount %zu, recvcontinuous %zu, rcvtypelen %zu, recv_size %zu\n",
+ (size_t)rcv_data_contig, (size_t)recvok, (size_t)totalrecvcount, (size_t)recvcontinuous,(size_t)rcvtypelen, (size_t)recv_size);
+
+ rcv_noncontig_buff = MPIU_Malloc(recv_size);
+ rbuf = rcv_noncontig_buff;
+ if(rcv_noncontig_buff == NULL)
+ {
+ MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
+ "Fatal: Cannot allocate pack buffer");
+ }
+ if(inplace)
+ {
+ size_t extent;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ MPIR_Localcopy(recvbuf + displs[rank]*extent, recvcounts[rank], recvtype,
+ rcv_noncontig_buff + precvdispls[rank], precvcounts[rank],MPI_CHAR);
+ scount = precvcounts[rank];
+ stype = PAMI_TYPE_UNSIGNED_CHAR;
+ sbuf = PAMI_IN_PLACE;
+ }
}
+
pami_xfer_t allgatherv;
allgatherv.cb_done = allgatherv_cb_done;
allgatherv.cookie = (void *)&allgatherv_active;
@@ -706,8 +751,8 @@ MPIDO_Allgatherv_simple(const void *sendbuf,
allgatherv.cmd.xfer_allgatherv_int.stype = stype;/* stype is ignored when sndbuf == PAMI_IN_PLACE */
allgatherv.cmd.xfer_allgatherv_int.rtype = rtype;
allgatherv.cmd.xfer_allgatherv_int.stypecount = scount;
- allgatherv.cmd.xfer_allgatherv_int.rtypecounts = (int *) recvcounts;
- allgatherv.cmd.xfer_allgatherv_int.rdispls = (int *) displs;
+ allgatherv.cmd.xfer_allgatherv_int.rtypecounts = (int *) precvcounts;
+ allgatherv.cmd.xfer_allgatherv_int.rdispls = (int *) precvdispls;
allgatherv.algorithm = mpid->coll_algorithm[PAMI_XFER_ALLGATHERV_INT][0][0];
my_md = &mpid->coll_metadata[PAMI_XFER_ALLGATHERV_INT][0][0];
@@ -721,6 +766,36 @@ MPIDO_Allgatherv_simple(const void *sendbuf,
TRACE_ERR("Rank %d waiting on active %d\n", rank, allgatherv_active);
MPID_PROGRESS_WAIT_WHILE(allgatherv_active);
+ if(!rcv_data_contig || (recvok != PAMI_SUCCESS))
+ {
+ if(recvcontinuous)
+ {
+ MPIR_Localcopy(rcv_noncontig_buff, recv_size,MPI_CHAR,
+ recvbuf, totalrecvcount, recvtype);
+ }
+ else
+ {
+ size_t extent;
+ int i;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ for(i=0; i<size; ++i)
+ {
+ char* scbuf = (char*)rcv_noncontig_buff+ precvdispls[i];
+ char* rcbuf = (char*)recvbuf + displs[i]*extent;
+ MPIR_Localcopy(scbuf, precvcounts[i], MPI_CHAR,
+ rcbuf, recvcounts[i], recvtype);
+ TRACE_ERR("Pack recv src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)precvdispls[i],(size_t)i,(size_t)precvcounts[i],(size_t)precvdispls[i], *(int*)scbuf);
+ TRACE_ERR("Pack recv dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)displs[i],(size_t)i,(size_t)recvcounts[i],(size_t)displs[i], *(int*)rcbuf);
+ }
+ }
+ MPIU_Free(rcv_noncontig_buff);
+ }
+ if(!snd_data_contig) MPIU_Free(snd_noncontig_buff);
+ if(lrecvdispls) MPIU_Free(lrecvdispls);
+ if(lrecvcounts) MPIU_Free(lrecvcounts);
+
return MPI_SUCCESS;
}
diff --git a/src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c b/src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
index 3464c82..39a008f 100644
--- a/src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
+++ b/src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
@@ -234,6 +234,7 @@ int MPIDO_Alltoall_simple(const void *sendbuf,
MPIDI_Post_coll_t alltoall_post;
int sndlen, rcvlen, snd_contig = 1, rcv_contig = 1, pamidt=1;
int tmp;
+ const int rank = comm_ptr->rank;
const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
@@ -286,6 +287,13 @@ int MPIDO_Alltoall_simple(const void *sendbuf,
MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
"Fatal: Cannot allocate pack buffer");
}
+ if(sendbuf == MPI_IN_PLACE)
+ {
+ size_t extent;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ MPIR_Localcopy(recvbuf + (rank*recvcount*extent), recvcount, recvtype,
+ rcv_noncontig_buff + (rank*recv_size), recv_size,MPI_CHAR);
+ }
}
/* Alltoall is much simpler if bytes are required because we don't need to
diff --git a/src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c b/src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
index d970069..3934877 100644
--- a/src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
+++ b/src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
@@ -404,14 +404,33 @@ int MPIDO_Alltoallv_simple(const void *sendbuf,
{
TRACE_ERR("Entering MPIDO_Alltoallv_optimized\n");
volatile unsigned active = 1;
- int sndtypelen, rcvtypelen, snd_contig, rcv_contig;
+ int sndtypelen, rcvtypelen, snd_contig = 1, rcv_contig = 1;
MPID_Datatype *sdt, *rdt;
pami_type_t stype = NULL, rtype;
MPI_Aint sdt_true_lb = 0, rdt_true_lb;
MPIDI_Post_coll_t alltoallv_post;
- int pamidt = 1;
+ void *snd_noncontig_buff = NULL, *rcv_noncontig_buff = NULL;
+ void *sbuf = NULL, *rbuf = NULL;
+ int recvok=PAMI_SUCCESS, sendok=PAMI_SUCCESS;
int tmp;
const int rank = comm_ptr->rank;
+ const int size = comm_ptr->local_size;
+
+ int sendcontinuous , recvcontinuous=0;
+ size_t recv_size=0, send_size=0;
+ size_t totalrecvcount=0;
+ int *lrecvdispls = NULL; /* possible local displs calculated for noncontinous */
+ int *lsenddispls = NULL;/* possible local displs calculated for noncontinous */
+ int *lrecvcounts = NULL;/* possible local counts calculated for noncontinous */
+ int *lsendcounts = NULL;/* possible local counts calculated for noncontinous */
+ const int *precvdispls = recvdispls; /* pointer to displs to use as pami parmi */
+ const int *psenddispls = senddispls; /* pointer to displs to use as pami parmi */
+ const int *precvcounts = recvcounts; /* pointer to counts to use as pami parmi */
+ const int *psendcounts = sendcounts; /* pointer to counts to use as pami parmi */
+ int inplace = sendbuf == MPI_IN_PLACE? 1 : 0;
+
+
+
const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
/* We don't pack and unpack in alltoallv as we do in alltoall because alltoallv has
@@ -420,7 +439,7 @@ int MPIDO_Alltoallv_simple(const void *sendbuf,
will be the same on all tasks */
-
+ /* Check if collsel has MPICH algorithm as the best performing one, if so, call MPICH now w/o doing any conversions */
MPIDI_Datatype_get_info(1, recvtype, rcv_contig, rcvtypelen, rdt, rdt_true_lb);
if(MPIDI_Pamix_collsel_advise != NULL)
{
@@ -437,27 +456,149 @@ int MPIDO_Alltoallv_simple(const void *sendbuf,
}
}
- if(sendbuf != MPI_IN_PLACE && (MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp) != MPI_SUCCESS))
- pamidt = 0;
- if(MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS)
- pamidt = 0;
-
-
- if(sendbuf != MPI_IN_PLACE)
+ /* Now do checks on send data and datatypes (contig and contin) and do necessary conversions */
+ if(!inplace)
{
+ sendok = MPIDI_Datatype_to_pami(sendtype, &stype, -1, NULL, &tmp);
MPIDI_Datatype_get_info(1, sendtype, snd_contig, sndtypelen, sdt, sdt_true_lb);
- if(!snd_contig) pamidt = 0;
+ sbuf = (char *)sendbuf + sdt_true_lb;
+ if(!snd_contig || (sendok != PAMI_SUCCESS))
+ {
+ stype = PAMI_TYPE_UNSIGNED_CHAR;
+ size_t totalsendcount = sendcounts[0];
+ sendcontinuous = senddispls[0] == 0? 1 : 0 ;
+ int i;
+ psenddispls = lsenddispls = MPIU_Malloc(size*sizeof(int));
+ psendcounts = lsendcounts = MPIU_Malloc(size*sizeof(int));
+ lsenddispls[0]= 0;
+ lsendcounts[0]= sndtypelen * sendcounts[0];
+ for(i=1; i<size; ++i)
+ {
+ lsenddispls[i]= sndtypelen * totalsendcount;
+ totalsendcount += sendcounts[i];
+ if(senddispls[i] != (senddispls[i-1] + (sendcounts[i-1])))
+ sendcontinuous = 0;
+ lsendcounts[i]= sndtypelen * sendcounts[i];
}
- if(!rcv_contig) pamidt = 0;
-
-
- if(pamidt == 0)
+ send_size = sndtypelen * totalsendcount;
+ TRACE_ERR("Pack receive sndv_contig %zu, sendok %zd, totalsendcount %zu, sendcontinuous %zu, sndtypelen %zu, send_size %zu\n",
+ (size_t)snd_contig, (size_t)sendok, (size_t)totalsendcount, (size_t)sendcontinuous, (size_t) sndtypelen, (size_t)send_size);
+ snd_noncontig_buff = MPIU_Malloc(send_size);
+ sbuf = snd_noncontig_buff;
+ if(snd_noncontig_buff == NULL)
{
- return MPIR_Alltoallv(sendbuf, sendcounts, senddispls, sendtype,
- recvbuf, recvcounts, recvdispls, recvtype,
- comm_ptr, mpierrno);
-
+ MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
+ "Fatal: Cannot allocate pack buffer");
+ }
+ if(sendcontinuous)
+ {
+ MPIR_Localcopy(sendbuf, totalsendcount, sendtype,
+ snd_noncontig_buff, send_size,MPI_CHAR);
+ }
+ else
+ {
+ size_t extent;
+ MPID_Datatype_get_extent_macro(sendtype,extent);
+ for(i=0; i<size; ++i)
+ {
+ char* scbuf = (char*)sendbuf + senddispls[i]*extent;
+ char* rcbuf = (char*)snd_noncontig_buff + psenddispls[i];
+ MPIR_Localcopy(scbuf, sendcounts[i], sendtype,
+ rcbuf, psendcounts[i], MPI_CHAR);
+ TRACE_ERR("Pack send src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)senddispls[i],(size_t)i,(size_t)sendcounts[i],(size_t)senddispls[i], *(int*)scbuf);
+ TRACE_ERR("Pack send dest displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)i,(size_t)psenddispls[i],(size_t)i,(size_t)psendcounts[i],(size_t)psenddispls[i], *(int*)rcbuf);
+ }
+ }
+ }
+ }
+
+ recvok = MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp);
+ rbuf = (char *)recvbuf + rdt_true_lb;
+ if(!rcv_contig || (recvok != PAMI_SUCCESS))
+ {
+ rtype = PAMI_TYPE_UNSIGNED_CHAR;
+ totalrecvcount = recvcounts[0];
+ recvcontinuous = recvdispls[0] == 0? 1 : 0 ;
+ int i;
+ precvdispls = lrecvdispls = MPIU_Malloc(size*sizeof(int));
+ precvcounts = lrecvcounts = MPIU_Malloc(size*sizeof(int));
+ lrecvdispls[0]= 0;
+ lrecvcounts[0]= rcvtypelen * recvcounts[0];
+ for(i=1; i<size; ++i)
+ {
+ lrecvdispls[i]= rcvtypelen * totalrecvcount;
+ totalrecvcount += recvcounts[i];
+ if(recvdispls[i] != (recvdispls[i-1] + (recvcounts[i-1])))
+ recvcontinuous = 0;
+ lrecvcounts[i]= rcvtypelen * recvcounts[i];
}
+ recv_size = rcvtypelen * totalrecvcount;
+ TRACE_ERR("Pack receive rcv_contig %zu, recvok %zd, totalrecvcount %zu, recvcontinuous %zu, rcvtypelen %zu, recv_size %zu\n",
+ (size_t)rcv_contig, (size_t)recvok, (size_t)totalrecvcount, (size_t)recvcontinuous,(size_t)rcvtypelen, (size_t)recv_size);
+ rcv_noncontig_buff = MPIU_Malloc(recv_size);
+ rbuf = rcv_noncontig_buff;
+ if(rcv_noncontig_buff == NULL)
+ {
+ MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
+ "Fatal: Cannot allocate pack buffer");
+ }
+ /* need to copy it now if it's used for the send buffer and then do not do in place */
+ if(inplace)
+ {
+ inplace = 0;
+ stype = PAMI_TYPE_UNSIGNED_CHAR;
+ size_t totalsendcount = recvcounts[0];
+ sendcontinuous = recvdispls[0] == 0? 1 : 0 ;
+ int i;
+ psenddispls = lsenddispls = MPIU_Malloc(size*sizeof(int));
+ psendcounts = lsendcounts = MPIU_Malloc(size*sizeof(int));
+ lsenddispls[0]= 0;
+ lsendcounts[0]= rcvtypelen * recvcounts[0];
+ for(i=1; i<size; ++i)
+ {
+ lsenddispls[i]= rcvtypelen * totalsendcount;
+ totalsendcount += recvcounts[i];
+ if(recvdispls[i] != (recvdispls[i-1] + (recvcounts[i-1])))
+ sendcontinuous = 0;
+ lsendcounts[i]= rcvtypelen * recvcounts[i];
+ }
+ send_size = rcvtypelen * totalsendcount;
+ TRACE_ERR("Pack MPI_IN_PLACE receive sndv_contig %zu, sendok %zd, totalsendcount %zu, sendcontinuous %zu, rcvtypelen %zu, send_size %zu\n",
+ (size_t)snd_contig, (size_t)sendok, (size_t)totalsendcount, (size_t)sendcontinuous, (size_t) rcvtypelen, (size_t)send_size);
+ snd_noncontig_buff = MPIU_Malloc(send_size);
+ sbuf = snd_noncontig_buff;
+ if(snd_noncontig_buff == NULL)
+ {
+ MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
+ "Fatal: Cannot allocate pack buffer");
+ }
+ if(sendcontinuous)
+ {
+ MPIR_Localcopy(recvbuf, totalsendcount, recvtype,
+ snd_noncontig_buff, send_size,MPI_CHAR);
+ }
+ else
+ {
+ size_t extent;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ for(i=0; i<size; ++i)
+ {
+ char* scbuf = (char*)recvbuf + recvdispls[i]*extent;
+ char* rcbuf = (char*)snd_noncontig_buff + psenddispls[i];
+ MPIR_Localcopy(scbuf, recvcounts[i], recvtype,
+ rcbuf, psendcounts[i], MPI_CHAR);
+ TRACE_ERR("Pack send src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)recvdispls[i],(size_t)i,(size_t)recvcounts[i],(size_t)recvdispls[i], *(int*)scbuf);
+ TRACE_ERR("Pack send dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)psenddispls[i],(size_t)i,(size_t)psendcounts[i],(size_t)psenddispls[i], *(int*)rcbuf);
+ }
+ }
+ }
+ }
+
+
pami_xfer_t alltoallv;
const pami_metadata_t *my_alltoallv_md;
@@ -468,19 +609,24 @@ int MPIDO_Alltoallv_simple(const void *sendbuf,
alltoallv.cb_done = cb_alltoallv;
alltoallv.cookie = (void *)&active;
- alltoallv.cmd.xfer_alltoallv_int.stype = stype;/* stype is ignored when sndbuf == PAMI_IN_PLACE */
- alltoallv.cmd.xfer_alltoallv_int.sdispls = (int *) senddispls;
- alltoallv.cmd.xfer_alltoallv_int.stypecounts = (int *) sendcounts;
- alltoallv.cmd.xfer_alltoallv_int.sndbuf = (char *)sendbuf+sdt_true_lb;
-
- /* We won't bother with alltoallv since MPI is always going to be ints. */
- if(sendbuf == MPI_IN_PLACE)
+ if(inplace)
{
+ alltoallv.cmd.xfer_alltoallv_int.stype = rtype;
+ alltoallv.cmd.xfer_alltoallv_int.sdispls = (int *) precvdispls;
+ alltoallv.cmd.xfer_alltoallv_int.stypecounts = (int *) precvcounts;
alltoallv.cmd.xfer_alltoallv_int.sndbuf = PAMI_IN_PLACE;
}
- alltoallv.cmd.xfer_alltoallv_int.rcvbuf = (char *)recvbuf+rdt_true_lb;
- alltoallv.cmd.xfer_alltoallv_int.rdispls = (int *) recvdispls;
- alltoallv.cmd.xfer_alltoallv_int.rtypecounts = (int *) recvcounts;
+ else
+ {
+ alltoallv.cmd.xfer_alltoallv_int.stype = stype;
+ alltoallv.cmd.xfer_alltoallv_int.sdispls = (int *) psenddispls;
+ alltoallv.cmd.xfer_alltoallv_int.stypecounts = (int *) psendcounts;
+ alltoallv.cmd.xfer_alltoallv_int.sndbuf = sbuf;
+ }
+ alltoallv.cmd.xfer_alltoallv_int.rcvbuf = rbuf;
+
+ alltoallv.cmd.xfer_alltoallv_int.rdispls = (int *) precvdispls;
+ alltoallv.cmd.xfer_alltoallv_int.rtypecounts = (int *) precvcounts;
alltoallv.cmd.xfer_alltoallv_int.rtype = rtype;
@@ -490,6 +636,38 @@ int MPIDO_Alltoallv_simple(const void *sendbuf,
TRACE_ERR("%d waiting on active %d\n", rank, active);
MPID_PROGRESS_WAIT_WHILE(active);
+ if(!rcv_contig || (recvok != PAMI_SUCCESS))
+ {
+ if(recvcontinuous)
+ {
+ MPIR_Localcopy(rcv_noncontig_buff, recv_size,MPI_CHAR,
+ recvbuf, totalrecvcount, recvtype);
+ }
+ else
+ {
+ size_t extent;
+ int i;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ for(i=0; i<size; ++i)
+ {
+ char* scbuf = (char*)rcv_noncontig_buff+ precvdispls[i];
+ char* rcbuf = (char*)recvbuf + recvdispls[i]*extent;
+ MPIR_Localcopy(scbuf, precvcounts[i], MPI_CHAR,
+ rcbuf, recvcounts[i], recvtype);
+ TRACE_ERR("Pack recv src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)precvdispls[i],(size_t)i,(size_t)precvcounts[i],(size_t)precvdispls[i], *(int*)scbuf);
+ TRACE_ERR("Pack recv dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)recvdispls[i],(size_t)i,(size_t)recvcounts[i],(size_t)recvdispls[i], *(int*)rcbuf);
+ }
+ }
+ MPIU_Free(rcv_noncontig_buff);
+ }
+ if(!snd_contig || (sendok != PAMI_SUCCESS)) MPIU_Free(snd_noncontig_buff);
+ if(lrecvdispls) MPIU_Free(lrecvdispls);
+ if(lsenddispls) MPIU_Free(lsenddispls);
+ if(lrecvcounts) MPIU_Free(lrecvcounts);
+ if(lsendcounts) MPIU_Free(lsendcounts);
+
TRACE_ERR("Leaving alltoallv\n");
diff --git a/src/mpid/pamid/src/coll/gather/mpido_gather.c b/src/mpid/pamid/src/coll/gather/mpido_gather.c
index ac28c70..d521c1f 100644
--- a/src/mpid/pamid/src/coll/gather/mpido_gather.c
+++ b/src/mpid/pamid/src/coll/gather/mpido_gather.c
@@ -460,6 +460,13 @@ int MPIDO_Gather_simple(const void *sendbuf,
MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
"Fatal: Cannot allocate pack buffer");
}
+ if(sendbuf == MPI_IN_PLACE)
+ {
+ size_t extent;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ MPIR_Localcopy(recvbuf + (rank*recvcount*extent), recvcount, recvtype,
+ rcv_noncontig_buff + (rank*recv_size), recv_size,MPI_CHAR);
+ }
}
}
else
diff --git a/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c b/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
index 71caf3a..0c5f284 100644
--- a/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
+++ b/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
@@ -247,7 +247,7 @@ int MPIDO_Gatherv_simple(const void *sendbuf,
int send_size = 0;
int recv_size = 0;
int rcvlen = 0;
- int rcvcount = 0;
+ int totalrecvcount = 0;
pami_type_t rtype = PAMI_TYPE_NULL;
MPID_Segment segment;
MPID_Datatype *data_ptr = NULL;
@@ -258,7 +258,7 @@ int MPIDO_Gatherv_simple(const void *sendbuf,
const int size = comm_ptr->local_size;
const struct MPIDI_Comm* const mpid = &(comm_ptr->mpid);
-
+ int recvok=PAMI_SUCCESS, recvcontinuous=0;
if(sendbuf != MPI_IN_PLACE)
{
@@ -320,21 +320,25 @@ int MPIDO_Gatherv_simple(const void *sendbuf,
rdispls = (int*)displs;
if(rank == root)
{
- if(MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp) != MPI_SUCCESS)
+ if((recvok = MPIDI_Datatype_to_pami(recvtype, &rtype, -1, NULL, &tmp)) != MPI_SUCCESS)
{
MPIDI_Datatype_get_info(1, recvtype, rcv_contig,
rcvlen, data_ptr, recv_true_lb);
- if (!rcv_contig)
- {
+ totalrecvcount = recvcounts[0];
+ recvcontinuous = displs[0] == 0? 1 : 0 ;
rcounts = (int*)MPIU_Malloc(size);
rdispls = (int*)MPIU_Malloc(size);
- for(i = 0; i < size; i++)
- {
+ rdispls[0] = 0;
+ rcounts[0] = rcvlen * recvcounts[0];
+ for(i = 1; i < size; i++)
+ {
+ rdispls[i]= rcvlen * totalrecvcount;
+ totalrecvcount += recvcounts[i];
+ if(displs[i] != (displs[i-1] + recvcounts[i-1]))
+ recvcontinuous = 0;
rcounts[i] = rcvlen * recvcounts[i];
- rdispls[i] = rcvlen * displs[i];
- recv_size += rcounts[i];
- rcvcount += recvcounts[i];
}
+ recv_size = rcvlen * totalrecvcount;
rcv_noncontig_buff = MPIU_Malloc(recv_size);
rbuf = rcv_noncontig_buff;
@@ -344,6 +348,12 @@ int MPIDO_Gatherv_simple(const void *sendbuf,
MPID_Abort(NULL, MPI_ERR_NO_SPACE, 1,
"Fatal: Cannot allocate pack buffer");
}
+ if(sendbuf == MPI_IN_PLACE)
+ {
+ size_t extent;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ MPIR_Localcopy(recvbuf + displs[rank]*extent, recvcounts[rank], recvtype,
+ rcv_noncontig_buff + rdispls[rank], rcounts[rank],MPI_CHAR);
}
}
if(sendbuf == MPI_IN_PLACE)
@@ -391,10 +401,30 @@ int MPIDO_Gatherv_simple(const void *sendbuf,
TRACE_ERR("Waiting on active %d\n", gatherv_active);
MPID_PROGRESS_WAIT_WHILE(gatherv_active);
- if(!rcv_contig)
+ if(!rcv_contig || recvok != PAMI_SUCCESS)
+ {
+ if(recvcontinuous)
{
MPIR_Localcopy(rcv_noncontig_buff, recv_size, MPI_CHAR,
- recvbuf, rcvcount, recvtype);
+ recvbuf, totalrecvcount, recvtype);
+ }
+ else
+ {
+ size_t extent;
+ MPID_Datatype_get_extent_macro(recvtype,extent);
+ for(i=0; i<size; ++i)
+ {
+ char* scbuf = (char*)rcv_noncontig_buff+ rdispls[i];
+ char* rcbuf = (char*)recvbuf + displs[i]*extent;
+ MPIR_Localcopy(scbuf, rcounts[i], MPI_CHAR,
+ rcbuf, recvcounts[i], recvtype);
+ TRACE_ERR("Pack recv src extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)precvdispls[i],(size_t)i,(size_t)precvcounts[i],(size_t)precvdispls[i], *(int*)scbuf);
+ TRACE_ERR("Pack recv dest extent %zu, displ[%zu]=%zu, count[%zu]=%zu buf[%zu]=%u\n",
+ (size_t)extent, (size_t)i,(size_t)displs[i],(size_t)i,(size_t)recvcounts[i],(size_t)displs[i], *(int*)rcbuf);
+ }
+
+ }
MPIU_Free(rcv_noncontig_buff);
if(rank == root)
{
http://git.mpich.org/mpich.git/commitdiff/7da2069ffbe8ecd67a467a72b3c4e701a…
commit 7da2069ffbe8ecd67a467a72b3c4e701a1bb6d99
Author: Su Huang <suhuang(a)us.ibm.com>
Date: Tue Apr 16 10:17:21 2013 -0400
MPICH missing timer only progress engine that old PEMPI has
(ibm) D189783
(ibm) 769e26acc31c01fdda183fe86f871df73504064c
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/include/pamix.h b/src/mpid/pamid/include/pamix.h
index eedbf58..3f55400 100644
--- a/src/mpid/pamid/include/pamix.h
+++ b/src/mpid/pamid/include/pamix.h
@@ -75,6 +75,7 @@ PAMIX_Endpoint_query(pami_endpoint_t endpoint);
typedef void (*pamix_progress_function) (pami_context_t context, void *cookie);
#define PAMIX_CLIENT_ASYNC_GUARANTEE 1016
+#define ASYNC_PROGRESS_ALL 0x1111
typedef enum
{
PAMIX_PROGRESS_ALL = 0,
diff --git a/src/mpid/pamid/src/mpid_progress.c b/src/mpid/pamid/src/mpid_progress.c
index 3611b7d..53b930f 100644
--- a/src/mpid/pamid/src/mpid_progress.c
+++ b/src/mpid/pamid/src/mpid_progress.c
@@ -26,6 +26,7 @@ void
MPIDI_Progress_init()
{
MPIDI_Process.async_progress.active = 0;
+ pamix_progress_t async_progress_type=0;
/* In the "global" mpich lock mode the only possible progress function
* is the "global mpich lock" trigger progress function. This progress
@@ -47,6 +48,25 @@ MPIDI_Progress_init()
MPIDI_Process.perobj.context_post.requested;
#endif
+ async_progress_type = PAMIX_PROGRESS_ALL;
+
+#ifdef __PE__
+ if (MPIDI_Process.mp_interrupts)
+ {
+ /* PAMIX_PROGRESS_TIMER, PAMIX_PROGRESS_RECV_INTERRUPT or */
+ /* ASYNC_PROGRESS_ALL */
+ /* mp_interrupts=0 indicates the interrupts is disabled */
+ /* which is the same definition as that of PAMIX_PROGRESS_ALL. */
+ /* ASYNC_PROGRESS_ALL is an internal variable which is defined */
+ /* as 0x1111 and needs to be converted to corresponding pami */
+ /* type PAMIX_PROGRESS_ALL */
+ async_progress_type = MPIDI_Process.mp_interrupts;
+ if (MPIDI_Process.mp_interrupts == ASYNC_PROGRESS_ALL)
+ async_progress_type = PAMIX_PROGRESS_ALL;
+ }
+#endif
+
+
if (MPIDI_Process.async_progress.mode != ASYNC_PROGRESS_MODE_DISABLED)
{
TRACE_ERR("Async advance beginning...\n");
@@ -60,7 +80,7 @@ MPIDI_Progress_init()
MPIDI_Progress_async_end,
MPIDI_Progress_async_start,
(void *) i);
- PAMIX_Progress_enable(MPIDI_Context[i], PAMIX_PROGRESS_ALL);
+ PAMIX_Progress_enable(MPIDI_Context[i], async_progress_type);
}
TRACE_ERR("Async advance enabled\n");
}
diff --git a/src/mpid/pamid/src/mpidi_env.c b/src/mpid/pamid/src/mpidi_env.c
index 65dc493..e80c818 100644
--- a/src/mpid/pamid/src/mpidi_env.c
+++ b/src/mpid/pamid/src/mpidi_env.c
@@ -470,6 +470,8 @@ ENV_Char__(char* name[], unsigned* val, char* string)
if ( (env[0]=='y')|| (env[0]=='Y')
|| (env[0]=='p')|| (env[0]=='P')
+ || (env[0]=='t')|| (env[0]=='T')
+ || (env[0]=='r')|| (env[0]=='R')
|| (env[0]=='F')|| (env[0]=='f'))
*val = 1;
/*This may seem redundant; however,
@@ -1049,11 +1051,41 @@ MPIDI_Env_setup(int rank, int requested)
}
/* MP_CSS_INTERRUPT */
{
+ char *cp=NULL, *cp1=NULL;
+ int user_interrupts=0;
char* names[] = {"MP_CSS_INTERRUPT", NULL};
ENV_Char(names, &mpich_env->interrupts);
if (mpich_env->interrupts == 1) /* force on */
{
- MPIDI_Process.mp_interrupts=1;
+ cp = getenv("MP_CSS_INTERRUPT");
+ if (*cp=='Y' || *cp=='y')
+ {
+ user_interrupts = ASYNC_PROGRESS_ALL;
+ }
+ else
+ {
+ char delimiter='+';
+ cp1 = strchr(cp,delimiter);
+ if (!cp1) /* timer or receive */
+ {
+ if ( (*cp == 't') || (*cp == 'T') )
+ user_interrupts = PAMIX_PROGRESS_TIMER;
+ else if ( (*cp == 'r') || (*cp == 'R') )
+ user_interrupts = PAMIX_PROGRESS_RECV_INTERRUPT;
+ }
+ else /* timer + receive */
+ {
+ if ((( *cp == 't' || *cp == 'T') && ( *(cp1+1) == 'r' || *(cp1+1) == 'R')) ||
+ (( *cp == 'r' || *cp == 'R') && ( *(cp1+1) == 't' || *(cp1+1) == 'T')))
+ user_interrupts = ASYNC_PROGRESS_ALL;
+ else
+ {
+ TRACE_ERR("ERROR in MP_CSS_INTERRUPT %s(%d)\n",__FILE__,__LINE__);
+ exit(1);
+ }
+ }
+ }
+ MPIDI_Process.mp_interrupts=user_interrupts;
MPIDI_Process.perobj.context_post.requested = 0;
MPIDI_Process.async_progress.mode = ASYNC_PROGRESS_MODE_TRIGGER;
#if (MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_PER_OBJECT)
diff --git a/src/mpid/pamid/src/mpidi_util.c b/src/mpid/pamid/src/mpidi_util.c
index 6c9877e..315a1a7 100644
--- a/src/mpid/pamid/src/mpidi_util.c
+++ b/src/mpid/pamid/src/mpidi_util.c
@@ -268,7 +268,7 @@ int MPIDI_Update_mpenv()
if ((i==task_count) || (gatherer[i].x != gatherer[first].x)) { \
last = i-1; \
if (last != task_count-1) cflag = '*'; \
- if (gatherer[first].x == 1) { \
+ if (gatherer[first].x > 0) { \
printf("Task %1c%4d-%4d:%s %s\n", cflag, first, last, \
y, "YES"); \
} else if (gatherer[first].x == 0) { \
http://git.mpich.org/mpich.git/commitdiff/1820f7c5cf91c5edbdfd256dbad663824…
commit 1820f7c5cf91c5edbdfd256dbad663824286dcae
Author: Sameh Sharkawi <sssharka(a)us.ibm.com>
Date: Mon Apr 15 16:17:15 2013 -0400
pami_tune command line changes
* pami_tune's -v flag conflicts with poe's -v flag.
* Disable -x flag for checkpoint mode until later
(ibm) D189881
(ibm) 749763c4d0c973739c356d59d561df6feb40aad3
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/mpidi_util.c b/src/mpid/pamid/src/mpidi_util.c
index a41ad77..6c9877e 100644
--- a/src/mpid/pamid/src/mpidi_util.c
+++ b/src/mpid/pamid/src/mpidi_util.c
@@ -1290,9 +1290,7 @@ Options:\n\
(Default: pami_tune_results.xml)\n\n\
-d Diagnostics mode. Verify correctness of collective algorithms\n\
(Default: Disabled)\n\n\
- -v Verbose mode\n\
- (Default: Disabled)\n\n\
- -x Checkpoint mode. Enable pami_tune checkpointing\n\
+ -p Print the Collective Algorithm performance data to standard output\n\
(Default: Disabled)\n\n\
-h Print this help message\n\n", stdout);
@@ -1633,11 +1631,11 @@ static int MPIDI_collsel_process_ini_file(const char *filename, advisor_params_t
if(params->verify == -1)
ret = MPIDI_collsel_checkvalue(name, value, filename, ¶ms->verify);
}
- else if(strcmp(name, "checkpoint") == 0)
+ /*else if(strcmp(name, "checkpoint") == 0)
{
if(params->checkpoint == -1)
ret = MPIDI_collsel_checkvalue(name, value, filename, ¶ms->checkpoint);
- }
+ }*/
else
{
fprintf(stderr, "Invalid parameter: %s in file: %s\n", name, filename);
@@ -1660,7 +1658,7 @@ static int MPIDI_collsel_process_arg(int argc, char *argv[], advisor_params_t *p
params->verify = 0;
opterr = 0;
- while ((c = getopt (argc, argv, "c:m:g:f:o:i:v::d::x::h::")) != -1)
+ while ((c = getopt (argc, argv, "c:m:g:f:o:i:p::d::x::h::")) != -1)
{
switch (c)
{
@@ -1692,11 +1690,11 @@ static int MPIDI_collsel_process_arg(int argc, char *argv[], advisor_params_t *p
case 'd':
params->verify = 1;
break;
- case 'v':
+ case 'p':
params->verbose = 1;
break;
case 'x':
- params->checkpoint = 1;
+ /*params->checkpoint = 1;*/
break;
case 'h':
ret = 2;
http://git.mpich.org/mpich.git/commitdiff/bfa19b4415a3ab2d95cd1ad456787f788…
commit bfa19b4415a3ab2d95cd1ad456787f788b5a9bf3
Author: Michael Blocksome <blocksom(a)us.ibm.com>
Date: Wed May 8 10:49:40 2013 -0500
Check for assert only if asserts are enabled.
diff --git a/src/mpid/pamid/include/mpidimpl.h b/src/mpid/pamid/include/mpidimpl.h
index 55d676c..c9c9f14 100644
--- a/src/mpid/pamid/include/mpidimpl.h
+++ b/src/mpid/pamid/include/mpidimpl.h
@@ -171,8 +171,10 @@ static inline pami_endpoint_t MPIDI_Task_to_endpoint(pami_task_t task, size_t of
pami_endpoint_t ep;
pami_result_t rc;
rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &ep);
+#if ASSERT_LEVEL > 0
if(rc != PAMI_SUCCESS)
MPID_Abort (NULL, 0, 1, "MPIDI_Task_to_endpoint: Invalid task/offset. No endpoint found");
+#endif
return ep;
}
http://git.mpich.org/mpich.git/commitdiff/5a63aaf051c3efd62d18b632a8539eb37…
commit 5a63aaf051c3efd62d18b632a8539eb373a5cbb0
Author: Charles Archer <archerc(a)us.ibm.com>
Date: Sun Apr 14 16:05:00 2013 -0400
Use pami_endpoint_t for root instead of incorrect pami_task_t
(ibm) D189828
(ibm) 51d29ce7faf74d2d2c8a02798cd7880e1a5f3783
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/include/mpidimpl.h b/src/mpid/pamid/include/mpidimpl.h
index aef965a..55d676c 100644
--- a/src/mpid/pamid/include/mpidimpl.h
+++ b/src/mpid/pamid/include/mpidimpl.h
@@ -165,4 +165,16 @@ int MPIDI_PG_Get_size(MPIDI_PG_t * pg);
#define MPIDI_PG_Get_size(pg_) ((pg_)->size)
#endif /** DYNAMIC_TASKING **/
+
+static inline pami_endpoint_t MPIDI_Task_to_endpoint(pami_task_t task, size_t offset)
+{
+ pami_endpoint_t ep;
+ pami_result_t rc;
+ rc = PAMI_Endpoint_create(MPIDI_Client, task, 0, &ep);
+ if(rc != PAMI_SUCCESS)
+ MPID_Abort (NULL, 0, 1, "MPIDI_Task_to_endpoint: Invalid task/offset. No endpoint found");
+ return ep;
+}
+
+
#endif
diff --git a/src/mpid/pamid/src/coll/bcast/mpido_bcast.c b/src/mpid/pamid/src/coll/bcast/mpido_bcast.c
index 1c943bd..fc7a237 100644
--- a/src/mpid/pamid/src/coll/bcast/mpido_bcast.c
+++ b/src/mpid/pamid/src/coll/bcast/mpido_bcast.c
@@ -134,7 +134,7 @@ int MPIDO_Bcast(void *buffer,
bcast.cb_done = cb_bcast;
bcast.cookie = (void *)&active;
- bcast.cmd.xfer_broadcast.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ bcast.cmd.xfer_broadcast.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
bcast.algorithm = mpid->user_selected[PAMI_XFER_BROADCAST];
bcast.cmd.xfer_broadcast.buf = data_buffer;
bcast.cmd.xfer_broadcast.type = PAMI_TYPE_BYTE;
@@ -334,7 +334,7 @@ int MPIDO_Bcast_simple(void *buffer,
bcast.cb_done = cb_bcast;
bcast.cookie = (void *)&active;
- bcast.cmd.xfer_broadcast.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ bcast.cmd.xfer_broadcast.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
bcast.algorithm = mpid->coll_algorithm[PAMI_XFER_BROADCAST][0][0];
bcast.cmd.xfer_broadcast.buf = data_buffer;
bcast.cmd.xfer_broadcast.type = PAMI_TYPE_BYTE;
diff --git a/src/mpid/pamid/src/coll/gather/mpido_gather.c b/src/mpid/pamid/src/coll/gather/mpido_gather.c
index 8829c2b..ac28c70 100644
--- a/src/mpid/pamid/src/coll/gather/mpido_gather.c
+++ b/src/mpid/pamid/src/coll/gather/mpido_gather.c
@@ -240,7 +240,7 @@ int MPIDO_Gather(const void *sendbuf,
gather.cb_done = cb_gather;
gather.cookie = (void *)&active;
- gather.cmd.xfer_gather.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ gather.cmd.xfer_gather.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
if(sendbuf == MPI_IN_PLACE)
{
if(unlikely(verbose))
@@ -480,7 +480,7 @@ int MPIDO_Gather_simple(const void *sendbuf,
gather.cb_done = cb_gather;
gather.cookie = (void *)&active;
- gather.cmd.xfer_gather.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ gather.cmd.xfer_gather.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
gather.cmd.xfer_gather.stypecount = send_size;/* stypecount is ignored when sndbuf == PAMI_IN_PLACE */
gather.cmd.xfer_gather.sndbuf = (void *)sbuf;
if(sendbuf == MPI_IN_PLACE)
diff --git a/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c b/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
index 34b77bf..71caf3a 100644
--- a/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
+++ b/src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
@@ -89,7 +89,7 @@ int MPIDO_Gatherv(const void *sendbuf,
gatherv.cb_done = cb_gatherv;
gatherv.cookie = (void *)&gatherv_active;
- gatherv.cmd.xfer_gatherv_int.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ gatherv.cmd.xfer_gatherv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
gatherv.cmd.xfer_gatherv_int.rcvbuf = rbuf;
gatherv.cmd.xfer_gatherv_int.rtype = rtype;
gatherv.cmd.xfer_gatherv_int.rtypecounts = (int *) recvcounts;
@@ -368,7 +368,7 @@ int MPIDO_Gatherv_simple(const void *sendbuf,
gatherv.cb_done = cb_gatherv;
gatherv.cookie = (void *)&gatherv_active;
- gatherv.cmd.xfer_gatherv_int.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ gatherv.cmd.xfer_gatherv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
gatherv.cmd.xfer_gatherv_int.rcvbuf = rbuf;
gatherv.cmd.xfer_gatherv_int.rtype = rtype;
gatherv.cmd.xfer_gatherv_int.rtypecounts = (int *) rcounts;
diff --git a/src/mpid/pamid/src/coll/reduce/mpido_reduce.c b/src/mpid/pamid/src/coll/reduce/mpido_reduce.c
index c032354..b6a7cd2 100644
--- a/src/mpid/pamid/src/coll/reduce/mpido_reduce.c
+++ b/src/mpid/pamid/src/coll/reduce/mpido_reduce.c
@@ -142,7 +142,7 @@ int MPIDO_Reduce(const void *sendbuf,
reduce.cmd.xfer_reduce.stypecount = count;
reduce.cmd.xfer_reduce.rtypecount = count;
reduce.cmd.xfer_reduce.op = pop;
- reduce.cmd.xfer_reduce.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ reduce.cmd.xfer_reduce.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
if(unlikely(queryreq == MPID_COLL_ALWAYS_QUERY ||
@@ -302,7 +302,7 @@ int MPIDO_Reduce_simple(const void *sendbuf,
reduce.cmd.xfer_reduce.stypecount = count;
reduce.cmd.xfer_reduce.rtypecount = count;
reduce.cmd.xfer_reduce.op = pop;
- reduce.cmd.xfer_reduce.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ reduce.cmd.xfer_reduce.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
my_reduce_md = &mpid->coll_metadata[PAMI_XFER_REDUCE][0][0];
TRACE_ERR("%s reduce, context %d, algoname: %s, exflag: %d\n", MPIDI_Process.context_post.active>0?"Posting":"Invoking", 0,
diff --git a/src/mpid/pamid/src/coll/scatter/mpido_scatter.c b/src/mpid/pamid/src/coll/scatter/mpido_scatter.c
index 15d8366..5f3be7d 100644
--- a/src/mpid/pamid/src/coll/scatter/mpido_scatter.c
+++ b/src/mpid/pamid/src/coll/scatter/mpido_scatter.c
@@ -209,7 +209,7 @@ int MPIDO_Scatter(const void *sendbuf,
scatter.algorithm = my_scatter;
scatter.cb_done = cb_scatter;
scatter.cookie = (void *)&scatter_active;
- scatter.cmd.xfer_scatter.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ scatter.cmd.xfer_scatter.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
scatter.cmd.xfer_scatter.sndbuf = (void *)sendbuf;
scatter.cmd.xfer_scatter.stype = stype;
scatter.cmd.xfer_scatter.stypecount = sendcount;
@@ -459,7 +459,7 @@ int MPIDO_Scatter_simple(const void *sendbuf,
scatter.cb_done = cb_scatter;
scatter.cookie = (void *)&scatter_active;
- scatter.cmd.xfer_scatter.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ scatter.cmd.xfer_scatter.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
scatter.cmd.xfer_scatter.sndbuf = (void *)sbuf;
scatter.cmd.xfer_scatter.stype = PAMI_TYPE_BYTE;
scatter.cmd.xfer_scatter.stypecount = send_size;
diff --git a/src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c b/src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
index bc47e41..49ddb89 100644
--- a/src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
+++ b/src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
@@ -339,7 +339,7 @@ int MPIDO_Scatterv(const void *sendbuf,
scatterv.cb_done = cb_scatterv;
scatterv.cookie = (void *)&scatterv_active;
- scatterv.cmd.xfer_scatterv_int.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ scatterv.cmd.xfer_scatterv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
scatterv.algorithm = my_scatterv;
@@ -560,7 +560,7 @@ int MPIDO_Scatterv_simple(const void *sendbuf,
scatterv.cb_done = cb_scatterv;
scatterv.cookie = (void *)&scatterv_active;
- scatterv.cmd.xfer_scatterv_int.root = MPID_VCR_GET_LPID(comm_ptr->vcr, root);
+ scatterv.cmd.xfer_scatterv_int.root = MPIDI_Task_to_endpoint(MPID_VCR_GET_LPID(comm_ptr->vcr, root), 0);
scatterv.algorithm = mpid->coll_algorithm[PAMI_XFER_SCATTERV_INT][0][0];
my_scatterv_md = &mpid->coll_metadata[PAMI_XFER_SCATTERV_INT][0][0];
http://git.mpich.org/mpich.git/commitdiff/d92aabf2eb291c603487ad9e41e8d8a35…
commit d92aabf2eb291c603487ad9e41e8d8a35a7e0a66
Author: Sameh Sharkawi <sssharka(a)us.ibm.com>
Date: Fri Apr 12 12:39:55 2013 -0400
Need service variables for all collectives
(ibm) D189833
(ibm) 7Z8
(ibm) 9e89a54cd839c58e0c0573b09f39e4adf6e012e3
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/comm/mpid_comm.c b/src/mpid/pamid/src/comm/mpid_comm.c
index a8be80c..201aecc 100644
--- a/src/mpid/pamid/src/comm/mpid_comm.c
+++ b/src/mpid/pamid/src/comm/mpid_comm.c
@@ -397,7 +397,7 @@ void MPIDI_Coll_comm_destroy(MPID_Comm *comm)
}
- if(MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_NONE && MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_TUNE)
+ if(MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_NONE && MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_TUNE && comm->local_size > 1)
{
/* Destroy the fast query object. */
pami_extension_collsel_query_destroy pamix_collsel_query_destroy =
diff --git a/src/mpid/pamid/src/comm/mpid_selectcolls.c b/src/mpid/pamid/src/comm/mpid_selectcolls.c
index b79cc76..4569a0b 100644
--- a/src/mpid/pamid/src/comm/mpid_selectcolls.c
+++ b/src/mpid/pamid/src/comm/mpid_selectcolls.c
@@ -312,7 +312,7 @@ void MPIDI_Comm_coll_envvars(MPID_Comm *comm)
}
{
TRACE_ERR("Checking alltaoll\n");
- char* names[] = {"PAMID_COLLECTIVE_ALLTOALL", NULL};
+ char* names[] = {"PAMID_COLLECTIVE_ALLTOALL", "MP_S_MPI_ALLTOALL", NULL};
MPIDI_Check_protocols(names, comm, "alltoall", PAMI_XFER_ALLTOALL);
}
comm->mpid.optreduce = 0;
@@ -334,17 +334,17 @@ void MPIDI_Comm_coll_envvars(MPID_Comm *comm)
}
{
TRACE_ERR("Checking alltoallv\n");
- char* names[] = {"PAMID_COLLECTIVE_ALLTOALLV", NULL};
+ char* names[] = {"PAMID_COLLECTIVE_ALLTOALLV", "MP_S_MPI_ALLTOALLV", NULL};
MPIDI_Check_protocols(names, comm, "alltoallv", PAMI_XFER_ALLTOALLV_INT);
}
{
TRACE_ERR("Checking gatherv\n");
- char* names[] = {"PAMID_COLLECTIVE_GATHERV", NULL};
+ char* names[] = {"PAMID_COLLECTIVE_GATHERV", "MP_S_MPI_GATHERV", NULL};
MPIDI_Check_protocols(names, comm, "gatherv", PAMI_XFER_GATHERV_INT);
}
{
TRACE_ERR("Checking scan\n");
- char* names[] = {"PAMID_COLLECTIVE_SCAN", NULL};
+ char* names[] = {"PAMID_COLLECTIVE_SCAN", "MP_S_MPI_SCAN", NULL};
MPIDI_Check_protocols(names, comm, "scan", PAMI_XFER_SCAN);
}
@@ -368,7 +368,7 @@ void MPIDI_Comm_coll_envvars(MPID_Comm *comm)
}
}
{ /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_SCATTERV", NULL};
+ char* names[] = {"PAMID_COLLECTIVE_SCATTERV", "MP_S_MPI_SCATTERV", NULL};
MPIDI_Check_protocols(names, comm, "scatterv", PAMI_XFER_SCATTERV_INT);
}
@@ -385,7 +385,7 @@ void MPIDI_Comm_coll_envvars(MPID_Comm *comm)
}
}
{ /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_SCATTER", NULL};
+ char* names[] = {"PAMID_COLLECTIVE_SCATTER", "MP_S_MPI_SCATTER", NULL};
MPIDI_Check_protocols(names, comm, "scatter", PAMI_XFER_SCATTER);
}
@@ -464,13 +464,13 @@ void MPIDI_Comm_coll_envvars(MPID_Comm *comm)
}
}
{ /* In addition to glue protocols, check for other PAMI protocols and check for PE now */
- char* names[] = {"PAMID_COLLECTIVE_GATHER", NULL};
+ char* names[] = {"PAMID_COLLECTIVE_GATHER", "MP_S_MPI_GATHER", NULL};
MPIDI_Check_protocols(names, comm, "gather", PAMI_XFER_GATHER);
}
/* If automatic collective selection is enabled and user didn't specifically overwrite
it, then use auto coll sel.. Otherwise, go through the manual coll sel code path. */
- if(MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_NONE && MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_TUNE)
+ if(MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_NONE && MPIDI_Process.optimized.auto_select_colls != MPID_AUTO_SELECT_COLLS_TUNE && comm->local_size > 1)
{
/* Create a fast query object, cache it on the comm/geometry and use it in each collective */
pami_extension_collsel_query_create pamix_collsel_query_create =
http://git.mpich.org/mpich.git/commitdiff/662d6ff062ec050ac84d9a45295b8f53d…
commit 662d6ff062ec050ac84d9a45295b8f53d39e2554
Author: Haizhu Liu <haizhu(a)us.ibm.com>
Date: Fri Apr 12 10:13:56 2013 -0400
Thread level promoting w/dyn_tasking due to world exiting handler in separate thread
(ibm) D189766
(ibm) 623ef12fe24e80752c51b38db46926520e530136
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpid/pamid/src/mpid_init.c b/src/mpid/pamid/src/mpid_init.c
index 8925c48..e7bb3bc 100644
--- a/src/mpid/pamid/src/mpid_init.c
+++ b/src/mpid/pamid/src/mpid_init.c
@@ -1117,7 +1117,7 @@ int MPID_Init(int * argc,
/* ----------------------------- */
/* Initialize messager */
/* ----------------------------- */
- if (MPIDI_Process.async_progress.mode == ASYNC_PROGRESS_MODE_TRIGGER)
+ if ( (MPIDI_Process.async_progress.mode == ASYNC_PROGRESS_MODE_TRIGGER) || mpidi_dynamic_tasking)
{
/* The 'trigger' async progress mode requires MPI_THREAD_MULTIPLE.
* Silently promote the thread level.
-----------------------------------------------------------------------
Summary of changes:
src/mpid/pamid/include/mpidimpl.h | 14 ++
src/mpid/pamid/include/pamix.h | 1 +
.../pamid/src/coll/allgather/mpido_allgather.c | 12 +-
.../pamid/src/coll/allgatherv/mpido_allgatherv.c | 141 +++++++++---
src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c | 8 +
.../pamid/src/coll/alltoallv/mpido_alltoallv.c | 236 +++++++++++++++++---
src/mpid/pamid/src/coll/bcast/mpido_bcast.c | 4 +-
src/mpid/pamid/src/coll/coll_utils.c | 20 +-
src/mpid/pamid/src/coll/gather/mpido_gather.c | 11 +-
src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c | 58 ++++--
src/mpid/pamid/src/coll/reduce/mpido_reduce.c | 4 +-
src/mpid/pamid/src/coll/scatter/mpido_scatter.c | 4 +-
src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c | 4 +-
src/mpid/pamid/src/comm/mpid_comm.c | 2 +-
src/mpid/pamid/src/comm/mpid_selectcolls.c | 16 +-
src/mpid/pamid/src/dyntask/mpidi_port.c | 7 +-
src/mpid/pamid/src/mpid_init.c | 2 +-
src/mpid/pamid/src/mpid_progress.c | 22 ++-
src/mpid/pamid/src/mpidi_env.c | 34 +++-
src/mpid/pamid/src/mpidi_util.c | 16 +-
src/mpid/pamid/src/pt2pt/mpidi_callback_eager.c | 29 +--
src/mpid/pamid/src/pt2pt/mpidi_callback_rzv.c | 10 +-
src/mpid/pamid/src/pt2pt/mpidi_callback_short.c | 18 +--
src/mpid/pamid/src/pt2pt/mpidi_done.c | 1 +
src/mpid/pamid/src/pt2pt/mpidi_recv.h | 26 ++-
25 files changed, 534 insertions(+), 166 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-195-g63e1d88
by noreply@mpich.org 15 May '13
by noreply@mpich.org 15 May '13
15 May '13
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 63e1d88fe9182bb1bc60488957624d467a68b9c8 (commit)
from 1b5334ede0488abc04e981e53ea977780c9e28e6 (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/63e1d88fe9182bb1bc60488957624d467…
commit 63e1d88fe9182bb1bc60488957624d467a68b9c8
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Wed May 15 13:36:08 2013 -0500
duped info in wrong branch of check for null
diff --git a/src/mpi/romio/adio/include/adioi_error.h b/src/mpi/romio/adio/include/adioi_error.h
index 3c47cc3..88a0408 100644
--- a/src/mpi/romio/adio/include/adioi_error.h
+++ b/src/mpi/romio/adio/include/adioi_error.h
@@ -168,10 +168,10 @@ then the dup operation will succeed */
MPI_Info dupinfo; \
int tmp_err = MPI_SUCCESS; \
if (info == MPI_INFO_NULL) { \
- error_code = MPI_Info_dup(info, &dupinfo); \
dupinfo = MPI_INFO_NULL; \
- } else { \
error_code = MPI_SUCCESS; \
+ } else { \
+ error_code = MPI_Info_dup(info, &dupinfo); \
} \
MPI_Allreduce(&error_code, &tmp_err, 1, MPI_INT, MPI_MAX, comm); \
if(tmp_err != MPI_SUCCESS) { \
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/include/adioi_error.h | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-194-g1b5334e
by noreply@mpich.org 15 May '13
by noreply@mpich.org 15 May '13
15 May '13
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 1b5334ede0488abc04e981e53ea977780c9e28e6 (commit)
from 49595414949ac4099b3a7ce6d6bc41772b5111cf (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/1b5334ede0488abc04e981e53ea977780…
commit 1b5334ede0488abc04e981e53ea977780c9e28e6
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Wed May 15 12:04:53 2013 -0500
deal with MPI_INFO_NULL reasonably
maddeningly we cannot dup MPI_INFO_NULL, so let's check for that case
diff --git a/src/mpi/romio/adio/include/adioi_error.h b/src/mpi/romio/adio/include/adioi_error.h
index 1dd00ee..3c47cc3 100644
--- a/src/mpi/romio/adio/include/adioi_error.h
+++ b/src/mpi/romio/adio/include/adioi_error.h
@@ -167,7 +167,12 @@ then the dup operation will succeed */
#define MPIO_CHECK_INFO_ALL(info, error_code, comm) { \
MPI_Info dupinfo; \
int tmp_err = MPI_SUCCESS; \
- error_code = MPI_Info_dup(info, &dupinfo); \
+ if (info == MPI_INFO_NULL) { \
+ error_code = MPI_Info_dup(info, &dupinfo); \
+ dupinfo = MPI_INFO_NULL; \
+ } else { \
+ error_code = MPI_SUCCESS; \
+ } \
MPI_Allreduce(&error_code, &tmp_err, 1, MPI_INT, MPI_MAX, comm); \
if(tmp_err != MPI_SUCCESS) { \
error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, \
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/include/adioi_error.h | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-193-g4959541
by noreply@mpich.org 15 May '13
by noreply@mpich.org 15 May '13
15 May '13
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 49595414949ac4099b3a7ce6d6bc41772b5111cf (commit)
via 57f5b7b17decc5dfb447186b02fc1f35495618da (commit)
via 2eefd3a26e6de5e0b57fa6164ec3f5fdfb56c4fe (commit)
from 635969e76f66b3039f8150bc582f41e324864662 (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/49595414949ac4099b3a7ce6d6bc41772…
commit 49595414949ac4099b3a7ce6d6bc41772b5111cf
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Tue May 14 20:34:46 2013 -0500
Remove C99-ism from IBM contributed code.
Reviewed by Mike Blocksome @ IBM.
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index 0a0858e..8313e78 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -589,6 +589,8 @@ int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendty
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -604,9 +606,6 @@ int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendty
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iallgatherv.c b/src/mpi/coll/iallgatherv.c
index acffde4..40f6f67 100644
--- a/src/mpi/coll/iallgatherv.c
+++ b/src/mpi/coll/iallgatherv.c
@@ -691,6 +691,8 @@ int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendt
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -706,9 +708,6 @@ int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 0a0147c..cefa272 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -647,6 +647,8 @@ int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Data
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -662,9 +664,6 @@ int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Data
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index af7484c..bf1ba73 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -519,6 +519,8 @@ int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -534,9 +536,6 @@ int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ialltoallv.c b/src/mpi/coll/ialltoallv.c
index d7063b4..0d72e01 100644
--- a/src/mpi/coll/ialltoallv.c
+++ b/src/mpi/coll/ialltoallv.c
@@ -246,6 +246,8 @@ int MPIR_Ialltoallv_impl(const void *sendbuf, const int sendcounts[], const int
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -261,10 +263,6 @@ int MPIR_Ialltoallv_impl(const void *sendbuf, const int sendcounts[], const int
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ialltoallw.c b/src/mpi/coll/ialltoallw.c
index eb7eab2..1b3e6af 100644
--- a/src/mpi/coll/ialltoallw.c
+++ b/src/mpi/coll/ialltoallw.c
@@ -252,6 +252,8 @@ int MPIR_Ialltoallw_impl(const void *sendbuf, const int sendcounts[], const int
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -267,9 +269,6 @@ int MPIR_Ialltoallw_impl(const void *sendbuf, const int sendcounts[], const int
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ibarrier.c b/src/mpi/coll/ibarrier.c
index fe78e3a..eecf07d 100644
--- a/src/mpi/coll/ibarrier.c
+++ b/src/mpi/coll/ibarrier.c
@@ -171,6 +171,8 @@ int MPIR_Ibarrier_impl(MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -186,9 +188,6 @@ int MPIR_Ibarrier_impl(MPID_Comm *comm_ptr, MPI_Request *request)
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index 7070e24..d619407 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -857,6 +857,8 @@ int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, M
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -872,9 +874,6 @@ int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, M
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index d962980..6393861 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -184,6 +184,8 @@ int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -199,9 +201,6 @@ int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index 63fdccb..36efa80 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -511,6 +511,8 @@ int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -528,9 +530,6 @@ int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/igatherv.c b/src/mpi/coll/igatherv.c
index 300925c..f87d163 100644
--- a/src/mpi/coll/igatherv.c
+++ b/src/mpi/coll/igatherv.c
@@ -110,6 +110,8 @@ int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -127,9 +129,6 @@ int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index dbafea1..dc59220 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -1009,6 +1009,8 @@ int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int recv
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -1026,9 +1028,6 @@ int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int recv
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index d8c2b65..8d363d2 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -911,6 +911,8 @@ int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recv
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -928,10 +930,6 @@ int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recv
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index 138b1f4..cedd331 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -762,6 +762,8 @@ int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -779,9 +781,6 @@ int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index 695bf11..a8c242e 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -318,6 +318,8 @@ int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -335,9 +337,6 @@ int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iscatter.c b/src/mpi/coll/iscatter.c
index 8a00336..4ce45d6 100644
--- a/src/mpi/coll/iscatter.c
+++ b/src/mpi/coll/iscatter.c
@@ -546,6 +546,8 @@ int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -563,9 +565,6 @@ int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iscatterv.c b/src/mpi/coll/iscatterv.c
index 90a04b8..4e86fcd 100644
--- a/src/mpi/coll/iscatterv.c
+++ b/src/mpi/coll/iscatterv.c
@@ -117,6 +117,8 @@ int MPIR_Iscatterv_impl(const void *sendbuf, const int sendcounts[], const int d
{
int mpi_errno = MPI_SUCCESS;
MPID_Request *reqp = NULL;
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
@@ -134,9 +136,6 @@ int MPIR_Iscatterv_impl(const void *sendbuf, const int sendcounts[], const int d
/* --END USEREXTENSION-- */
}
- int tag = -1;
- MPID_Sched_t s = MPID_SCHED_NULL;
-
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
http://git.mpich.org/mpich.git/commitdiff/57f5b7b17decc5dfb447186b02fc1f354…
commit 57f5b7b17decc5dfb447186b02fc1f35495618da
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Tue May 14 11:51:43 2013 -0500
Naming updates to IBM's NBC patch.
We now provide two types of function pointers: _sched and _req. The
_sched functions just add instructions to the schedule, but no request
is created. The _req functions return an MPID request.
Reviewed by Mike Blocksome @ IBM.
diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index 5c6f1d8..d98ba9f 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -1975,95 +1975,95 @@ typedef struct MPID_Collops {
MPID_Comm *, int *);
/* MPI-3 nonblocking collectives */
- int (*Ibarrier)(MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ibarrier_optimized)(MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ibcast)(void *buffer, int count, MPI_Datatype datatype, int root,
+ int (*Ibarrier_sched)(MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Ibarrier_req)(MPID_Comm *comm_ptr, MPID_Request **request);
+ int (*Ibcast_sched)(void *buffer, int count, MPI_Datatype datatype, int root,
MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ibcast_optimized)(void *buffer, int count, MPI_Datatype datatype, int root,
+ int (*Ibcast_req)(void *buffer, int count, MPI_Datatype datatype, int root,
MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Igather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Igather_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
MPID_Sched_t s);
- int (*Igather_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Igather_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
MPID_Request **request);
- int (*Igatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Igatherv_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Igatherv_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Igatherv_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iscatter)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Iscatter_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
MPID_Sched_t s);
- int (*Iscatter_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Iscatter_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
MPID_Request **request);
- int (*Iscatterv)(const void *sendbuf, const int *sendcounts, const int *displs,
+ int (*Iscatterv_sched)(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iscatterv_optimized)(const void *sendbuf, const int *sendcounts, const int *displs,
+ int (*Iscatterv_req)(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iallgather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Iallgather_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Sched_t s);
- int (*Iallgather_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Iallgather_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Request **request);
- int (*Iallgatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Iallgatherv_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype,
MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iallgatherv_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Iallgatherv_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype,
MPID_Comm *comm_ptr, MPID_Request ** request);
- int (*Ialltoall)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Ialltoall_sched)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Sched_t s);
- int (*Ialltoall_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int (*Ialltoall_req)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Request **request);
- int (*Ialltoallv)(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ int (*Ialltoallv_sched)(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Sched_t s);
- int (*Ialltoallv_optimized)(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ int (*Ialltoallv_req)(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Request **request);
- int (*Ialltoallw)(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ int (*Ialltoallw_sched)(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,
MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ialltoallw_optimized)(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ int (*Ialltoallw_req)(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,
MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ireduce)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int (*Ireduce_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ireduce_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int (*Ireduce_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
int root, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iallreduce)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ int (*Iallreduce_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iallreduce_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ int (*Iallreduce_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ireduce_scatter)(const void *sendbuf, void *recvbuf, const int *recvcounts,
+ int (*Ireduce_scatter_sched)(const void *sendbuf, void *recvbuf, const int *recvcounts,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Ireduce_scatter_optimized)(const void *sendbuf, void *recvbuf, const int *recvcounts,
+ int (*Ireduce_scatter_req)(const void *sendbuf, void *recvbuf, const int *recvcounts,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Ireduce_scatter_block)(const void *sendbuf, void *recvbuf, int recvcount,
+ int (*Ireduce_scatter_block_sched)(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
MPID_Sched_t s);
- int (*Ireduce_scatter_block_optimized)(const void *sendbuf, void *recvbuf, int recvcount,
+ int (*Ireduce_scatter_block_req)(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
MPID_Request **request);
- int (*Iscan)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int (*Iscan_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iscan_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int (*Iscan_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPID_Comm *comm_ptr, MPID_Request **request);
- int (*Iexscan)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int (*Iexscan_sched)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPID_Comm *comm_ptr, MPID_Sched_t s);
- int (*Iexscan_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int (*Iexscan_req)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPID_Comm *comm_ptr, MPID_Request **request);
struct MPID_Collops *prev_coll_fns; /* when overriding this table, set this to point to the old table */
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index 095c5c4..0a0858e 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -521,8 +521,8 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
newcomm_ptr = comm_ptr->local_comm;
if (sendcount != 0) {
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather);
- mpi_errno = newcomm_ptr->coll_fns->Igather(sendbuf, sendcount, sendtype,
+ MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather_sched);
+ mpi_errno = newcomm_ptr->coll_fns->Igather_sched(sendbuf, sendcount, sendtype,
tmp_buf, sendcount, sendtype,
0, newcomm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -531,12 +531,12 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* first broadcast from left to right group, then from right to
left group */
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast);
+ MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast_sched);
if (comm_ptr->is_low_group) {
/* bcast to right*/
if (sendcount != 0) {
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ibcast(tmp_buf, sendcount*local_size,
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(tmp_buf, sendcount*local_size,
sendtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -546,7 +546,7 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* receive bcast from right */
if (recvcount != 0) {
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ibcast(recvbuf, recvcount*remote_size,
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(recvbuf, recvcount*remote_size,
recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -556,7 +556,7 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* receive bcast from left */
if (recvcount != 0) {
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ibcast(recvbuf, recvcount*remote_size,
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(recvbuf, recvcount*remote_size,
recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -566,7 +566,7 @@ int MPIR_Iallgather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendt
/* bcast to left */
if (sendcount != 0) {
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ibcast(tmp_buf, sendcount*local_size,
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(tmp_buf, sendcount*local_size,
sendtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -593,9 +593,9 @@ int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendty
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iallgather_optimized != NULL) {
+ if (comm_ptr->coll_fns->Iallgather_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iallgather_optimized(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Iallgather_req(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -613,8 +613,8 @@ int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendty
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iallgather != NULL);
- mpi_errno = comm_ptr->coll_fns->Iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Iallgather_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Iallgather_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/iallgatherv.c b/src/mpi/coll/iallgatherv.c
index 37b2841..acffde4 100644
--- a/src/mpi/coll/iallgatherv.c
+++ b/src/mpi/coll/iallgatherv.c
@@ -617,20 +617,20 @@ int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype send
remote_size = comm_ptr->remote_size;
rank = comm_ptr->rank;
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Igatherv);
+ MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Igatherv_sched);
/* first do an intercommunicator gatherv from left to right group,
then from right to left group */
if (comm_ptr->is_low_group) {
/* gatherv from right group */
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Igatherv(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = comm_ptr->coll_fns->Igatherv_sched(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
/* gatherv to right group */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Igatherv(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = comm_ptr->coll_fns->Igatherv_sched(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -638,13 +638,13 @@ int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype send
else {
/* gatherv to left group */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Igatherv(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = comm_ptr->coll_fns->Igatherv_sched(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
/* gatherv from left group */
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Igatherv(sendbuf, sendcount, sendtype, recvbuf,
+ mpi_errno = comm_ptr->coll_fns->Igatherv_sched(sendbuf, sendcount, sendtype, recvbuf,
recvcounts, displs, recvtype, root,
comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -662,7 +662,7 @@ int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype send
}
newcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Ibcast);
+ MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Ibcast_sched);
mpi_errno = MPIR_Type_indexed_impl(remote_size, recvcounts, displs, recvtype, &newtype);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -670,7 +670,7 @@ int MPIR_Iallgatherv_inter(const void *sendbuf, int sendcount, MPI_Datatype send
mpi_errno = MPIR_Type_commit_impl(&newtype);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- mpi_errno = newcomm_ptr->coll_fns->Ibcast(recvbuf, 1, newtype, 0, newcomm_ptr, s);
+ mpi_errno = newcomm_ptr->coll_fns->Ibcast_sched(recvbuf, 1, newtype, 0, newcomm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIR_Type_free_impl(&newtype);
@@ -695,9 +695,9 @@ int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendt
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iallgatherv_optimized != NULL) {
+ if (comm_ptr->coll_fns->Iallgatherv_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iallgatherv_optimized(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Iallgatherv_req(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -715,8 +715,8 @@ int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendt
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iallgatherv != NULL);
- mpi_errno = comm_ptr->coll_fns->Iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Iallgatherv_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Iallgatherv_sched(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index f51bee1..0a0147c 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -549,8 +549,8 @@ int MPIR_Iallreduce_inter(const void *sendbuf, void *recvbuf, int count, MPI_Dat
}
lcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(lcomm_ptr->coll_fns && lcomm_ptr->coll_fns->Ibcast);
- mpi_errno = lcomm_ptr->coll_fns->Ibcast(recvbuf, count, datatype, 0, lcomm_ptr, s);
+ MPIU_Assert(lcomm_ptr->coll_fns && lcomm_ptr->coll_fns->Ibcast_sched);
+ mpi_errno = lcomm_ptr->coll_fns->Ibcast_sched(recvbuf, count, datatype, 0, lcomm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
fn_exit:
@@ -594,15 +594,15 @@ int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datat
/* take care of the MPI_IN_PLACE case. For reduce,
MPI_IN_PLACE is specified only on the root;
for allreduce it is specified on all processes. */
- MPIU_Assert(nc->coll_fns && nc->coll_fns->Ireduce);
+ MPIU_Assert(nc->coll_fns && nc->coll_fns->Ireduce_sched);
if ((sendbuf == MPI_IN_PLACE) && (comm_ptr->node_comm->rank != 0)) {
/* IN_PLACE and not root of reduce. Data supplied to this
allreduce is in recvbuf. Pass that as the sendbuf to reduce. */
- mpi_errno = nc->coll_fns->Ireduce(recvbuf, NULL, count, datatype, op, 0, nc, s);
+ mpi_errno = nc->coll_fns->Ireduce_sched(recvbuf, NULL, count, datatype, op, 0, nc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
} else {
- mpi_errno = nc->coll_fns->Ireduce(sendbuf, recvbuf, count, datatype, op, 0, nc, s);
+ mpi_errno = nc->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype, op, 0, nc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
MPID_SCHED_BARRIER(s);
@@ -618,16 +618,16 @@ int MPIR_Iallreduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datat
/* now do an IN_PLACE allreduce among the local roots of all nodes */
if (nrc != NULL) {
- MPIU_Assert(nrc->coll_fns && nrc->coll_fns->Iallreduce);
- mpi_errno = nrc->coll_fns->Iallreduce(MPI_IN_PLACE, recvbuf, count, datatype, op, nrc, s);
+ MPIU_Assert(nrc->coll_fns && nrc->coll_fns->Iallreduce_sched);
+ mpi_errno = nrc->coll_fns->Iallreduce_sched(MPI_IN_PLACE, recvbuf, count, datatype, op, nrc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
}
/* now broadcast the result among local processes */
if (comm_ptr->node_comm != NULL) {
- MPIU_Assert(nc->coll_fns && nc->coll_fns->Ibcast);
- mpi_errno = nc->coll_fns->Ibcast(recvbuf, count, datatype, 0, nc, s);
+ MPIU_Assert(nc->coll_fns && nc->coll_fns->Ibcast_sched);
+ mpi_errno = nc->coll_fns->Ibcast_sched(recvbuf, count, datatype, 0, nc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
}
@@ -651,9 +651,9 @@ int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Data
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iallreduce_optimized != NULL) {
+ if (comm_ptr->coll_fns->Iallreduce_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iallreduce_optimized(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Iallreduce_req(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -671,8 +671,8 @@ int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Data
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iallreduce != NULL);
- mpi_errno = comm_ptr->coll_fns->Iallreduce(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Iallreduce_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Iallreduce_sched(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index 593ae79..af7484c 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -523,9 +523,9 @@ int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ialltoall_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ialltoall_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ialltoall_optimized(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Ialltoall_req(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -543,8 +543,8 @@ int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ialltoall != NULL);
- mpi_errno = comm_ptr->coll_fns->Ialltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ialltoall_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ialltoall_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ialltoallv.c b/src/mpi/coll/ialltoallv.c
index b73e211..d7063b4 100644
--- a/src/mpi/coll/ialltoallv.c
+++ b/src/mpi/coll/ialltoallv.c
@@ -250,9 +250,9 @@ int MPIR_Ialltoallv_impl(const void *sendbuf, const int sendcounts[], const int
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ialltoallv_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ialltoallv_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ialltoallv_optimized(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Ialltoallv_req(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -271,8 +271,8 @@ int MPIR_Ialltoallv_impl(const void *sendbuf, const int sendcounts[], const int
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ialltoallv != NULL);
- mpi_errno = comm_ptr->coll_fns->Ialltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ialltoallv_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ialltoallv_sched(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ialltoallw.c b/src/mpi/coll/ialltoallw.c
index 9409b44..eb7eab2 100644
--- a/src/mpi/coll/ialltoallw.c
+++ b/src/mpi/coll/ialltoallw.c
@@ -256,9 +256,9 @@ int MPIR_Ialltoallw_impl(const void *sendbuf, const int sendcounts[], const int
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ialltoallw_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ialltoallw_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ialltoallw_optimized(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Ialltoallw_req(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -276,8 +276,8 @@ int MPIR_Ialltoallw_impl(const void *sendbuf, const int sendcounts[], const int
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ialltoallw != NULL);
- mpi_errno = comm_ptr->coll_fns->Ialltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ialltoallw_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ialltoallw_sched(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ibarrier.c b/src/mpi/coll/ibarrier.c
index 3bf12da..fe78e3a 100644
--- a/src/mpi/coll/ibarrier.c
+++ b/src/mpi/coll/ibarrier.c
@@ -112,8 +112,8 @@ int MPIR_Ibarrier_inter(MPID_Comm *comm_ptr, MPID_Sched_t s)
}
/* do a barrier on the local intracommunicator */
- MPIU_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibarrier);
- mpi_errno = comm_ptr->local_comm->coll_fns->Ibarrier(comm_ptr->local_comm, s);
+ MPIU_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibarrier_sched);
+ mpi_errno = comm_ptr->local_comm->coll_fns->Ibarrier_sched(comm_ptr->local_comm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
@@ -128,30 +128,30 @@ int MPIR_Ibarrier_inter(MPID_Comm *comm_ptr, MPID_Sched_t s)
/* first broadcast from left to right group, then from right to
left group */
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast);
+ MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ibcast_sched);
if (comm_ptr->is_low_group) {
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ibcast(buf, 1, MPI_BYTE, root, comm_ptr, s);
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buf, 1, MPI_BYTE, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
/* receive bcast from right */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ibcast(buf, 1, MPI_BYTE, root, comm_ptr, s);
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buf, 1, MPI_BYTE, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
else {
/* receive bcast from left */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ibcast(buf, 1, MPI_BYTE, root, comm_ptr, s);
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buf, 1, MPI_BYTE, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
/* bcast to left */
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ibcast(buf, 1, MPI_BYTE, root, comm_ptr, s);
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buf, 1, MPI_BYTE, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -175,9 +175,9 @@ int MPIR_Ibarrier_impl(MPID_Comm *comm_ptr, MPI_Request *request)
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ibarrier_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ibarrier_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ibarrier_optimized(comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Ibarrier_req(comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -194,8 +194,8 @@ int MPIR_Ibarrier_impl(MPID_Comm *comm_ptr, MPI_Request *request)
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Ibarrier != NULL);
- mpi_errno = comm_ptr->coll_fns->Ibarrier(comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ibarrier_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ibarrier_sched(comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index 57ddd5d..7070e24 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -291,8 +291,8 @@ fn_fail:
*/
/* It would be nice to just call:
* ----8<----
- * comm_ptr->coll_fns->Iscatter(...);
- * comm_ptr->coll_fns->Iallgather(...);
+ * comm_ptr->coll_fns->Iscatter_sched(...);
+ * comm_ptr->coll_fns->Iallgather_sched(...);
* ----8<----
*
* But that results in inefficient additional memory allocation and copies
@@ -685,11 +685,11 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
MPIU_Assert(is_homogeneous); /* we don't handle the hetero case yet */
if (comm_ptr->node_comm) {
MPIU_Assert(comm_ptr->node_comm->coll_fns);
- MPIU_Assert(comm_ptr->node_comm->coll_fns->Ibcast);
+ MPIU_Assert(comm_ptr->node_comm->coll_fns->Ibcast_sched);
}
if (comm_ptr->node_roots_comm) {
MPIU_Assert(comm_ptr->node_roots_comm->coll_fns);
- MPIU_Assert(comm_ptr->node_roots_comm->coll_fns->Ibcast);
+ MPIU_Assert(comm_ptr->node_roots_comm->coll_fns->Ibcast_sched);
}
/* MPI_Type_size() might not give the accurate size of the packed
@@ -724,7 +724,7 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
/* perform the internode broadcast */
if (comm_ptr->node_roots_comm != NULL)
{
- mpi_errno = comm_ptr->node_roots_comm->coll_fns->Ibcast(buffer, count, datatype,
+ mpi_errno = comm_ptr->node_roots_comm->coll_fns->Ibcast_sched(buffer, count, datatype,
MPIU_Get_internode_rank(comm_ptr, root),
comm_ptr->node_roots_comm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -735,7 +735,7 @@ int MPIR_Ibcast_SMP(void *buffer, int count, MPI_Datatype datatype, int root, MP
/* perform the intranode broadcast on all except for the root's node */
if (comm_ptr->node_comm != NULL)
{
- mpi_errno = comm_ptr->node_comm->coll_fns->Ibcast(buffer, count, datatype, 0, comm_ptr->node_comm, s);
+ mpi_errno = comm_ptr->node_comm->coll_fns->Ibcast_sched(buffer, count, datatype, 0, comm_ptr->node_comm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -838,8 +838,8 @@ int MPIR_Ibcast_inter(void *buffer, int count, MPI_Datatype datatype, int root,
/* now do the usual broadcast on this intracommunicator
with rank 0 as root. */
- MPIU_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibcast);
- mpi_errno = comm_ptr->local_comm->coll_fns->Ibcast(buffer, count, datatype, root, comm_ptr->local_comm, s);
+ MPIU_Assert(comm_ptr->local_comm->coll_fns && comm_ptr->local_comm->coll_fns->Ibcast_sched);
+ mpi_errno = comm_ptr->local_comm->coll_fns->Ibcast_sched(buffer, count, datatype, root, comm_ptr->local_comm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -861,9 +861,9 @@ int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, M
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ibcast_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ibcast_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ibcast_optimized(buffer, count, datatype, root, comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Ibcast_req(buffer, count, datatype, root, comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -880,8 +880,8 @@ int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, M
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Ibcast != NULL);
- mpi_errno = comm_ptr->coll_fns->Ibcast(buffer, count, datatype, root, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ibcast_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ibcast_sched(buffer, count, datatype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index c28c2c8..d962980 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -188,9 +188,9 @@ int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iexscan_optimized != NULL) {
+ if (comm_ptr->coll_fns->Iexscan_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iexscan_optimized(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
+ mpi_errno = comm_ptr->coll_fns->Iexscan_req(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
if (reqp) {
*request = reqp->handle;
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -208,8 +208,8 @@ int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Iexscan != NULL);
- mpi_errno = comm_ptr->coll_fns->Iexscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Iexscan_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Iexscan_sched(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index 3e1b51d..63fdccb 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -464,8 +464,8 @@ int MPIR_Igather_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtype
newcomm_ptr = comm_ptr->local_comm;
/* now do the a local gather on this intracommunicator */
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather);
- mpi_errno = newcomm_ptr->coll_fns->Igather(sendbuf, sendcount, sendtype,
+ MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Igather_sched);
+ mpi_errno = newcomm_ptr->coll_fns->Igather_sched(sendbuf, sendcount, sendtype,
tmp_buf, sendcount, sendtype, 0,
newcomm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -515,9 +515,9 @@ int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Igather_optimized != NULL) {
+ if (comm_ptr->coll_fns->Igather_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Igather_optimized(sendbuf, sendcount, sendtype,
+ mpi_errno = comm_ptr->coll_fns->Igather_req(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
root, comm_ptr, &reqp);
if (reqp) {
@@ -537,8 +537,8 @@ int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Igather != NULL);
- mpi_errno = comm_ptr->coll_fns->Igather(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Igather_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Igather_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/igatherv.c b/src/mpi/coll/igatherv.c
index 388c012..300925c 100644
--- a/src/mpi/coll/igatherv.c
+++ b/src/mpi/coll/igatherv.c
@@ -114,9 +114,9 @@ int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Igatherv_optimized != NULL) {
+ if (comm_ptr->coll_fns->Igatherv_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Igatherv_optimized(sendbuf, sendcount, sendtype,
+ mpi_errno = comm_ptr->coll_fns->Igatherv_req(sendbuf, sendcount, sendtype,
recvbuf, recvcounts, displs, recvtype,
root, comm_ptr, &reqp);
if (reqp) {
@@ -136,8 +136,8 @@ int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Igatherv != NULL);
- mpi_errno = comm_ptr->coll_fns->Igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Igatherv_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Igatherv_sched(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index 83a16aa..dbafea1 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -942,11 +942,11 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
/* first do a reduce from right group to rank 0 in left group,
then from left group to rank 0 in right group*/
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce);
+ MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce_sched);
if (comm_ptr->is_low_group) {
/* reduce from right group to rank 0*/
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -955,14 +955,14 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
/* reduce to rank 0 of right group */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
else {
/* reduce to rank 0 of right group */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -971,7 +971,7 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
/* reduce from right group to rank 0*/
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -985,8 +985,8 @@ int MPIR_Ireduce_scatter_inter(const void *sendbuf, void *recvbuf, const int rec
newcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatterv);
- mpi_errno = newcomm_ptr->coll_fns->Iscatterv(tmp_buf, recvcounts, disps, datatype,
+ MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatterv_sched);
+ mpi_errno = newcomm_ptr->coll_fns->Iscatterv_sched(tmp_buf, recvcounts, disps, datatype,
recvbuf, recvcounts[rank], datatype, 0,
newcomm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -1013,9 +1013,9 @@ int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int recv
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ireduce_scatter_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ireduce_scatter_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_optimized(sendbuf, recvbuf, recvcounts,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_req(sendbuf, recvbuf, recvcounts,
datatype, op,
comm_ptr, &reqp);
if (reqp) {
@@ -1035,8 +1035,8 @@ int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int recv
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ireduce_scatter != NULL);
- mpi_errno = comm_ptr->coll_fns->Ireduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ireduce_scatter_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_sched(sendbuf, recvbuf, recvcounts, datatype, op, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index 06d2dbc..d8c2b65 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -846,11 +846,11 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
/* first do a reduce from right group to rank 0 in left group,
then from left group to rank 0 in right group*/
- MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce);
+ MPIU_Assert(comm_ptr->coll_fns && comm_ptr->coll_fns->Ireduce_sched);
if (comm_ptr->is_low_group) {
/* reduce from right group to rank 0*/
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -859,14 +859,14 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
/* reduce to rank 0 of right group */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
else {
/* reduce to rank 0 of right group */
root = 0;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -875,7 +875,7 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
/* reduce from right group to rank 0*/
root = (rank == 0) ? MPI_ROOT : MPI_PROC_NULL;
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, tmp_buf, total_count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, tmp_buf, total_count,
datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
}
@@ -889,8 +889,8 @@ int MPIR_Ireduce_scatter_block_inter(const void *sendbuf, void *recvbuf, int rec
newcomm_ptr = comm_ptr->local_comm;
- MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatter);
- mpi_errno = newcomm_ptr->coll_fns->Iscatter(tmp_buf, recvcount, datatype,
+ MPIU_Assert(newcomm_ptr->coll_fns && newcomm_ptr->coll_fns->Iscatter_sched);
+ mpi_errno = newcomm_ptr->coll_fns->Iscatter_sched(tmp_buf, recvcount, datatype,
recvbuf, recvcount, datatype, 0,
newcomm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -915,9 +915,9 @@ int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recv
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ireduce_scatter_block_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ireduce_scatter_block_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_block_optimized(sendbuf, recvbuf, recvcount,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_block_req(sendbuf, recvbuf, recvcount,
datatype, op,
comm_ptr, &reqp);
if (reqp) {
@@ -938,8 +938,8 @@ int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recv
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ireduce_scatter_block != NULL);
- mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ireduce_scatter_block_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_block_sched(sendbuf, recvbuf, recvcount, datatype, op, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index cec9b50..138b1f4 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -612,20 +612,20 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
/* do the intranode reduce on all nodes other than the root's node */
if (nc != NULL && MPIU_Get_intranode_rank(comm_ptr, root) == -1) {
- MPIU_Assert(nc->coll_fns && nc->coll_fns->Ireduce);
- mpi_errno = nc->coll_fns->Ireduce(sendbuf, tmp_buf, count, datatype, op, 0, nc, s);
+ MPIU_Assert(nc->coll_fns && nc->coll_fns->Ireduce_sched);
+ mpi_errno = nc->coll_fns->Ireduce_sched(sendbuf, tmp_buf, count, datatype, op, 0, nc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
}
/* do the internode reduce to the root's node */
if (nrc != NULL) {
- MPIU_Assert(nrc->coll_fns && nrc->coll_fns->Ireduce);
+ MPIU_Assert(nrc->coll_fns && nrc->coll_fns->Ireduce_sched);
if (nrc->rank != MPIU_Get_internode_rank(comm_ptr, root)) {
/* I am not on root's node. Use tmp_buf if we
participated in the first reduce, otherwise use sendbuf */
const void *buf = (nc == NULL ? sendbuf : tmp_buf);
- mpi_errno = nrc->coll_fns->Ireduce(buf, NULL, count, datatype,
+ mpi_errno = nrc->coll_fns->Ireduce_sched(buf, NULL, count, datatype,
op, MPIU_Get_internode_rank(comm_ptr, root),
nrc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -636,7 +636,7 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
/* I am not the root though. I don't have a valid recvbuf.
Use tmp_buf as recvbuf. */
- mpi_errno = nrc->coll_fns->Ireduce(sendbuf, tmp_buf, count, datatype,
+ mpi_errno = nrc->coll_fns->Ireduce_sched(sendbuf, tmp_buf, count, datatype,
op, MPIU_Get_internode_rank(comm_ptr, root),
nrc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -648,7 +648,7 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
else {
/* I am the root. in_place is automatically handled. */
- mpi_errno = nrc->coll_fns->Ireduce(sendbuf, recvbuf, count, datatype,
+ mpi_errno = nrc->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype,
op, MPIU_Get_internode_rank(comm_ptr, root),
nrc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -662,7 +662,7 @@ int MPIR_Ireduce_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
/* do the intranode reduce on the root's node */
if (nc != NULL && MPIU_Get_intranode_rank(comm_ptr, root) != -1) {
- mpi_errno = nc->coll_fns->Ireduce(sendbuf, recvbuf, count, datatype,
+ mpi_errno = nc->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype,
op, MPIU_Get_intranode_rank(comm_ptr, root),
nc, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -766,9 +766,9 @@ int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Ireduce_optimized != NULL) {
+ if (comm_ptr->coll_fns->Ireduce_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Ireduce_optimized(sendbuf, recvbuf, count,
+ mpi_errno = comm_ptr->coll_fns->Ireduce_req(sendbuf, recvbuf, count,
datatype, op, root,
comm_ptr, &reqp);
if (reqp) {
@@ -788,8 +788,8 @@ int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatyp
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPIU_Assert(comm_ptr->coll_fns != NULL);
- MPIU_Assert(comm_ptr->coll_fns->Ireduce != NULL);
- mpi_errno = comm_ptr->coll_fns->Ireduce(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Ireduce_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Ireduce_sched(sendbuf, recvbuf, count, datatype, op, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index a71f278..695bf11 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -195,10 +195,10 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
node_comm = comm_ptr->node_comm;
roots_comm = comm_ptr->node_roots_comm;
if (node_comm) {
- MPIU_Assert(node_comm->coll_fns && node_comm->coll_fns->Iscan && node_comm->coll_fns->Ibcast);
+ MPIU_Assert(node_comm->coll_fns && node_comm->coll_fns->Iscan_sched && node_comm->coll_fns->Ibcast_sched);
}
if (roots_comm) {
- MPIU_Assert(roots_comm->coll_fns && roots_comm->coll_fns->Iscan);
+ MPIU_Assert(roots_comm->coll_fns && roots_comm->coll_fns->Iscan_sched);
}
MPIR_Type_get_true_extent_impl(datatype, &true_lb, &true_extent);
@@ -226,7 +226,7 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
/* perform intranode scan to get temporary result in recvbuf. if there is only
one process, just copy the raw data. */
if (node_comm != NULL) {
- mpi_errno = node_comm->coll_fns->Iscan(sendbuf, recvbuf, count, datatype, op, node_comm, s);
+ mpi_errno = node_comm->coll_fns->Iscan_sched(sendbuf, recvbuf, count, datatype, op, node_comm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
}
@@ -265,7 +265,7 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
int roots_rank = MPIU_Get_internode_rank(comm_ptr, rank);
MPIU_Assert(roots_rank == roots_comm->rank);
- mpi_errno = roots_comm->coll_fns->Iscan(localfulldata, prefulldata, count, datatype, op, roots_comm, s);
+ mpi_errno = roots_comm->coll_fns->Iscan_sched(localfulldata, prefulldata, count, datatype, op, roots_comm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
@@ -292,7 +292,7 @@ int MPIR_Iscan_SMP(const void *sendbuf, void *recvbuf, int count, MPI_Datatype d
* "prefulldata" from another leader into "tempbuf" */
if (node_comm != NULL) {
- mpi_errno = node_comm->coll_fns->Ibcast(tempbuf, count, datatype, 0, node_comm, s);
+ mpi_errno = node_comm->coll_fns->Ibcast_sched(tempbuf, count, datatype, 0, node_comm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
MPID_SCHED_BARRIER(s);
}
@@ -322,9 +322,9 @@ int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iscan_optimized != NULL) {
+ if (comm_ptr->coll_fns->Iscan_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iscan_optimized(sendbuf, recvbuf, count,
+ mpi_errno = comm_ptr->coll_fns->Iscan_req(sendbuf, recvbuf, count,
datatype, op,
comm_ptr, &reqp);
if (reqp) {
@@ -343,8 +343,8 @@ int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Iscan != NULL);
- mpi_errno = comm_ptr->coll_fns->Iscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Iscan_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Iscan_sched(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/iscatter.c b/src/mpi/coll/iscatter.c
index 66a1e98..8a00336 100644
--- a/src/mpi/coll/iscatter.c
+++ b/src/mpi/coll/iscatter.c
@@ -503,8 +503,8 @@ int MPIR_Iscatter_inter(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
/* now do the usual scatter on this intracommunicator */
MPIU_Assert(newcomm_ptr->coll_fns != NULL);
- MPIU_Assert(newcomm_ptr->coll_fns->Iscatter != NULL);
- mpi_errno = newcomm_ptr->coll_fns->Iscatter(tmp_buf, recvcount, recvtype,
+ MPIU_Assert(newcomm_ptr->coll_fns->Iscatter_sched != NULL);
+ mpi_errno = newcomm_ptr->coll_fns->Iscatter_sched(tmp_buf, recvcount, recvtype,
recvbuf, recvcount, recvtype,
0, newcomm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -550,9 +550,9 @@ int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iscatter_optimized != NULL) {
+ if (comm_ptr->coll_fns->Iscatter_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iscatter_optimized(sendbuf, sendcount, sendtype,
+ mpi_errno = comm_ptr->coll_fns->Iscatter_req(sendbuf, sendcount, sendtype,
recvbuf, recvcount, recvtype,
root, comm_ptr, &reqp);
if (reqp) {
@@ -571,8 +571,8 @@ int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Iscatter != NULL);
- mpi_errno = comm_ptr->coll_fns->Iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Iscatter_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Iscatter_sched(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/coll/iscatterv.c b/src/mpi/coll/iscatterv.c
index 0b12958..90a04b8 100644
--- a/src/mpi/coll/iscatterv.c
+++ b/src/mpi/coll/iscatterv.c
@@ -121,9 +121,9 @@ int MPIR_Iscatterv_impl(const void *sendbuf, const int sendcounts[], const int d
*request = MPI_REQUEST_NULL;
MPIU_Assert(comm_ptr->coll_fns != NULL);
- if (comm_ptr->coll_fns->Iscatterv_optimized != NULL) {
+ if (comm_ptr->coll_fns->Iscatterv_req != NULL) {
/* --BEGIN USEREXTENSION-- */
- mpi_errno = comm_ptr->coll_fns->Iscatterv_optimized(sendbuf, sendcounts, displs, sendtype,
+ mpi_errno = comm_ptr->coll_fns->Iscatterv_req(sendbuf, sendcounts, displs, sendtype,
recvbuf, recvcount, recvtype,
root, comm_ptr, &reqp);
if (reqp) {
@@ -142,8 +142,8 @@ int MPIR_Iscatterv_impl(const void *sendbuf, const int sendcounts[], const int d
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns->Iscatterv != NULL);
- mpi_errno = comm_ptr->coll_fns->Iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
+ MPIU_Assert(comm_ptr->coll_fns->Iscatterv_sched != NULL);
+ mpi_errno = comm_ptr->coll_fns->Iscatterv_sched(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_start(&s, comm_ptr, tag, &reqp);
diff --git a/src/mpi/comm/commutil.c b/src/mpi/comm/commutil.c
index 95fcb6f..9982694 100644
--- a/src/mpi/comm/commutil.c
+++ b/src/mpi/comm/commutil.c
@@ -261,23 +261,23 @@ static int init_default_collops(void)
ops->ref_count = 1; /* force existence until finalize time */
/* intracomm default defaults... */
- ops->Ibcast = &MPIR_Ibcast_intra;
- ops->Ibarrier = &MPIR_Ibarrier_intra;
- ops->Ireduce = &MPIR_Ireduce_intra;
- ops->Ialltoall = &MPIR_Ialltoall_intra;
- ops->Ialltoallv = &MPIR_Ialltoallv_intra;
- ops->Ialltoallw = &MPIR_Ialltoallw_intra;
- ops->Iallreduce = &MPIR_Iallreduce_intra;
- ops->Igather = &MPIR_Igather_intra;
- ops->Igatherv = &MPIR_Igatherv;
- ops->Iscatter = &MPIR_Iscatter_intra;
- ops->Iscatterv = &MPIR_Iscatterv;
- ops->Ireduce_scatter = &MPIR_Ireduce_scatter_intra;
- ops->Ireduce_scatter_block = &MPIR_Ireduce_scatter_block_intra;
- ops->Iallgather = &MPIR_Iallgather_intra;
- ops->Iallgatherv = &MPIR_Iallgatherv_intra;
- ops->Iscan = &MPIR_Iscan_rec_dbl;
- ops->Iexscan = &MPIR_Iexscan;
+ ops->Ibcast_sched = &MPIR_Ibcast_intra;
+ ops->Ibarrier_sched = &MPIR_Ibarrier_intra;
+ ops->Ireduce_sched = &MPIR_Ireduce_intra;
+ ops->Ialltoall_sched = &MPIR_Ialltoall_intra;
+ ops->Ialltoallv_sched = &MPIR_Ialltoallv_intra;
+ ops->Ialltoallw_sched = &MPIR_Ialltoallw_intra;
+ ops->Iallreduce_sched = &MPIR_Iallreduce_intra;
+ ops->Igather_sched = &MPIR_Igather_intra;
+ ops->Igatherv_sched = &MPIR_Igatherv;
+ ops->Iscatter_sched = &MPIR_Iscatter_intra;
+ ops->Iscatterv_sched = &MPIR_Iscatterv;
+ ops->Ireduce_scatter_sched = &MPIR_Ireduce_scatter_intra;
+ ops->Ireduce_scatter_block_sched = &MPIR_Ireduce_scatter_block_intra;
+ ops->Iallgather_sched = &MPIR_Iallgather_intra;
+ ops->Iallgatherv_sched = &MPIR_Iallgatherv_intra;
+ ops->Iscan_sched = &MPIR_Iscan_rec_dbl;
+ ops->Iexscan_sched = &MPIR_Iexscan;
ops->Neighbor_allgather = &MPIR_Neighbor_allgather_default;
ops->Neighbor_allgatherv = &MPIR_Neighbor_allgatherv_default;
ops->Neighbor_alltoall = &MPIR_Neighbor_alltoall_default;
@@ -294,10 +294,10 @@ static int init_default_collops(void)
case MPID_HIERARCHY_FLAT:
break;
case MPID_HIERARCHY_PARENT:
- ops->Ibcast = &MPIR_Ibcast_SMP;
- ops->Iscan = &MPIR_Iscan_SMP;
- ops->Iallreduce = &MPIR_Iallreduce_SMP;
- ops->Ireduce = &MPIR_Ireduce_SMP;
+ ops->Ibcast_sched = &MPIR_Ibcast_SMP;
+ ops->Iscan_sched = &MPIR_Iscan_SMP;
+ ops->Iallreduce_sched = &MPIR_Iallreduce_SMP;
+ ops->Ireduce_sched = &MPIR_Ireduce_SMP;
break;
case MPID_HIERARCHY_NODE:
break;
@@ -323,21 +323,21 @@ static int init_default_collops(void)
ops->ref_count = 1; /* force existence until finalize time */
/* intercomm defaults */
- ops->Ibcast = &MPIR_Ibcast_inter;
- ops->Ibarrier = &MPIR_Ibarrier_inter;
- ops->Ireduce = &MPIR_Ireduce_inter;
- ops->Ialltoall = &MPIR_Ialltoall_inter;
- ops->Ialltoallv = &MPIR_Ialltoallv_inter;
- ops->Ialltoallw = &MPIR_Ialltoallw_inter;
- ops->Iallreduce = &MPIR_Iallreduce_inter;
- ops->Igather = &MPIR_Igather_inter;
- ops->Igatherv = &MPIR_Igatherv;
- ops->Iscatter = &MPIR_Iscatter_inter;
- ops->Iscatterv = &MPIR_Iscatterv;
- ops->Ireduce_scatter = &MPIR_Ireduce_scatter_inter;
- ops->Ireduce_scatter_block = &MPIR_Ireduce_scatter_block_inter;
- ops->Iallgather = &MPIR_Iallgather_inter;
- ops->Iallgatherv = &MPIR_Iallgatherv_inter;
+ ops->Ibcast_sched = &MPIR_Ibcast_inter;
+ ops->Ibarrier_sched = &MPIR_Ibarrier_inter;
+ ops->Ireduce_sched = &MPIR_Ireduce_inter;
+ ops->Ialltoall_sched = &MPIR_Ialltoall_inter;
+ ops->Ialltoallv_sched = &MPIR_Ialltoallv_inter;
+ ops->Ialltoallw_sched = &MPIR_Ialltoallw_inter;
+ ops->Iallreduce_sched = &MPIR_Iallreduce_inter;
+ ops->Igather_sched = &MPIR_Igather_inter;
+ ops->Igatherv_sched = &MPIR_Igatherv;
+ ops->Iscatter_sched = &MPIR_Iscatter_inter;
+ ops->Iscatterv_sched = &MPIR_Iscatterv;
+ ops->Ireduce_scatter_sched = &MPIR_Ireduce_scatter_inter;
+ ops->Ireduce_scatter_block_sched = &MPIR_Ireduce_scatter_block_inter;
+ ops->Iallgather_sched = &MPIR_Iallgather_inter;
+ ops->Iallgatherv_sched = &MPIR_Iallgatherv_inter;
/* scan and exscan are not valid for intercommunicators, leave them NULL */
/* Ineighbor_all* routines are not valid for intercommunicators, leave
* them NULL */
@@ -1236,7 +1236,7 @@ static int gcn_sch(MPID_Comm *comm_ptr, MPIR_Context_id_t *ctx0, MPIR_Context_id
st->ctx1 = ctx1;
MPIU_Memcpy(st->local_mask, context_mask, MPIR_MAX_CONTEXT_MASK * sizeof(uint32_t));
- mpi_errno = comm_ptr->coll_fns->Iallreduce(MPI_IN_PLACE, st->local_mask, MPIR_MAX_CONTEXT_MASK,
+ mpi_errno = comm_ptr->coll_fns->Iallreduce_sched(MPI_IN_PLACE, st->local_mask, MPIR_MAX_CONTEXT_MASK,
MPI_UINT32_T, MPI_BAND, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
@@ -1342,7 +1342,7 @@ int MPIR_Get_intercomm_contextid_nonblock(MPID_Comm *comm_ptr, MPID_Comm *newcom
MPID_SCHED_BARRIER(s);
}
- mpi_errno = lcomm->coll_fns->Ibcast(&newcommp->context_id, 1,
+ mpi_errno = lcomm->coll_fns->Ibcast_sched(&newcommp->context_id, 1,
MPIR_CONTEXT_ID_T_DATATYPE, 0, lcomm, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
diff --git a/src/mpid/pamid/src/comm/mpid_selectcolls.c b/src/mpid/pamid/src/comm/mpid_selectcolls.c
index 2e658e9..b79cc76 100644
--- a/src/mpid/pamid/src/comm/mpid_selectcolls.c
+++ b/src/mpid/pamid/src/comm/mpid_selectcolls.c
@@ -691,23 +691,23 @@ void MPIDI_Comm_coll_query(MPID_Comm *comm)
comm->coll_fns->Exscan = MPIDO_Exscan;
/* MPI-3 Support, no optimized collectives hooked in yet */
- comm->coll_fns->Ibarrier = MPIR_Ibarrier_intra;
- comm->coll_fns->Ibcast = MPIR_Ibcast_intra;
- comm->coll_fns->Igather = MPIR_Igather_intra;
- comm->coll_fns->Igatherv = MPIR_Igatherv;
- comm->coll_fns->Iscatter = MPIR_Iscatter_intra;
- comm->coll_fns->Iscatterv = MPIR_Iscatterv;
- comm->coll_fns->Iallgather = MPIR_Iallgather_intra;
- comm->coll_fns->Iallgatherv = MPIR_Iallgatherv_intra;
- comm->coll_fns->Ialltoall = MPIR_Ialltoall_intra;
- comm->coll_fns->Ialltoallv = MPIR_Ialltoallv_intra;
- comm->coll_fns->Ialltoallw = MPIR_Ialltoallw_intra;
- comm->coll_fns->Iallreduce = MPIR_Iallreduce_intra;
- comm->coll_fns->Ireduce = MPIR_Ireduce_intra;
- comm->coll_fns->Ireduce_scatter = MPIR_Ireduce_scatter_intra;
- comm->coll_fns->Ireduce_scatter_block = MPIR_Ireduce_scatter_block_intra;
- comm->coll_fns->Iscan = MPIR_Iscan_rec_dbl;
- comm->coll_fns->Iexscan = MPIR_Iexscan;
+ comm->coll_fns->Ibarrier_sched = MPIR_Ibarrier_intra;
+ comm->coll_fns->Ibcast_sched = MPIR_Ibcast_intra;
+ comm->coll_fns->Igather_sched = MPIR_Igather_intra;
+ comm->coll_fns->Igatherv_sched = MPIR_Igatherv;
+ comm->coll_fns->Iscatter_sched = MPIR_Iscatter_intra;
+ comm->coll_fns->Iscatterv_sched = MPIR_Iscatterv;
+ comm->coll_fns->Iallgather_sched = MPIR_Iallgather_intra;
+ comm->coll_fns->Iallgatherv_sched = MPIR_Iallgatherv_intra;
+ comm->coll_fns->Ialltoall_sched = MPIR_Ialltoall_intra;
+ comm->coll_fns->Ialltoallv_sched = MPIR_Ialltoallv_intra;
+ comm->coll_fns->Ialltoallw_sched = MPIR_Ialltoallw_intra;
+ comm->coll_fns->Iallreduce_sched = MPIR_Iallreduce_intra;
+ comm->coll_fns->Ireduce_sched = MPIR_Ireduce_intra;
+ comm->coll_fns->Ireduce_scatter_sched = MPIR_Ireduce_scatter_intra;
+ comm->coll_fns->Ireduce_scatter_block_sched = MPIR_Ireduce_scatter_block_intra;
+ comm->coll_fns->Iscan_sched = MPIR_Iscan_rec_dbl;
+ comm->coll_fns->Iexscan_sched = MPIR_Iexscan;
comm->coll_fns->Neighbor_allgather = MPIR_Neighbor_allgather_default;
comm->coll_fns->Neighbor_allgatherv = MPIR_Neighbor_allgatherv_default;
comm->coll_fns->Neighbor_alltoall = MPIR_Neighbor_alltoall_default;
@@ -715,23 +715,23 @@ void MPIDI_Comm_coll_query(MPID_Comm *comm)
comm->coll_fns->Neighbor_alltoallw = MPIR_Neighbor_alltoallw_default;
/* MPI-3 Support, optimized collectives hooked in */
- comm->coll_fns->Ibarrier_optimized = MPIDO_Ibarrier;
- comm->coll_fns->Ibcast_optimized = MPIDO_Ibcast;
- comm->coll_fns->Iallgather_optimized = MPIDO_Iallgather;
- comm->coll_fns->Iallgatherv_optimized = MPIDO_Iallgatherv;
- comm->coll_fns->Iallreduce_optimized = MPIDO_Iallreduce;
- comm->coll_fns->Ialltoall_optimized = MPIDO_Ialltoall;
- comm->coll_fns->Ialltoallv_optimized = MPIDO_Ialltoallv;
- comm->coll_fns->Ialltoallw_optimized = MPIDO_Ialltoallw;
- comm->coll_fns->Iexscan_optimized = MPIDO_Iexscan;
- comm->coll_fns->Igather_optimized = MPIDO_Igather;
- comm->coll_fns->Igatherv_optimized = MPIDO_Igatherv;
- comm->coll_fns->Ireduce_scatter_block_optimized = MPIDO_Ireduce_scatter_block;
- comm->coll_fns->Ireduce_scatter_optimized = MPIDO_Ireduce_scatter;
- comm->coll_fns->Ireduce_optimized = MPIDO_Ireduce;
- comm->coll_fns->Iscan_optimized = MPIDO_Iscan;
- comm->coll_fns->Iscatter_optimized = MPIDO_Iscatter;
- comm->coll_fns->Iscatterv_optimized = MPIDO_Iscatterv;
+ comm->coll_fns->Ibarrier_req = MPIDO_Ibarrier;
+ comm->coll_fns->Ibcast_req = MPIDO_Ibcast;
+ comm->coll_fns->Iallgather_req = MPIDO_Iallgather;
+ comm->coll_fns->Iallgatherv_req = MPIDO_Iallgatherv;
+ comm->coll_fns->Iallreduce_req = MPIDO_Iallreduce;
+ comm->coll_fns->Ialltoall_req = MPIDO_Ialltoall;
+ comm->coll_fns->Ialltoallv_req = MPIDO_Ialltoallv;
+ comm->coll_fns->Ialltoallw_req = MPIDO_Ialltoallw;
+ comm->coll_fns->Iexscan_req = MPIDO_Iexscan;
+ comm->coll_fns->Igather_req = MPIDO_Igather;
+ comm->coll_fns->Igatherv_req = MPIDO_Igatherv;
+ comm->coll_fns->Ireduce_scatter_block_req = MPIDO_Ireduce_scatter_block;
+ comm->coll_fns->Ireduce_scatter_req = MPIDO_Ireduce_scatter;
+ comm->coll_fns->Ireduce_req = MPIDO_Ireduce;
+ comm->coll_fns->Iscan_req = MPIDO_Iscan;
+ comm->coll_fns->Iscatter_req = MPIDO_Iscatter;
+ comm->coll_fns->Iscatterv_req = MPIDO_Iscatterv;
TRACE_ERR("MPIDI_Comm_coll_query exit\n");
}
http://git.mpich.org/mpich.git/commitdiff/2eefd3a26e6de5e0b57fa6164ec3f5fdf…
commit 2eefd3a26e6de5e0b57fa6164ec3f5fdfb56c4fe
Author: Michael Blocksome <blocksom(a)us.ibm.com>
Date: Thu Nov 1 13:58:13 2012 -0500
Add hooks for optimized MPIX_* non-blocking collectives.
The following collectives are updated:
MPIX_Ibcast
MPIX_Iallgather
MPIX_Iallgatherv
MPIX_Iallreduce
MPIX_Ialltoall
MPIX_Ialltoallv
MPIX_Ialltoallw
MPIX_Iexscan
MPIX_Igather
MPIX_Igatherv
MPIX_Ireduce_scatter_block
MPIX_Ireduce_scatter
MPIX_Ireduce
MPIX_Iscan
MPIX_Iscatter
MPIX_Iscatterv
These collectives are updated similar to how the optimized MPIX_Ibarrier
is implemented:
| The previous MPIR_Ibarrier_impl() function forced all adi implementations
| to create a MPID_Sched_t opaque object which was then passed in to the
| specific ibarrier implementation via a function pointer table.
|
| The MPID_Sched_t object represents a completely new state machine that
| must be advanced whenever mpi progress is made.
|
| The required construction of the MPID_Sched_t object and the required
| advance of the schedule state machine would be extremely detrimental to
| pamid performance.
(ibm) 47b497e15cd87df666c6031a28f5f8a5ae53cece
(ibm) aee872eb91f4300066957349e5a3d8103da33f40
Signed-off-by: Charles Archer <archerc(a)us.ibm.com>
diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
index bd0db7c..5c6f1d8 100644
--- a/src/include/mpiimpl.h
+++ b/src/include/mpiimpl.h
@@ -1976,50 +1976,95 @@ typedef struct MPID_Collops {
/* MPI-3 nonblocking collectives */
int (*Ibarrier)(MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Ibarrier_optimized)(MPID_Comm *comm_ptr, MPID_Request **request);
int (*Ibcast)(void *buffer, int count, MPI_Datatype datatype, int root,
MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Ibcast_optimized)(void *buffer, int count, MPI_Datatype datatype, int root,
+ MPID_Comm *comm_ptr, MPID_Request **request);
int (*Igather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
MPID_Sched_t s);
+ int (*Igather_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
+ MPID_Request **request);
int (*Igatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Igatherv_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs, MPI_Datatype recvtype, int root,
+ MPID_Comm *comm_ptr, MPID_Request **request);
int (*Iscatter)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
MPID_Sched_t s);
+ int (*Iscatter_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr,
+ MPID_Request **request);
int (*Iscatterv)(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Iscatterv_optimized)(const void *sendbuf, const int *sendcounts, const int *displs,
+ MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPID_Comm *comm_ptr, MPID_Request **request);
int (*Iallgather)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Sched_t s);
+ int (*Iallgather_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
+ MPID_Request **request);
int (*Iallgatherv)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
const int *recvcounts, const int *displs, MPI_Datatype recvtype,
MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Iallgatherv_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ const int *recvcounts, const int *displs, MPI_Datatype recvtype,
+ MPID_Comm *comm_ptr, MPID_Request ** request);
int (*Ialltoall)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Sched_t s);
+ int (*Ialltoall_optimized)(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
+ MPID_Request **request);
int (*Ialltoallv)(const void *sendbuf, const int *sendcounts, const int *sdispls,
MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
MPID_Sched_t s);
+ int (*Ialltoallv_optimized)(const void *sendbuf, const int *sendcounts, const int *sdispls,
+ MPI_Datatype sendtype, void *recvbuf, const int *recvcounts,
+ const int *rdispls, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
+ MPID_Request **request);
int (*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,
MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Ialltoallw_optimized)(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,
+ MPID_Comm *comm_ptr, MPID_Request **request);
int (*Ireduce)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
int root, MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Ireduce_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ int root, MPID_Comm *comm_ptr, MPID_Request **request);
int (*Iallreduce)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Iallreduce_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
int (*Ireduce_scatter)(const void *sendbuf, void *recvbuf, const int *recvcounts,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Ireduce_scatter_optimized)(const void *sendbuf, void *recvbuf, const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
int (*Ireduce_scatter_block)(const void *sendbuf, void *recvbuf, int recvcount,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
MPID_Sched_t s);
+ int (*Ireduce_scatter_block_optimized)(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
+ MPID_Request **request);
int (*Iscan)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Iscan_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ MPID_Comm *comm_ptr, MPID_Request **request);
int (*Iexscan)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
MPID_Comm *comm_ptr, MPID_Sched_t s);
+ int (*Iexscan_optimized)(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op,
+ MPID_Comm *comm_ptr, MPID_Request **request);
struct MPID_Collops *prev_coll_fns; /* when overriding this table, set this to point to the old table */
diff --git a/src/mpi/coll/iallgather.c b/src/mpi/coll/iallgather.c
index aaa1ab0..095c5c4 100644
--- a/src/mpi/coll/iallgather.c
+++ b/src/mpi/coll/iallgather.c
@@ -588,12 +588,25 @@ fn_fail:
int MPIR_Iallgather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Iallgather_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Iallgather_optimized(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype,comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iallgatherv.c b/src/mpi/coll/iallgatherv.c
index 535b639..37b2841 100644
--- a/src/mpi/coll/iallgatherv.c
+++ b/src/mpi/coll/iallgatherv.c
@@ -690,12 +690,25 @@ int MPIR_Iallgatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendt
MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Iallgatherv_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Iallgatherv_optimized(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iallreduce.c b/src/mpi/coll/iallreduce.c
index 590192e..f51bee1 100644
--- a/src/mpi/coll/iallreduce.c
+++ b/src/mpi/coll/iallreduce.c
@@ -646,12 +646,25 @@ fn_fail:
int MPIR_Iallreduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Iallreduce_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Iallreduce_optimized(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ialltoall.c b/src/mpi/coll/ialltoall.c
index 3988581..593ae79 100644
--- a/src/mpi/coll/ialltoall.c
+++ b/src/mpi/coll/ialltoall.c
@@ -518,12 +518,25 @@ fn_fail:
int MPIR_Ialltoall_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ialltoall_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ialltoall_optimized(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ialltoallv.c b/src/mpi/coll/ialltoallv.c
index 72ba2c6..b73e211 100644
--- a/src/mpi/coll/ialltoallv.c
+++ b/src/mpi/coll/ialltoallv.c
@@ -245,12 +245,26 @@ int MPIR_Ialltoallv_impl(const void *sendbuf, const int sendcounts[], const int
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ialltoallv_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ialltoallv_optimized(sendbuf, sendcounts, sdispls, sendtype, recvbuf, recvcounts, rdispls, recvtype, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ialltoallw.c b/src/mpi/coll/ialltoallw.c
index 125412d..9409b44 100644
--- a/src/mpi/coll/ialltoallw.c
+++ b/src/mpi/coll/ialltoallw.c
@@ -251,12 +251,25 @@ int MPIR_Ialltoallw_impl(const void *sendbuf, const int sendcounts[], const int
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ialltoallw_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ialltoallw_optimized(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ibarrier.c b/src/mpi/coll/ibarrier.c
index 66fe1fc..3bf12da 100644
--- a/src/mpi/coll/ibarrier.c
+++ b/src/mpi/coll/ibarrier.c
@@ -170,18 +170,30 @@ fn_fail:
int MPIR_Ibarrier_impl(MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ibarrier_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ibarrier_optimized(comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
MPIU_Assert(comm_ptr->coll_fns->Ibarrier != NULL);
mpi_errno = comm_ptr->coll_fns->Ibarrier(comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
diff --git a/src/mpi/coll/ibcast.c b/src/mpi/coll/ibcast.c
index 652c096..57ddd5d 100644
--- a/src/mpi/coll/ibcast.c
+++ b/src/mpi/coll/ibcast.c
@@ -856,18 +856,30 @@ fn_fail:
int MPIR_Ibcast_impl(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ibcast_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ibcast_optimized(buffer, count, datatype, root, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
MPIU_Assert(comm_ptr->coll_fns->Ibcast != NULL);
mpi_errno = comm_ptr->coll_fns->Ibcast(buffer, count, datatype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
diff --git a/src/mpi/coll/iexscan.c b/src/mpi/coll/iexscan.c
index cdb8354..c28c2c8 100644
--- a/src/mpi/coll/iexscan.c
+++ b/src/mpi/coll/iexscan.c
@@ -183,12 +183,25 @@ fn_fail:
int MPIR_Iexscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Iexscan_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Iexscan_optimized(sendbuf, recvbuf, count, datatype, op, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/igather.c b/src/mpi/coll/igather.c
index ee0a06d..3e1b51d 100644
--- a/src/mpi/coll/igather.c
+++ b/src/mpi/coll/igather.c
@@ -510,12 +510,27 @@ fn_fail:
int MPIR_Igather_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Igather_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Igather_optimized(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype,
+ root, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/igatherv.c b/src/mpi/coll/igatherv.c
index 2ece10f..388c012 100644
--- a/src/mpi/coll/igatherv.c
+++ b/src/mpi/coll/igatherv.c
@@ -109,12 +109,27 @@ int MPIR_Igatherv_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype
int root, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Igatherv_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Igatherv_optimized(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ root, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index a4829ee..83a16aa 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -1008,12 +1008,27 @@ int MPIR_Ireduce_scatter_impl(const void *sendbuf, void *recvbuf, const int recv
MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ireduce_scatter_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_optimized(sendbuf, recvbuf, recvcounts,
+ datatype, op,
+ comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index 1018417..06d2dbc 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -910,12 +910,28 @@ fn_fail:
int MPIR_Ireduce_scatter_block_impl(const void *sendbuf, void *recvbuf, int recvcount, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ireduce_scatter_block_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ireduce_scatter_block_optimized(sendbuf, recvbuf, recvcount,
+ datatype, op,
+ comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/ireduce.c b/src/mpi/coll/ireduce.c
index 50c3f96..cec9b50 100644
--- a/src/mpi/coll/ireduce.c
+++ b/src/mpi/coll/ireduce.c
@@ -761,12 +761,27 @@ fn_fail:
int MPIR_Ireduce_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Ireduce_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Ireduce_optimized(sendbuf, recvbuf, count,
+ datatype, op, root,
+ comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
diff --git a/src/mpi/coll/iscan.c b/src/mpi/coll/iscan.c
index 2cf631c..a71f278 100644
--- a/src/mpi/coll/iscan.c
+++ b/src/mpi/coll/iscan.c
@@ -317,18 +317,32 @@ fn_fail:
int MPIR_Iscan_impl(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Iscan_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Iscan_optimized(sendbuf, recvbuf, count,
+ datatype, op,
+ comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
MPIU_Assert(comm_ptr->coll_fns->Iscan != NULL);
mpi_errno = comm_ptr->coll_fns->Iscan(sendbuf, recvbuf, count, datatype, op, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
diff --git a/src/mpi/coll/iscatter.c b/src/mpi/coll/iscatter.c
index 75a972b..66a1e98 100644
--- a/src/mpi/coll/iscatter.c
+++ b/src/mpi/coll/iscatter.c
@@ -545,18 +545,32 @@ fn_fail:
int MPIR_Iscatter_impl(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Iscatter_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Iscatter_optimized(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype,
+ root, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
MPIU_Assert(comm_ptr->coll_fns->Iscatter != NULL);
mpi_errno = comm_ptr->coll_fns->Iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
diff --git a/src/mpi/coll/iscatterv.c b/src/mpi/coll/iscatterv.c
index 7d82bd4..0b12958 100644
--- a/src/mpi/coll/iscatterv.c
+++ b/src/mpi/coll/iscatterv.c
@@ -116,18 +116,32 @@ int MPIR_Iscatterv_impl(const void *sendbuf, const int sendcounts[], const int d
MPI_Datatype recvtype, int root, MPID_Comm *comm_ptr, MPI_Request *request)
{
int mpi_errno = MPI_SUCCESS;
- int tag = -1;
MPID_Request *reqp = NULL;
- MPID_Sched_t s = MPID_SCHED_NULL;
*request = MPI_REQUEST_NULL;
+ MPIU_Assert(comm_ptr->coll_fns != NULL);
+ if (comm_ptr->coll_fns->Iscatterv_optimized != NULL) {
+ /* --BEGIN USEREXTENSION-- */
+ mpi_errno = comm_ptr->coll_fns->Iscatterv_optimized(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype,
+ root, comm_ptr, &reqp);
+ if (reqp) {
+ *request = reqp->handle;
+ if (mpi_errno) MPIU_ERR_POP(mpi_errno);
+ goto fn_exit;
+ }
+ /* --END USEREXTENSION-- */
+ }
+
+ int tag = -1;
+ MPID_Sched_t s = MPID_SCHED_NULL;
+
mpi_errno = MPID_Sched_next_tag(comm_ptr, &tag);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
mpi_errno = MPID_Sched_create(&s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- MPIU_Assert(comm_ptr->coll_fns != NULL);
MPIU_Assert(comm_ptr->coll_fns->Iscatterv != NULL);
mpi_errno = comm_ptr->coll_fns->Iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, recvcount, recvtype, root, comm_ptr, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
diff --git a/src/mpid/pamid/include/mpidi_prototypes.h b/src/mpid/pamid/include/mpidi_prototypes.h
index 55566f2..ec50f71 100644
--- a/src/mpid/pamid/include/mpidi_prototypes.h
+++ b/src/mpid/pamid/include/mpidi_prototypes.h
@@ -238,20 +238,27 @@ void MPIDI_Coll_register (void);
int MPIDO_Bcast(void *buffer, int count, MPI_Datatype dt, int root, MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_Bcast_simple(void *buffer, int count, MPI_Datatype dt, int root, MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_bcast(pami_xfer_t *bcast, void *comm);
+int MPIDO_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPID_Comm *comm_ptr, MPID_Request **request);
int MPIDO_Barrier(MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_Barrier_simple(MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_barrier(pami_xfer_t *barrier, void *comm);
+int MPIDO_Ibarrier(MPID_Comm *comm_ptr, MPID_Request **request);
int MPIDO_Allreduce(const void *sbuffer, void *rbuffer, int count,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_Allreduce_simple(const void *sbuffer, void *rbuffer, int count,
MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_allreduce(pami_xfer_t *allreduce, void *comm);
+int MPIDO_Iallreduce(const void *sbuffer, void *rbuffer, int count,
+ MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
+ MPID_Request ** request);
int MPIDO_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_Reduce_simple(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_reduce(pami_xfer_t *reduce, void *comm);
+int MPIDO_Ireduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, int root, MPID_Comm *comm_ptr, MPID_Request **request);
int MPIDO_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
MPID_Comm *comm_ptr, int *mpierrno);
@@ -259,6 +266,9 @@ int MPIDO_Allgather_simple(const void *sendbuf, int sendcount, MPI_Datatype send
void *recvbuf, int recvcount, MPI_Datatype recvtype,
MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_allgather(pami_xfer_t *allgather, void *comm);
+int MPIDO_Iallgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,
+ int recvcount, MPI_Datatype recvtype, MPID_Comm *comm_ptr,
+ MPID_Request **request);
int MPIDO_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int *recvcounts, const int *displs,
@@ -279,6 +289,9 @@ int MPIDO_Gather_simple(const void *sendbuf, int sendcount, MPI_Datatype sendtyp
void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPID_Comm * comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_gather(pami_xfer_t *gather, void *comm);
+int MPIDO_Igather(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPID_Comm * comm_ptr, MPID_Request **request);
int MPIDO_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
@@ -287,17 +300,24 @@ int MPIDO_Gatherv_simple(const void *sendbuf, int sendcount, MPI_Datatype sendty
void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
int root, MPID_Comm * comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_gatherv(pami_xfer_t *gatherv, void *comm);
+int MPIDO_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *displs, MPI_Datatype recvtype,
+ int root, MPID_Comm * comm_ptr, MPID_Request **request);
int MPIDO_Scan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
int MPIDO_Scan_simple(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_scan(pami_xfer_t *scan, void *comm);
+int MPIDO_Iscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request);
int MPIDO_Exscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
int MPIDO_Exscan_simple(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, MPID_Comm * comm_ptr, int *mpierrno);
+int MPIDO_Iexscan(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
+ MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request);
int MPIDO_Scatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
@@ -306,6 +326,9 @@ int MPIDO_Scatter_simple(const void *sendbuf, int sendcount, MPI_Datatype sendty
void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPID_Comm * comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_scatter(pami_xfer_t *scatter, void *comm);
+int MPIDO_Iscatter(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPID_Comm * comm_ptr, MPID_Request **request);
int MPIDO_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype,
@@ -316,6 +339,10 @@ int MPIDO_Scatterv_simple(const void *sendbuf, const int *sendcounts, const int
void *recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPID_Comm * comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_scatterv(pami_xfer_t *scatterv, void *comm);
+int MPIDO_Iscatterv(const void *sendbuf, const int *sendcounts, const int *displs,
+ MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ int root, MPID_Comm * comm_ptr, MPID_Request **request);
int MPIDO_Alltoallv(const void *sendbuf, const int *sendcounts, const int *senddispls,
MPI_Datatype sendtype,
@@ -328,6 +355,11 @@ int MPIDO_Alltoallv_simple(const void *sendbuf, const int *sendcounts, const int
MPI_Datatype recvtype,
MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_alltoallv(pami_xfer_t *alltoallv, void *comm);
+int MPIDO_Ialltoallv(const void *sendbuf, const int *sendcounts, const int *senddispls,
+ MPI_Datatype sendtype,
+ void *recvbuf, const int *recvcounts, const int *recvdispls,
+ MPI_Datatype recvtype,
+ MPID_Comm *comm_ptr, MPID_Request **request);
int MPIDO_Alltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype,
@@ -336,6 +368,22 @@ int MPIDO_Alltoall_simple(const void *sendbuf, int sendcount, MPI_Datatype sendt
void *recvbuf, int recvcount, MPI_Datatype recvtype,
MPID_Comm *comm_ptr, int *mpierrno);
int MPIDO_CSWrapper_alltoall(pami_xfer_t *alltoall, void *comm);
+int MPIDO_Ialltoall(const void *sendbuf, int sendcount, MPI_Datatype sendtype,
+ void *recvbuf, int recvcount, MPI_Datatype recvtype,
+ MPID_Comm *comm_ptr, MPID_Request **request);
+
+int MPIDO_Ialltoallw(const void *sendbuf, const int *sendcounts, const int *senddispls,
+ const MPI_Datatype * sendtypes,
+ void *recvbuf, const int *recvcounts, const int *recvdispls,
+ const MPI_Datatype * recvtypes,
+ MPID_Comm *comm_ptr, MPID_Request **request);
+
+int MPIDO_Ireduce_scatter_block(const void *sendbuf, void *recvbuf, int recvcount,
+ MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr,
+ MPID_Request **request);
+
+int MPIDO_Ireduce_scatter(const void *sendbuf, void *recvbuf, const int *recvcounts,
+ MPI_Datatype datatype, MPI_Op op, MPID_Comm *comm_ptr, MPID_Request **request);
int MPIDI_Datatype_to_pami(MPI_Datatype dt,
pami_type_t *pdt,
diff --git a/src/mpid/pamid/src/coll/Makefile.mk b/src/mpid/pamid/src/coll/Makefile.mk
index 59efcbc..a11e6a1 100644
--- a/src/mpid/pamid/src/coll/Makefile.mk
+++ b/src/mpid/pamid/src/coll/Makefile.mk
@@ -33,7 +33,10 @@ include $(top_srcdir)/src/mpid/pamid/src/coll/alltoallv/Makefile.mk
include $(top_srcdir)/src/mpid/pamid/src/coll/gatherv/Makefile.mk
include $(top_srcdir)/src/mpid/pamid/src/coll/scan/Makefile.mk
include $(top_srcdir)/src/mpid/pamid/src/coll/reduce/Makefile.mk
-
+include $(top_srcdir)/src/mpid/pamid/src/coll/alltoallw/Makefile.mk
+include $(top_srcdir)/src/mpid/pamid/src/coll/exscan/Makefile.mk
+include $(top_srcdir)/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk
+include $(top_srcdir)/src/mpid/pamid/src/coll/ired_scat/Makefile.mk
lib_lib@MPILIBNAME@_la_SOURCES += \
src/mpid/pamid/src/coll/coll_utils.c
diff --git a/src/mpid/pamid/src/coll/allgather/Makefile.mk b/src/mpid/pamid/src/coll/allgather/Makefile.mk
index 5f48e77..dc8864e 100644
--- a/src/mpid/pamid/src/coll/allgather/Makefile.mk
+++ b/src/mpid/pamid/src/coll/allgather/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/allgather/mpido_allgather.c
+ src/mpid/pamid/src/coll/allgather/mpido_allgather.c \
+ src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/allgather/mpido_iallgather.c b/src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
new file mode 100644
index 0000000..82b7e97
--- /dev/null
+++ b/src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
@@ -0,0 +1,73 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/allgather/mpido_iallgather.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON */
+#include <mpidimpl.h>
+
+int
+MPIDO_Iallgather(const void *sendbuf,
+ int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ int recvcount,
+ MPI_Datatype recvtype,
+ MPID_Comm * comm_ptr,
+ MPID_Request ** request)
+{
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Iallgather_impl() function to invoke the mpich nbc implementation
+ * of MPI_Iallgather().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Iallgather() with a blocking MPIR_Allgather().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH iallgather algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Allgather_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype,
+ comm_ptr, &mpierrno);
+
+ /*
+ * The blocking allgather has completed - create and complete a
+ * MPID_Request object so the MPIR_Iallgather_impl() function does not
+ * perform an additional iallgather.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/allgatherv/Makefile.mk b/src/mpid/pamid/src/coll/allgatherv/Makefile.mk
index fd131ed..f0ba398 100644
--- a/src/mpid/pamid/src/coll/allgatherv/Makefile.mk
+++ b/src/mpid/pamid/src/coll/allgatherv/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c
+ src/mpid/pamid/src/coll/allgatherv/mpido_allgatherv.c \
+ src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c b/src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
new file mode 100644
index 0000000..68d47c7
--- /dev/null
+++ b/src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
@@ -0,0 +1,77 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/allgatherv/mpido_iallgatherv.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON */
+#include <mpidimpl.h>
+
+int
+MPIDO_Iallgatherv(const void *sendbuf,
+ int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ MPID_Comm * comm_ptr,
+ MPID_Request ** request)
+{
+ TRACE_ERR("Entering MPIDO_Iallgatherv\n");
+
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Iallgather_impl() function to invoke the mpich nbc implementation
+ * of MPI_Iallgather().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Iallgather() with a blocking MPIR_Allgather().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH iallgather algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Allgatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ comm_ptr, &mpierrno);
+
+ /*
+ * The blocking allgather has completed - create and complete a
+ * MPID_Request object so the MPIR_Iallgather_impl() function does not
+ * perform an additional iallgather.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/allreduce/Makefile.mk b/src/mpid/pamid/src/coll/allreduce/Makefile.mk
index 26b2a29..2be9e61 100644
--- a/src/mpid/pamid/src/coll/allreduce/Makefile.mk
+++ b/src/mpid/pamid/src/coll/allreduce/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c
+ src/mpid/pamid/src/coll/allreduce/mpido_allreduce.c \
+ src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c b/src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
new file mode 100644
index 0000000..6446db7
--- /dev/null
+++ b/src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
@@ -0,0 +1,73 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/allreduce/mpido_iallreduce.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+
+#include <mpidimpl.h>
+
+int MPIDO_Iallreduce(const void *sendbuf,
+ void *recvbuf,
+ int count,
+ MPI_Datatype dt,
+ MPI_Op op,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ TRACE_ERR("Entering mpido_iallreduce\n");
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Iallreduce_impl() function to invoke the mpich nbc implementation
+ * of MPI_Iallreduce().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Iallreduce() with a blocking MPIR_Allreduce().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH iallreduce algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Allreduce_impl(sendbuf, recvbuf, count, dt, op,
+ comm_ptr, &mpierrno);
+
+ /*
+ * The blocking allreduce has completed - create and complete a
+ * MPID_Request object so the MPIR_Iallreduce_impl() function does not
+ * perform an additional iallreduce.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/alltoall/Makefile.mk b/src/mpid/pamid/src/coll/alltoall/Makefile.mk
index 3176aa7..1f40331 100644
--- a/src/mpid/pamid/src/coll/alltoall/Makefile.mk
+++ b/src/mpid/pamid/src/coll/alltoall/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c
+ src/mpid/pamid/src/coll/alltoall/mpido_alltoall.c \
+ src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c b/src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
new file mode 100644
index 0000000..2d1a2c5
--- /dev/null
+++ b/src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
@@ -0,0 +1,76 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/alltoall/mpido_ialltoall.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+
+#include <mpidimpl.h>
+
+int MPIDO_Ialltoall(const void *sendbuf,
+ int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ int recvcount,
+ MPI_Datatype recvtype,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ TRACE_ERR("Entering MPIDO_Ialltoall\n");
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Ialltoall_impl() function to invoke the mpich nbc implementation
+ * of MPI_Ialltoall().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ialltoall() with a blocking MPIR_Alltoall().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking alltoall algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Alltoall_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype,
+ comm_ptr, &mpierrno);
+
+ /*
+ * The blocking allitoall has completed - create and complete a
+ * MPID_Request object so the MPIR_Ialltoall_impl() function does not
+ * perform an additional ialltoall.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ TRACE_ERR("Leaving MPIDO_Ialltoall\n");
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/alltoallv/Makefile.mk b/src/mpid/pamid/src/coll/alltoallv/Makefile.mk
index 8e3fa82..15ab517 100644
--- a/src/mpid/pamid/src/coll/alltoallv/Makefile.mk
+++ b/src/mpid/pamid/src/coll/alltoallv/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c
+ src/mpid/pamid/src/coll/alltoallv/mpido_alltoallv.c \
+ src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c b/src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
new file mode 100644
index 0000000..14ee4d0
--- /dev/null
+++ b/src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
@@ -0,0 +1,79 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/alltoallv/mpido_alltoallv.c
+ * \brief ???
+ */
+/*#define TRACE_ON*/
+
+#include <mpidimpl.h>
+
+int MPIDO_Ialltoallv(const void *sendbuf,
+ const int *sendcounts,
+ const int *senddispls,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *recvdispls,
+ MPI_Datatype recvtype,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ if(comm_ptr->rank == 0)
+ TRACE_ERR("Entering MPIDO_Ialltoallv\n");
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Ialltoalliv_impl() function to invoke the mpich nbc implementation
+ * of MPI_Ialltoallv().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ialltoallv() with a blocking MPIR_Alltoallv().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking alltoallv algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Alltoallv_impl(sendbuf, sendcounts, senddispls, sendtype,
+ recvbuf, recvcounts, recvdispls, recvtype,
+ comm_ptr, &mpierrno);
+
+ /*
+ * The blocking alltoallv has completed - create and complete a
+ * MPID_Request object so the MPIR_Ialltoallv_impl() function does not
+ * perform an additional ialltoallv.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+
+ TRACE_ERR("Leaving ialltoallv\n");
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/alltoallw/Makefile.mk b/src/mpid/pamid/src/coll/alltoallw/Makefile.mk
new file mode 100644
index 0000000..33a90cc
--- /dev/null
+++ b/src/mpid/pamid/src/coll/alltoallw/Makefile.mk
@@ -0,0 +1,28 @@
+# begin_generated_IBM_copyright_prolog
+#
+# This is an automatically generated copyright prolog.
+# After initializing, DO NOT MODIFY OR MOVE
+# ---------------------------------------------------------------
+# Licensed Materials - Property of IBM
+# Blue Gene/Q 5765-PER 5765-PRP
+#
+# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
+# US Government Users Restricted Rights -
+# Use, duplication, or disclosure restricted
+# by GSA ADP Schedule Contract with IBM Corp.
+#
+# ---------------------------------------------------------------
+#
+# end_generated_IBM_copyright_prolog
+# -*- mode: makefile-gmake; -*-
+
+# note that the includes always happen but the effects of their contents are
+# affected by "if BUILD_PAMID"
+if BUILD_PAMID
+
+
+lib_lib@MPILIBNAME@_la_SOURCES += \
+ src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
+
+
+endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c b/src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
new file mode 100644
index 0000000..0a82baf
--- /dev/null
+++ b/src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
@@ -0,0 +1,79 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/alltoallv/mpido_alltoallw.c
+ * \brief ???
+ */
+/*#define TRACE_ON*/
+
+#include <mpidimpl.h>
+
+int MPIDO_Ialltoallw(const void *sendbuf,
+ const int *sendcounts,
+ const int *senddispls,
+ const MPI_Datatype *sendtypes,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *recvdispls,
+ const MPI_Datatype *recvtypes,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ if(comm_ptr->rank == 0)
+ TRACE_ERR("Entering MPIDO_Ialltoallw\n");
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Ialltoallw_impl() function to invoke the mpich nbc implementation
+ * of MPI_Ialltoallw().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ialltoallw() with a blocking MPIR_Alltoallw().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking alltoallw algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Alltoallw_impl(sendbuf, sendcounts, senddispls, sendtypes,
+ recvbuf, recvcounts, recvdispls, recvtypes,
+ comm_ptr, &mpierrno);
+
+ /*
+ * The blocking alltoallw has completed - create and complete a
+ * MPID_Request object so the MPIR_Ialltoallw_impl() function does not
+ * perform an additional ialltoallw.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+
+ TRACE_ERR("Leaving ialltoallw\n");
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/barrier/Makefile.mk b/src/mpid/pamid/src/coll/barrier/Makefile.mk
index 6e38ebd..5f17631 100644
--- a/src/mpid/pamid/src/coll/barrier/Makefile.mk
+++ b/src/mpid/pamid/src/coll/barrier/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/barrier/mpido_barrier.c
+ src/mpid/pamid/src/coll/barrier/mpido_barrier.c \
+ src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c b/src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
new file mode 100644
index 0000000..10607c7
--- /dev/null
+++ b/src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
@@ -0,0 +1,116 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/barrier/mpido_ibarrier.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+
+#include <mpidimpl.h>
+
+static void cb_ibarrier(void *ctxt, void *clientdata, pami_result_t err)
+{
+ MPID_Request *mpid_request = (MPID_Request *) clientdata;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+}
+
+int MPIDO_Ibarrier(MPID_Comm *comm_ptr, MPID_Request **request)
+{
+ TRACE_ERR("Entering MPIDO_Ibarrier\n");
+
+ if(unlikely(comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER] == MPID_COLL_USE_MPICH))
+ {
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ibarrier() with a blocking MPIR_Barrier().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH barrier\n");
+ TRACE_ERR("Using MPICH Barrier\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Barrier(comm_ptr, &mpierrno);
+
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ MPIDI_Post_coll_t barrier_post;
+ pami_xfer_t barrier;
+ pami_algorithm_t my_barrier;
+ pami_metadata_t *my_barrier_md;
+ int queryreq = 0;
+
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+
+ barrier.cb_done = cb_ibarrier;
+ barrier.cookie = (void *)mpid_request;
+
+ if(comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER] == MPID_COLL_OPTIMIZED)
+ {
+ TRACE_ERR("Optimized barrier (%s) was pre-selected\n", comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BARRIER][0].name);
+ my_barrier = comm_ptr->mpid.opt_protocol[PAMI_XFER_BARRIER][0];
+ my_barrier_md = &comm_ptr->mpid.opt_protocol_md[PAMI_XFER_BARRIER][0];
+ queryreq = comm_ptr->mpid.must_query[PAMI_XFER_BARRIER][0];
+ }
+ else
+ {
+ TRACE_ERR("Barrier (%s) was specified by user\n", comm_ptr->mpid.user_metadata[PAMI_XFER_BARRIER].name);
+ my_barrier = comm_ptr->mpid.user_selected[PAMI_XFER_BARRIER];
+ my_barrier_md = &comm_ptr->mpid.user_metadata[PAMI_XFER_BARRIER];
+ queryreq = comm_ptr->mpid.user_selected_type[PAMI_XFER_BARRIER];
+ }
+
+ barrier.algorithm = my_barrier;
+ /* There is no support for query-required barrier protocols here */
+ MPID_assert_always(queryreq != MPID_COLL_ALWAYS_QUERY);
+ MPID_assert_always(queryreq != MPID_COLL_CHECK_FN_REQUIRED);
+
+ /* TODO Name needs fixed somehow */
+ MPIDI_Update_last_algorithm(comm_ptr, my_barrier_md->name);
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ {
+ unsigned long long int threadID;
+ MPIU_Thread_id_t tid;
+ MPIU_Thread_self(&tid);
+ threadID = (unsigned long long int)tid;
+ fprintf(stderr,"<%llx> Using protocol %s for barrier on %u\n",
+ threadID,
+ my_barrier_md->name,
+ (unsigned) comm_ptr->context_id);
+ }
+ TRACE_ERR("%s barrier\n", MPIDI_Process.context_post.active>0?"posting":"invoking");
+ MPIDI_Context_post(MPIDI_Context[0], &barrier_post.state,
+ MPIDI_Pami_post_wrapper, (void *)&barrier);
+ TRACE_ERR("barrier %s rc: %d\n", MPIDI_Process.context_post.active>0?"posted":"invoked", rc);
+
+ MPID_Progress_wait_inline(1);
+
+ TRACE_ERR("exiting mpido_ibarrier\n");
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/bcast/Makefile.mk b/src/mpid/pamid/src/coll/bcast/Makefile.mk
index 489e356..2b0c9fe 100644
--- a/src/mpid/pamid/src/coll/bcast/Makefile.mk
+++ b/src/mpid/pamid/src/coll/bcast/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/bcast/mpido_bcast.c
+ src/mpid/pamid/src/coll/bcast/mpido_bcast.c \
+ src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/bcast/mpido_ibcast.c b/src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
new file mode 100644
index 0000000..07bd89a
--- /dev/null
+++ b/src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
@@ -0,0 +1,86 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/bcast/mpido_ibcast.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+
+#include <mpidimpl.h>
+
+int MPIDO_Ibcast(void *buffer,
+ int count,
+ MPI_Datatype datatype,
+ int root,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ TRACE_ERR("in mpido_ibcast\n");
+
+ const unsigned is_root_rank = (comm_ptr->rank == root);
+ const unsigned user_selected_type =
+ comm_ptr->mpid.user_selected_type[PAMI_XFER_BROADCAST];
+
+ int data_size, data_contig;
+ MPI_Aint data_true_lb = 0;
+ MPID_Datatype *data_ptr;
+
+ MPIDI_Datatype_get_info(count, datatype,
+ data_contig, data_size, data_ptr, data_true_lb);
+
+ /*
+ * If the user has constructed some weird 0-length datatype but
+ * count is not 0, or if the user forced a mpich bcast alogorith,
+ * perform a mpich bcast.
+ */
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to MPIR_Ibcast_impl
+ * to invoke the mpich nbc implementation of MPI_Ibcast().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ibcast() with a blocking MPIR_Bcast().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH bcast algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Bcast_intra(buffer, count, datatype, root, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking bcast has completed - create and complete a MPID_Request
+ * object so the MPIR_Ibcast_impl() function does not perform the bcast.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ TRACE_ERR("leaving ibcast\n");
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/exscan/Makefile.mk b/src/mpid/pamid/src/coll/exscan/Makefile.mk
new file mode 100644
index 0000000..bd79293
--- /dev/null
+++ b/src/mpid/pamid/src/coll/exscan/Makefile.mk
@@ -0,0 +1,28 @@
+# begin_generated_IBM_copyright_prolog
+#
+# This is an automatically generated copyright prolog.
+# After initializing, DO NOT MODIFY OR MOVE
+# ---------------------------------------------------------------
+# Licensed Materials - Property of IBM
+# Blue Gene/Q 5765-PER 5765-PRP
+#
+# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
+# US Government Users Restricted Rights -
+# Use, duplication, or disclosure restricted
+# by GSA ADP Schedule Contract with IBM Corp.
+#
+# ---------------------------------------------------------------
+#
+# end_generated_IBM_copyright_prolog
+# -*- mode: makefile-gmake; -*-
+
+# note that the includes always happen but the effects of their contents are
+# affected by "if BUILD_PAMID"
+if BUILD_PAMID
+
+
+lib_lib@MPILIBNAME@_la_SOURCES += \
+ src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
+
+
+endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/exscan/mpido_iexscan.c b/src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
new file mode 100644
index 0000000..a45dc41
--- /dev/null
+++ b/src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
@@ -0,0 +1,65 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/exscan/mpido_iexscan.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON */
+#include <mpidimpl.h>
+
+int MPIDO_Iexscan(const void *sendbuf, void *recvbuf,
+ int count, MPI_Datatype datatype,
+ MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request)
+{
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Iexscan_impl() function to invoke the mpich nbc implementation
+ * of MPI_Iexscan().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Iexscan() with a blocking MPIR_Exscan().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking exscan algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Exscan_impl(sendbuf, recvbuf, count, datatype, op, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking exscan has completed - create and complete a
+ * MPID_Request object so the MPIR_Iexscan_impl() function does not
+ * perform an additional iexscan.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/gather/Makefile.mk b/src/mpid/pamid/src/coll/gather/Makefile.mk
index a83086c..3a999c8 100644
--- a/src/mpid/pamid/src/coll/gather/Makefile.mk
+++ b/src/mpid/pamid/src/coll/gather/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/gather/mpido_gather.c
+ src/mpid/pamid/src/coll/gather/mpido_gather.c \
+ src/mpid/pamid/src/coll/gather/mpido_igather.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/gather/mpido_igather.c b/src/mpid/pamid/src/coll/gather/mpido_igather.c
new file mode 100644
index 0000000..dfaa8fa
--- /dev/null
+++ b/src/mpid/pamid/src/coll/gather/mpido_igather.c
@@ -0,0 +1,72 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/gather/mpido_igather.c
+ * \brief ???
+ */
+
+#include <mpidimpl.h>
+
+int MPIDO_Igather(const void *sendbuf,
+ int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ int recvcount,
+ MPI_Datatype recvtype,
+ int root,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Igather_impl() function to invoke the mpich nbc implementation
+ * of MPI_Igather().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Igather() with a blocking MPIR_Gather().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking gather algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Gather_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype,
+ root, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking gather has completed - create and complete a
+ * MPID_Request object so the MPIR_Igather_impl() function does not
+ * perform an additional igather.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/gatherv/Makefile.mk b/src/mpid/pamid/src/coll/gatherv/Makefile.mk
index e8ecd48..efb4ac0 100644
--- a/src/mpid/pamid/src/coll/gatherv/Makefile.mk
+++ b/src/mpid/pamid/src/coll/gatherv/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c
+ src/mpid/pamid/src/coll/gatherv/mpido_gatherv.c \
+ src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c b/src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
new file mode 100644
index 0000000..6b8bdce
--- /dev/null
+++ b/src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
@@ -0,0 +1,78 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/gatherv/mpido_igatherv.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+#include <mpidimpl.h>
+
+int MPIDO_Igatherv(const void *sendbuf,
+ int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ const int *recvcounts,
+ const int *displs,
+ MPI_Datatype recvtype,
+ int root,
+ MPID_Comm * comm_ptr,
+ MPID_Request **request)
+
+{
+ TRACE_ERR("Entering MPIDO_Igatherv\n");
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Igatherv_impl() function to invoke the mpich nbc implementation
+ * of MPI_Igatherv().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Igatherv() with a blocking MPIR_Gatherv().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking gatherv algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Gatherv_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcounts, displs, recvtype,
+ root, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking gather has completed - create and complete a
+ * MPID_Request object so the MPIR_Igatherv_impl() function does not
+ * perform an additional igatherv.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/ired_scat/Makefile.mk b/src/mpid/pamid/src/coll/ired_scat/Makefile.mk
new file mode 100644
index 0000000..da23390
--- /dev/null
+++ b/src/mpid/pamid/src/coll/ired_scat/Makefile.mk
@@ -0,0 +1,28 @@
+# begin_generated_IBM_copyright_prolog
+#
+# This is an automatically generated copyright prolog.
+# After initializing, DO NOT MODIFY OR MOVE
+# ---------------------------------------------------------------
+# Licensed Materials - Property of IBM
+# Blue Gene/Q 5765-PER 5765-PRP
+#
+# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
+# US Government Users Restricted Rights -
+# Use, duplication, or disclosure restricted
+# by GSA ADP Schedule Contract with IBM Corp.
+#
+# ---------------------------------------------------------------
+#
+# end_generated_IBM_copyright_prolog
+# -*- mode: makefile-gmake; -*-
+
+# note that the includes always happen but the effects of their contents are
+# affected by "if BUILD_PAMID"
+if BUILD_PAMID
+
+
+lib_lib@MPILIBNAME@_la_SOURCES += \
+ src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
+
+
+endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c b/src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
new file mode 100644
index 0000000..d67f2d4
--- /dev/null
+++ b/src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
@@ -0,0 +1,72 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/ired_scat/mpido_ired_scat.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+#include <mpidimpl.h>
+
+int MPIDO_Ireduce_scatter(const void *sendbuf,
+ void *recvbuf,
+ const int *recvcounts,
+ MPI_Datatype datatype,
+ MPI_Op op,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ TRACE_ERR("Entering MPIDO_Ireduce_scatter\n");
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Ireduce_scatter_impl() function to invoke the mpich nbc
+ * implementation of MPI_Ireduce_scatter().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ireduce_scatter() with a blocking MPIR_Reduce_scatter_block().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking reduce_scatter algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Reduce_scatter_impl(sendbuf, recvbuf, recvcounts, datatype,
+ op, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking gather has completed - create and complete a
+ * MPID_Request object so the MPIR_Ireduce_scatter_impl() function
+ * does not perform an additional ireduce_scatter.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk b/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk
new file mode 100644
index 0000000..abacf7a
--- /dev/null
+++ b/src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk
@@ -0,0 +1,28 @@
+# begin_generated_IBM_copyright_prolog
+#
+# This is an automatically generated copyright prolog.
+# After initializing, DO NOT MODIFY OR MOVE
+# ---------------------------------------------------------------
+# Licensed Materials - Property of IBM
+# Blue Gene/Q 5765-PER 5765-PRP
+#
+# (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved
+# US Government Users Restricted Rights -
+# Use, duplication, or disclosure restricted
+# by GSA ADP Schedule Contract with IBM Corp.
+#
+# ---------------------------------------------------------------
+#
+# end_generated_IBM_copyright_prolog
+# -*- mode: makefile-gmake; -*-
+
+# note that the includes always happen but the effects of their contents are
+# affected by "if BUILD_PAMID"
+if BUILD_PAMID
+
+
+lib_lib@MPILIBNAME@_la_SOURCES += \
+ src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
+
+
+endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c b/src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
new file mode 100644
index 0000000..a0a4fdc
--- /dev/null
+++ b/src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
@@ -0,0 +1,72 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/ired_scat_block/mpido_ired_scat_block.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+#include <mpidimpl.h>
+
+int MPIDO_Ireduce_scatter_block(const void *sendbuf,
+ void *recvbuf,
+ int recvcount,
+ MPI_Datatype datatype,
+ MPI_Op op,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ TRACE_ERR("Entering MPIDO_Ireduce_scatter_block\n");
+
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Ireduce_scatter_block_impl() function to invoke the mpich nbc
+ * implementation of MPI_Ireduce_scatter_block().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ireduce_scatter_block() with a blocking MPIR_Reduce_scatter_block().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking reduce_scatter_block algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Reduce_scatter_block_impl(sendbuf, recvbuf, recvcount, datatype,
+ op, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking gather has completed - create and complete a
+ * MPID_Request object so the MPIR_Ireduce_scatter_block_impl() function
+ * does not perform an additional ireduce_scatter_block.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/reduce/Makefile.mk b/src/mpid/pamid/src/coll/reduce/Makefile.mk
index d6c7a21..b7421dc 100644
--- a/src/mpid/pamid/src/coll/reduce/Makefile.mk
+++ b/src/mpid/pamid/src/coll/reduce/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/reduce/mpido_reduce.c
+ src/mpid/pamid/src/coll/reduce/mpido_reduce.c \
+ src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/reduce/mpido_ireduce.c b/src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
new file mode 100644
index 0000000..63e178d
--- /dev/null
+++ b/src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
@@ -0,0 +1,72 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/gather/mpido_ireduce.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON*/
+#include <mpidimpl.h>
+
+int MPIDO_Ireduce(const void *sendbuf,
+ void *recvbuf,
+ int count,
+ MPI_Datatype datatype,
+ MPI_Op op,
+ int root,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+
+{
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Ireduce_impl() function to invoke the mpich nbc
+ * implementation of MPI_Ireduce().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Ireduce() with a blocking MPIR_Reduce().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking reduce_algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Reduce_impl(sendbuf, recvbuf, count, datatype,
+ op, root, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking reduce has completed - create and complete a
+ * MPID_Request object so the MPIR_Ireduce_impl() function
+ * does not perform an additional ireduce.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/scan/mpido_scan.c b/src/mpid/pamid/src/coll/scan/mpido_scan.c
index 26d9fc5..6f58dd9 100644
--- a/src/mpid/pamid/src/coll/scan/mpido_scan.c
+++ b/src/mpid/pamid/src/coll/scan/mpido_scan.c
@@ -42,6 +42,47 @@ int MPIDO_Scan(const void *sendbuf, void *recvbuf,
op, comm_ptr, mpierrno, 0);
}
+int MPIDO_Iscan(const void *sendbuf, void *recvbuf,
+ int count, MPI_Datatype datatype,
+ MPI_Op op, MPID_Comm * comm_ptr, MPID_Request **request)
+{
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Iscan_impl() function to invoke the mpich nbc
+ * implementation of MPI_Iscan().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Iscan() with a blocking MPIR_Scan().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking scan_algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Scan_impl(sendbuf, recvbuf, count, datatype,
+ op, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking scan has completed - create and complete a
+ * MPID_Request object so the MPIR_Iscan_impl() function
+ * does not perform an additional iscan.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
int MPIDO_Exscan(const void *sendbuf, void *recvbuf,
int count, MPI_Datatype datatype,
diff --git a/src/mpid/pamid/src/coll/scatter/Makefile.mk b/src/mpid/pamid/src/coll/scatter/Makefile.mk
index 2061411..b64f873 100644
--- a/src/mpid/pamid/src/coll/scatter/Makefile.mk
+++ b/src/mpid/pamid/src/coll/scatter/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/scatter/mpido_scatter.c
+ src/mpid/pamid/src/coll/scatter/mpido_scatter.c \
+ src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/scatter/mpido_iscatter.c b/src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
new file mode 100644
index 0000000..f13a192
--- /dev/null
+++ b/src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
@@ -0,0 +1,74 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/scatter/mpido_iscatter.c
+ * \brief ???
+ */
+
+/*#define TRACE_ON */
+
+#include <mpidimpl.h>
+
+int MPIDO_Iscatter(const void *sendbuf,
+ int sendcount,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ int recvcount,
+ MPI_Datatype recvtype,
+ int root,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Iscatter_impl() function to invoke the mpich nbc
+ * implementation of MPI_Iscatter().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Iscatter() with a blocking MPIR_Scatter().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking scatter_algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Scatter_impl(sendbuf, sendcount, sendtype,
+ recvbuf, recvcount, recvtype,
+ root, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking scatter has completed - create and complete a
+ * MPID_Request object so the MPIR_Iscatter_impl() function
+ * does not perform an additional iscatter.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/coll/scatterv/Makefile.mk b/src/mpid/pamid/src/coll/scatterv/Makefile.mk
index fa6aa44..d0f9e51 100644
--- a/src/mpid/pamid/src/coll/scatterv/Makefile.mk
+++ b/src/mpid/pamid/src/coll/scatterv/Makefile.mk
@@ -22,7 +22,8 @@ if BUILD_PAMID
lib_lib@MPILIBNAME@_la_SOURCES += \
- src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c
+ src/mpid/pamid/src/coll/scatterv/mpido_scatterv.c \
+ src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
endif BUILD_PAMID
diff --git a/src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c b/src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
new file mode 100644
index 0000000..847ac7e
--- /dev/null
+++ b/src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
@@ -0,0 +1,73 @@
+/* begin_generated_IBM_copyright_prolog */
+/* */
+/* This is an automatically generated copyright prolog. */
+/* After initializing, DO NOT MODIFY OR MOVE */
+/* --------------------------------------------------------------- */
+/* Licensed Materials - Property of IBM */
+/* Blue Gene/Q 5765-PER 5765-PRP */
+/* */
+/* (C) Copyright IBM Corp. 2011, 2012 All Rights Reserved */
+/* US Government Users Restricted Rights - */
+/* Use, duplication, or disclosure restricted */
+/* by GSA ADP Schedule Contract with IBM Corp. */
+/* */
+/* --------------------------------------------------------------- */
+/* */
+/* end_generated_IBM_copyright_prolog */
+/* (C)Copyright IBM Corp. 2007, 2011 */
+/**
+ * \file src/coll/scatterv/mpido_iscatterv.c
+ * \brief ???
+ */
+
+#include <mpidimpl.h>
+
+int MPIDO_Iscatterv(const void *sendbuf,
+ const int *sendcounts,
+ const int *displs,
+ MPI_Datatype sendtype,
+ void *recvbuf,
+ int recvcount,
+ MPI_Datatype recvtype,
+ int root,
+ MPID_Comm *comm_ptr,
+ MPID_Request **request)
+{
+ /*if (unlikely((data_size == 0) || (user_selected_type == MPID_COLL_USE_MPICH)))*/
+ {
+ /*
+ * If the mpich mpir non-blocking collectives are enabled, return without
+ * first constructing the MPID_Request. This signals to the
+ * MPIR_Iscatterv_impl() function to invoke the mpich nbc
+ * implementation of MPI_Iscatterv().
+ */
+ if (MPIDI_Process.mpir_nbc != 0)
+ return 0;
+
+ /*
+ * MPIR_* nbc implementation is not enabled. Fake a non-blocking
+ * MPIR_Iscatterv() with a blocking MPIR_Scatterv().
+ */
+ if(unlikely(MPIDI_Process.verbose >= MPIDI_VERBOSE_DETAILS_ALL && comm_ptr->rank == 0))
+ fprintf(stderr,"Using MPICH blocking scatterv_algorithm\n");
+
+ int mpierrno = 0;
+ int rc = MPIR_Scatterv_impl(sendbuf, sendcounts, displs, sendtype,
+ recvbuf, recvcount, recvtype,
+ root, comm_ptr, &mpierrno);
+
+ /*
+ * The blocking scatterv has completed - create and complete a
+ * MPID_Request object so the MPIR_Iscatterv_impl() function
+ * does not perform an additional iscatterv.
+ */
+ MPID_Request * mpid_request = MPID_Request_create_inline();
+ mpid_request->kind = MPID_COLL_REQUEST;
+ *request = mpid_request;
+ MPIDI_Request_complete_norelease_inline(mpid_request);
+
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/src/mpid/pamid/src/comm/mpid_selectcolls.c b/src/mpid/pamid/src/comm/mpid_selectcolls.c
index 571eb68..2e658e9 100644
--- a/src/mpid/pamid/src/comm/mpid_selectcolls.c
+++ b/src/mpid/pamid/src/comm/mpid_selectcolls.c
@@ -690,6 +690,49 @@ void MPIDI_Comm_coll_query(MPID_Comm *comm)
comm->coll_fns->Scan = MPIDO_Scan;
comm->coll_fns->Exscan = MPIDO_Exscan;
+ /* MPI-3 Support, no optimized collectives hooked in yet */
+ comm->coll_fns->Ibarrier = MPIR_Ibarrier_intra;
+ comm->coll_fns->Ibcast = MPIR_Ibcast_intra;
+ comm->coll_fns->Igather = MPIR_Igather_intra;
+ comm->coll_fns->Igatherv = MPIR_Igatherv;
+ comm->coll_fns->Iscatter = MPIR_Iscatter_intra;
+ comm->coll_fns->Iscatterv = MPIR_Iscatterv;
+ comm->coll_fns->Iallgather = MPIR_Iallgather_intra;
+ comm->coll_fns->Iallgatherv = MPIR_Iallgatherv_intra;
+ comm->coll_fns->Ialltoall = MPIR_Ialltoall_intra;
+ comm->coll_fns->Ialltoallv = MPIR_Ialltoallv_intra;
+ comm->coll_fns->Ialltoallw = MPIR_Ialltoallw_intra;
+ comm->coll_fns->Iallreduce = MPIR_Iallreduce_intra;
+ comm->coll_fns->Ireduce = MPIR_Ireduce_intra;
+ comm->coll_fns->Ireduce_scatter = MPIR_Ireduce_scatter_intra;
+ comm->coll_fns->Ireduce_scatter_block = MPIR_Ireduce_scatter_block_intra;
+ comm->coll_fns->Iscan = MPIR_Iscan_rec_dbl;
+ comm->coll_fns->Iexscan = MPIR_Iexscan;
+ comm->coll_fns->Neighbor_allgather = MPIR_Neighbor_allgather_default;
+ comm->coll_fns->Neighbor_allgatherv = MPIR_Neighbor_allgatherv_default;
+ comm->coll_fns->Neighbor_alltoall = MPIR_Neighbor_alltoall_default;
+ comm->coll_fns->Neighbor_alltoallv = MPIR_Neighbor_alltoallv_default;
+ comm->coll_fns->Neighbor_alltoallw = MPIR_Neighbor_alltoallw_default;
+
+ /* MPI-3 Support, optimized collectives hooked in */
+ comm->coll_fns->Ibarrier_optimized = MPIDO_Ibarrier;
+ comm->coll_fns->Ibcast_optimized = MPIDO_Ibcast;
+ comm->coll_fns->Iallgather_optimized = MPIDO_Iallgather;
+ comm->coll_fns->Iallgatherv_optimized = MPIDO_Iallgatherv;
+ comm->coll_fns->Iallreduce_optimized = MPIDO_Iallreduce;
+ comm->coll_fns->Ialltoall_optimized = MPIDO_Ialltoall;
+ comm->coll_fns->Ialltoallv_optimized = MPIDO_Ialltoallv;
+ comm->coll_fns->Ialltoallw_optimized = MPIDO_Ialltoallw;
+ comm->coll_fns->Iexscan_optimized = MPIDO_Iexscan;
+ comm->coll_fns->Igather_optimized = MPIDO_Igather;
+ comm->coll_fns->Igatherv_optimized = MPIDO_Igatherv;
+ comm->coll_fns->Ireduce_scatter_block_optimized = MPIDO_Ireduce_scatter_block;
+ comm->coll_fns->Ireduce_scatter_optimized = MPIDO_Ireduce_scatter;
+ comm->coll_fns->Ireduce_optimized = MPIDO_Ireduce;
+ comm->coll_fns->Iscan_optimized = MPIDO_Iscan;
+ comm->coll_fns->Iscatter_optimized = MPIDO_Iscatter;
+ comm->coll_fns->Iscatterv_optimized = MPIDO_Iscatterv;
+
TRACE_ERR("MPIDI_Comm_coll_query exit\n");
}
-----------------------------------------------------------------------
Summary of changes:
src/include/mpiimpl.h | 79 +++++++++++---
src/mpi/coll/iallgather.c | 32 ++++--
src/mpi/coll/iallgatherv.c | 32 ++++--
src/mpi/coll/iallreduce.c | 36 ++++--
src/mpi/coll/ialltoall.c | 18 +++-
src/mpi/coll/ialltoallv.c | 18 +++-
src/mpi/coll/ialltoallw.c | 18 +++-
src/mpi/coll/ibarrier.c | 33 ++++--
src/mpi/coll/ibcast.c | 35 ++++--
src/mpi/coll/iexscan.c | 18 +++-
src/mpi/coll/igather.c | 24 +++-
src/mpi/coll/igatherv.c | 20 +++-
src/mpi/coll/ired_scat.c | 34 ++++--
src/mpi/coll/ired_scat_block.c | 34 ++++--
src/mpi/coll/ireduce.c | 34 ++++--
src/mpi/coll/iscan.c | 31 ++++--
src/mpi/coll/iscatter.c | 25 +++-
src/mpi/coll/iscatterv.c | 21 +++-
src/mpi/comm/commutil.c | 76 +++++++-------
src/mpid/pamid/include/mpidi_prototypes.h | 48 ++++++++
src/mpid/pamid/src/coll/Makefile.mk | 5 +-
src/mpid/pamid/src/coll/allgather/Makefile.mk | 3 +-
.../pamid/src/coll/allgather/mpido_iallgather.c | 73 ++++++++++++
src/mpid/pamid/src/coll/allgatherv/Makefile.mk | 3 +-
.../pamid/src/coll/allgatherv/mpido_iallgatherv.c | 77 +++++++++++++
src/mpid/pamid/src/coll/allreduce/Makefile.mk | 3 +-
.../pamid/src/coll/allreduce/mpido_iallreduce.c | 73 ++++++++++++
src/mpid/pamid/src/coll/alltoall/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c | 76 +++++++++++++
src/mpid/pamid/src/coll/alltoallv/Makefile.mk | 3 +-
.../pamid/src/coll/alltoallv/mpido_ialltoallv.c | 79 +++++++++++++
src/mpid/pamid/src/coll/alltoallw/Makefile.mk | 28 +++++
.../pamid/src/coll/alltoallw/mpido_ialltoallw.c | 79 +++++++++++++
src/mpid/pamid/src/coll/barrier/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c | 116 ++++++++++++++++++++
src/mpid/pamid/src/coll/bcast/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/bcast/mpido_ibcast.c | 86 +++++++++++++++
src/mpid/pamid/src/coll/exscan/Makefile.mk | 28 +++++
src/mpid/pamid/src/coll/exscan/mpido_iexscan.c | 65 +++++++++++
src/mpid/pamid/src/coll/gather/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/gather/mpido_igather.c | 72 ++++++++++++
src/mpid/pamid/src/coll/gatherv/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c | 78 +++++++++++++
src/mpid/pamid/src/coll/ired_scat/Makefile.mk | 28 +++++
.../pamid/src/coll/ired_scat/mpido_ired_scat.c | 72 ++++++++++++
.../pamid/src/coll/ired_scat_block/Makefile.mk | 28 +++++
.../coll/ired_scat_block/mpido_ired_scat_block.c | 72 ++++++++++++
src/mpid/pamid/src/coll/reduce/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/reduce/mpido_ireduce.c | 72 ++++++++++++
src/mpid/pamid/src/coll/scan/mpido_scan.c | 41 +++++++
src/mpid/pamid/src/coll/scatter/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/scatter/mpido_iscatter.c | 74 +++++++++++++
src/mpid/pamid/src/coll/scatterv/Makefile.mk | 3 +-
src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c | 73 ++++++++++++
src/mpid/pamid/src/comm/mpid_selectcolls.c | 43 +++++++
55 files changed, 1948 insertions(+), 192 deletions(-)
create mode 100644 src/mpid/pamid/src/coll/allgather/mpido_iallgather.c
create mode 100644 src/mpid/pamid/src/coll/allgatherv/mpido_iallgatherv.c
create mode 100644 src/mpid/pamid/src/coll/allreduce/mpido_iallreduce.c
create mode 100644 src/mpid/pamid/src/coll/alltoall/mpido_ialltoall.c
create mode 100644 src/mpid/pamid/src/coll/alltoallv/mpido_ialltoallv.c
create mode 100644 src/mpid/pamid/src/coll/alltoallw/Makefile.mk
create mode 100644 src/mpid/pamid/src/coll/alltoallw/mpido_ialltoallw.c
create mode 100644 src/mpid/pamid/src/coll/barrier/mpido_ibarrier.c
create mode 100644 src/mpid/pamid/src/coll/bcast/mpido_ibcast.c
create mode 100644 src/mpid/pamid/src/coll/exscan/Makefile.mk
create mode 100644 src/mpid/pamid/src/coll/exscan/mpido_iexscan.c
create mode 100644 src/mpid/pamid/src/coll/gather/mpido_igather.c
create mode 100644 src/mpid/pamid/src/coll/gatherv/mpido_igatherv.c
create mode 100644 src/mpid/pamid/src/coll/ired_scat/Makefile.mk
create mode 100644 src/mpid/pamid/src/coll/ired_scat/mpido_ired_scat.c
create mode 100644 src/mpid/pamid/src/coll/ired_scat_block/Makefile.mk
create mode 100644 src/mpid/pamid/src/coll/ired_scat_block/mpido_ired_scat_block.c
create mode 100644 src/mpid/pamid/src/coll/reduce/mpido_ireduce.c
create mode 100644 src/mpid/pamid/src/coll/scatter/mpido_iscatter.c
create mode 100644 src/mpid/pamid/src/coll/scatterv/mpido_iscatterv.c
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-190-g635969e
by noreply@mpich.org 14 May '13
by noreply@mpich.org 14 May '13
14 May '13
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 635969e76f66b3039f8150bc582f41e324864662 (commit)
via c537d620c2699d5dc347d9f5b82c9e2ef8ce1c43 (commit)
from 74639d55be135e34a787f3627e9a084909dfd081 (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/635969e76f66b3039f8150bc582f41e32…
commit 635969e76f66b3039f8150bc582f41e324864662
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Tue May 14 14:16:40 2013 -0500
Warning squash.
No reviewer.
diff --git a/src/mpi/coll/ired_scat.c b/src/mpi/coll/ired_scat.c
index 1ef7097..a4829ee 100644
--- a/src/mpi/coll/ired_scat.c
+++ b/src/mpi/coll/ired_scat.c
@@ -751,7 +751,6 @@ static int MPIR_Ireduce_scatter_noncomm(const void *sendbuf, void *recvbuf,
(outgoing_data + recv_offset*true_extent),
size, datatype, op, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- buf0_was_inout = buf0_was_inout;
}
else {
/* lower ranked value so need to call op(my_data, received_data) */
diff --git a/src/mpi/coll/ired_scat_block.c b/src/mpi/coll/ired_scat_block.c
index 4dc1243..1018417 100644
--- a/src/mpi/coll/ired_scat_block.c
+++ b/src/mpi/coll/ired_scat_block.c
@@ -727,7 +727,6 @@ int MPIR_Ireduce_scatter_block_noncomm(const void *sendbuf, void *recvbuf, int r
(outgoing_data + recv_offset*true_extent),
size, datatype, op, s);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- buf0_was_inout = buf0_was_inout;
}
else {
/* lower ranked value so need to call op(my_data, received_data) */
diff --git a/src/mpi/coll/red_scat.c b/src/mpi/coll/red_scat.c
index 7c783c5..07d8654 100644
--- a/src/mpi/coll/red_scat.c
+++ b/src/mpi/coll/red_scat.c
@@ -129,7 +129,6 @@ static int MPIR_Reduce_scatter_noncomm(const void *sendbuf, void *recvbuf, const
outgoing_data + recv_offset*true_extent,
size, datatype, op );
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- buf0_was_inout = buf0_was_inout;
}
else {
/* lower ranked value so need to call op(my_data, received_data) */
diff --git a/src/mpi/coll/red_scat_block.c b/src/mpi/coll/red_scat_block.c
index df59dea..d5a298d 100644
--- a/src/mpi/coll/red_scat_block.c
+++ b/src/mpi/coll/red_scat_block.c
@@ -139,7 +139,6 @@ static int MPIR_Reduce_scatter_block_noncomm (
outgoing_data + recv_offset*true_extent,
size, datatype, op);
if (mpi_errno) MPIU_ERR_POP(mpi_errno);
- buf0_was_inout = buf0_was_inout;
}
else {
/* lower ranked value so need to call op(my_data, received_data) */
diff --git a/src/mpid/ch3/src/ch3u_rma_sync.c b/src/mpid/ch3/src/ch3u_rma_sync.c
index 1e7e4a6..6ee752f 100644
--- a/src/mpid/ch3/src/ch3u_rma_sync.c
+++ b/src/mpid/ch3/src/ch3u_rma_sync.c
@@ -98,7 +98,7 @@ static MPIU_INSTR_Duration_count *list_block; /* Inner; while waiting */
static int MPIDI_CH3I_Send_lock_msg(int dest, int lock_type, MPID_Win *win_ptr);
static int MPIDI_CH3I_Send_unlock_msg(int dest, MPID_Win *win_ptr);
-static int MPIDI_CH3I_Send_flush_msg(int dest, MPID_Win *win_ptr);
+/* static int MPIDI_CH3I_Send_flush_msg(int dest, MPID_Win *win_ptr); */
static int MPIDI_CH3I_Wait_for_lock_granted(MPID_Win *win_ptr, int target_rank);
static int MPIDI_CH3I_Acquire_local_lock(MPID_Win *win_ptr, int lock_mode);
static int MPIDI_CH3I_Send_rma_msg(MPIDI_RMA_Op_t * rma_op, MPID_Win * win_ptr,
@@ -2877,6 +2877,9 @@ static int MPIDI_CH3I_Send_unlock_msg(int dest, MPID_Win *win_ptr) {
}
+/* Commented out function to squash a warning, but retaining the code
+ * for later use. */
+#if 0
#undef FUNCNAME
#define FUNCNAME MPIDI_CH3I_Send_flush_msg
#undef FCNAME
@@ -2916,6 +2919,7 @@ static int MPIDI_CH3I_Send_flush_msg(int dest, MPID_Win *win_ptr) {
goto fn_exit;
/* --END ERROR HANDLING-- */
}
+#endif
#undef FUNCNAME
diff --git a/src/mpid/common/datatype/dataloop/segment_packunpack.c b/src/mpid/common/datatype/dataloop/segment_packunpack.c
index 661bd93..32c4689 100644
--- a/src/mpid/common/datatype/dataloop/segment_packunpack.c
+++ b/src/mpid/common/datatype/dataloop/segment_packunpack.c
@@ -155,8 +155,8 @@ int PREPEND_PREFIX(Segment_vector_m2m)(DLOOP_Offset *blocks_p,
void *bufp ATTRIBUTE((unused)),
void *v_paramp)
{
- DLOOP_Count i, blocks_left, whole_count;
- DLOOP_Offset el_size;
+ DLOOP_Count i;
+ DLOOP_Offset el_size, whole_count, blocks_left;
struct PREPEND_PREFIX(m2m_params) *paramp = v_paramp;
char *cbufp;
@@ -295,7 +295,11 @@ int PREPEND_PREFIX(Segment_blkidx_m2m)(DLOOP_Offset *blocks_p,
rel_off + offsetarray[curblock]);
cbufp = (char*) paramp->userbuf + rel_off + offsetarray[curblock];
- if (blocklen > blocks_left) blocklen = blocks_left;
+ /* Type-cast blocklen to a large type for comparison, but once
+ * we confirm that it is smaller than the blocks_left, we can
+ * safely type-cast blocks_left to a smaller type */
+ if ((DLOOP_Offset) blocklen > blocks_left)
+ blocklen = (DLOOP_Count) blocks_left;
if (paramp->direction == DLOOP_M2M_TO_USERBUF) {
src = paramp->streambuf;
diff --git a/src/mpid/common/datatype/dataloop/veccpy.h b/src/mpid/common/datatype/dataloop/veccpy.h
index ea138a8..687320c 100644
--- a/src/mpid/common/datatype/dataloop/veccpy.h
+++ b/src/mpid/common/datatype/dataloop/veccpy.h
@@ -54,7 +54,8 @@
{ \
type * l_src = (type *) src, * l_dest = (type *) dest; \
type * tmp_src = l_src; \
- register int _i, j, k; \
+ register int k; \
+ register unsigned long _i, j; \
unsigned long total_count = count * nelms; \
const DLOOP_Offset l_stride = stride; \
\
@@ -166,8 +167,8 @@
{ \
type * l_src = (type *) src, * l_dest = (type *) dest; \
type * tmp_src = l_src; \
- register int _i, j, k; \
- unsigned long total_count = count * nelms; \
+ register int k; \
+ register unsigned long _i, j, total_count = count * nelms; \
const DLOOP_Offset l_stride = stride; \
\
if (nelms == 1) { \
@@ -278,7 +279,8 @@
{ \
type * l_src = (type *) src, * l_dest = (type *) dest; \
type * tmp_dest = l_dest; \
- register int _i, j, k; \
+ register int k; \
+ register unsigned long _i, j; \
unsigned long total_count = count * nelms; \
const DLOOP_Offset l_stride = stride; \
\
@@ -390,7 +392,8 @@
{ \
type * l_src = (type *) src, * l_dest = (type *) dest; \
type * tmp_dest = l_dest; \
- register int _i, j, k; \
+ register int k; \
+ register unsigned long _i, j; \
unsigned long total_count = count * nelms; \
const DLOOP_Offset l_stride = stride; \
\
diff --git a/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c b/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
index 3fb1992..6c190b8 100644
--- a/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
+++ b/src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c
@@ -139,7 +139,7 @@ static HYD_status cache_put_flush(int fd)
static HYD_status fn_init(int fd, char *args[])
{
int pmi_version, pmi_subversion, i;
- const char *tmp;
+ const char *tmp = NULL;
static int global_init = 1;
HYD_status status = HYD_SUCCESS;
http://git.mpich.org/mpich.git/commitdiff/c537d620c2699d5dc347d9f5b82c9e2ef…
commit c537d620c2699d5dc347d9f5b82c9e2ef8ce1c43
Author: Pavan Balaji <balaji(a)mcs.anl.gov>
Date: Tue May 14 13:02:25 2013 -0500
Disable -Wcast-align and -Wshorten-64-to-32.
This is an important warning flag, but given the number of places we
are breaking this in mpich, it is causing us to miss other warnings.
This is meant to be a temporary disabling.
No reviewer.
diff --git a/confdb/aclocal_cc.m4 b/confdb/aclocal_cc.m4
index f8ace03..7a92a8a 100644
--- a/confdb/aclocal_cc.m4
+++ b/confdb/aclocal_cc.m4
@@ -492,13 +492,20 @@ if test "$enable_strict_done" != "yes" ; then
# should never be tolerated. This also ensures that we get quick
# compilation failures rather than later link failures that usually
# come from a function name typo.
+ # -Wcast-align -- Casting alignment warnings. This is an
+ # important check, but is temporarily disabled, since it is
+ # throwing too many (correct) warnings currently, causing us
+ # to miss other warnings.
+ # -Wshorten-64-to-32 -- Bad type-casting warnings. This is an
+ # important check, but is temporarily disabled, since it is
+ # throwing too many (correct) warnings currently, causing us
+ # to miss other warnings.
# the embedded newlines in this string are safe because we evaluate each
# argument in the for-loop below and append them to the CFLAGS with a space
# as the separator instead
pac_common_strict_flags="
-Wall
-Wextra
- -Wshorten-64-to-32
-Wno-missing-field-initializers
-Wstrict-prototypes
-Wmissing-prototypes
@@ -512,7 +519,6 @@ if test "$enable_strict_done" != "yes" ; then
-Wno-endif-labels
-Wpointer-arith
-Wbad-function-cast
- -Wcast-align
-Wwrite-strings
-Wno-sign-compare
-Wold-style-definition
-----------------------------------------------------------------------
Summary of changes:
confdb/aclocal_cc.m4 | 10 ++++++++--
src/mpi/coll/ired_scat.c | 1 -
src/mpi/coll/ired_scat_block.c | 1 -
src/mpi/coll/red_scat.c | 1 -
src/mpi/coll/red_scat_block.c | 1 -
src/mpid/ch3/src/ch3u_rma_sync.c | 6 +++++-
.../common/datatype/dataloop/segment_packunpack.c | 10 +++++++---
src/mpid/common/datatype/dataloop/veccpy.h | 13 ++++++++-----
src/pm/hydra/pm/pmiserv/pmip_pmi_v1.c | 2 +-
9 files changed, 29 insertions(+), 16 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-188-g74639d5
by noreply@mpich.org 14 May '13
by noreply@mpich.org 14 May '13
14 May '13
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 74639d55be135e34a787f3627e9a084909dfd081 (commit)
from 470667cbd81fea954ebcad19f1a820acea61789b (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/74639d55be135e34a787f3627e9a08490…
commit 74639d55be135e34a787f3627e9a084909dfd081
Author: Haizhu Liu <haizhu(a)us.ibm.com>
Date: Wed May 1 13:39:25 2013 -0400
adio/common wrong checking of lseek return
(ibm) D190161
(ibm) 55566af07e7d69df17005e50c783ff3ae26cc325
Signed-off-by: Michael Blocksome <blocksom(a)us.ibm.com>
diff --git a/src/mpi/romio/adio/common/ad_read.c b/src/mpi/romio/adio/common/ad_read.c
index 0c706f8..3cea7ed 100644
--- a/src/mpi/romio/adio/common/ad_read.c
+++ b/src/mpi/romio/adio/common/ad_read.c
@@ -19,7 +19,9 @@ void ADIOI_GEN_ReadContig(ADIO_File fd, void *buf, int count,
ADIO_Offset offset, ADIO_Status *status,
int *error_code)
{
- int err = -1, datatype_size;
+ off_t err_lseek = -1;
+ ssize_t err = -1;
+ int datatype_size;
ADIO_Offset len;
static char myname[] = "ADIOI_GEN_READCONTIG";
@@ -38,12 +40,12 @@ void ADIOI_GEN_ReadContig(ADIO_File fd, void *buf, int count,
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
#endif
- err = lseek(fd->fd_sys, offset, SEEK_SET);
+ err_lseek = lseek(fd->fd_sys, offset, SEEK_SET);
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
#endif
/* --BEGIN ERROR HANDLING-- */
- if (err == -1) {
+ if (err_lseek == -1) {
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE,
myname, __LINE__,
diff --git a/src/mpi/romio/adio/common/ad_write.c b/src/mpi/romio/adio/common/ad_write.c
index d9ccabf..eeba5da 100644
--- a/src/mpi/romio/adio/common/ad_write.c
+++ b/src/mpi/romio/adio/common/ad_write.c
@@ -19,7 +19,9 @@ void ADIOI_GEN_WriteContig(ADIO_File fd, const void *buf, int count,
ADIO_Offset offset, ADIO_Status *status,
int *error_code)
{
- int err = -1, datatype_size;
+ off_t err_lseek = -1;
+ ssize_t err = -1;
+ int datatype_size;
ADIO_Offset len;
static char myname[] = "ADIOI_GEN_WRITECONTIG";
@@ -39,12 +41,12 @@ void ADIOI_GEN_WriteContig(ADIO_File fd, const void *buf, int count,
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
#endif
- err = lseek(fd->fd_sys, offset, SEEK_SET);
+ err_lseek = lseek(fd->fd_sys, offset, SEEK_SET);
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
#endif
/* --BEGIN ERROR HANDLING-- */
- if (err == -1) {
+ if (err_lseek == -1) {
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
MPIR_ERR_RECOVERABLE,
myname, __LINE__,
diff --git a/src/mpi/romio/adio/common/ad_write_nolock.c b/src/mpi/romio/adio/common/ad_write_nolock.c
index 56a84d4..c84be8e 100644
--- a/src/mpi/romio/adio/common/ad_write_nolock.c
+++ b/src/mpi/romio/adio/common/ad_write_nolock.c
@@ -27,7 +27,9 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
/* offset is in units of etype relative to the filetype. */
ADIOI_Flatlist_node *flat_buf, *flat_file;
- int j, k, err=-1, st_index=0;
+ int j, k, st_index=0;
+ off_t err_lseek=-1;
+ ssize_t err=-1;
ADIO_Offset fwr_size=0, bwr_size, new_bwr_size, new_fwr_size, i_offset, num;
unsigned bufsize;
int n_etypes_in_filetype;
@@ -274,11 +276,11 @@ void ADIOI_NOLOCK_WriteStrided(ADIO_File fd, const void *buf, int count,
printf("[%d/%d] c mem nc file writing loc = %Ld sz = %d\n",
rank, nprocs, off, fwr_size);
#endif
- err = lseek(fd->fd_sys, off, SEEK_SET);
+ err_lseek = lseek(fd->fd_sys, off, SEEK_SET);
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event(ADIOI_MPE_lseek_b, 0, NULL);
#endif
- if (err == -1) err_flag = 1;
+ if (err_lseek == -1) err_flag = 1;
#ifdef ADIOI_MPE_LOGGING
MPE_Log_event(ADIOI_MPE_write_a, 0, NULL);
#endif
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/common/ad_read.c | 8 +++++---
src/mpi/romio/adio/common/ad_write.c | 8 +++++---
src/mpi/romio/adio/common/ad_write_nolock.c | 8 +++++---
3 files changed, 15 insertions(+), 9 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0
[mpich] MPICH primary repository branch, master, updated. v3.0.4-187-g470667c
by noreply@mpich.org 14 May '13
by noreply@mpich.org 14 May '13
14 May '13
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 470667cbd81fea954ebcad19f1a820acea61789b (commit)
from 491957795644bf6d8edc76f8ee4cd75bf02b7d5c (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/470667cbd81fea954ebcad19f1a820ace…
commit 470667cbd81fea954ebcad19f1a820acea61789b
Author: Rob Latham <robl(a)mcs.anl.gov>
Date: Tue May 14 09:50:48 2013 -0500
avoid hang if subset of procs have invalid INFO
In response to IBM's integration ticket 1822 (but reworked), turn
MPIO_CHECK_INFO into a collective macro; exchange result of info
inspection with all procs. Now a bogus info on one proc won't cause a
process hang.
diff --git a/src/mpi/romio/adio/include/adioi_error.h b/src/mpi/romio/adio/include/adioi_error.h
index e087055..1dd00ee 100644
--- a/src/mpi/romio/adio/include/adioi_error.h
+++ b/src/mpi/romio/adio/include/adioi_error.h
@@ -163,10 +163,17 @@ if ((fh->file_system == ADIO_PIOFS) || \
/* Check MPI_Info object by calling MPI_Info_dup, if the info object is valid
then the dup operation will succeed */
-#define MPIO_CHECK_INFO(info, error_code) { \
+/* a collective check for error makes this macro collective */
+#define MPIO_CHECK_INFO_ALL(info, error_code, comm) { \
MPI_Info dupinfo; \
+ int tmp_err = MPI_SUCCESS; \
error_code = MPI_Info_dup(info, &dupinfo); \
- if(error_code != MPI_SUCCESS) goto fn_fail; \
+ MPI_Allreduce(&error_code, &tmp_err, 1, MPI_INT, MPI_MAX, comm); \
+ if(tmp_err != MPI_SUCCESS) { \
+ error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, \
+ myname, __LINE__, MPI_ERR_OTHER, "**info", 0); \
+ goto fn_fail; \
+ } \
if (dupinfo != MPI_INFO_NULL) { \
MPI_Info_free(&dupinfo); \
} \
diff --git a/src/mpi/romio/mpi-io/open.c b/src/mpi/romio/mpi-io/open.c
index 14c025c..80ea26e 100644
--- a/src/mpi/romio/mpi-io/open.c
+++ b/src/mpi/romio/mpi-io/open.c
@@ -61,8 +61,7 @@ int MPI_File_open(MPI_Comm comm, const char *filename, int amode,
/* --BEGIN ERROR HANDLING-- */
MPIO_CHECK_COMM(comm, myname, error_code);
- if(info != MPI_INFO_NULL)
- MPIO_CHECK_INFO(info, error_code);
+ MPIO_CHECK_INFO_ALL(info, error_code, comm);
/* --END ERROR HANDLING-- */
error_code = MPI_Comm_test_inter(comm, &flag);
diff --git a/src/mpi/romio/mpi-io/set_info.c b/src/mpi/romio/mpi-io/set_info.c
index 9fe8ab6..13437cc 100644
--- a/src/mpi/romio/mpi-io/set_info.c
+++ b/src/mpi/romio/mpi-io/set_info.c
@@ -44,7 +44,7 @@ int MPI_File_set_info(MPI_File fh, MPI_Info info)
/* --BEGIN ERROR HANDLING-- */
MPIO_CHECK_FILE_HANDLE(adio_fh, myname, error_code);
- MPIO_CHECK_INFO(info, error_code);
+ MPIO_CHECK_INFO_ALL(info, error_code, fh->comm);
/* --END ERROR HANDLING-- */
/* set new info */
diff --git a/src/mpi/romio/mpi-io/set_view.c b/src/mpi/romio/mpi-io/set_view.c
index ed5a493..77a7756 100644
--- a/src/mpi/romio/mpi-io/set_view.c
+++ b/src/mpi/romio/mpi-io/set_view.c
@@ -106,9 +106,7 @@ int MPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype,
error_code = MPIO_Err_return_file(adio_fh, error_code);
goto fn_exit;
}
- if(info != MPI_INFO_NULL){
- MPIO_CHECK_INFO(info, error_code);
- }
+ MPIO_CHECK_INFO_ALL(info, error_code, adio_fh->comm);
/* --END ERROR HANDLING-- */
MPI_Type_size(filetype, &filetype_size);
-----------------------------------------------------------------------
Summary of changes:
src/mpi/romio/adio/include/adioi_error.h | 11 +++++++++--
src/mpi/romio/mpi-io/open.c | 3 +--
src/mpi/romio/mpi-io/set_info.c | 2 +-
src/mpi/romio/mpi-io/set_view.c | 4 +---
4 files changed, 12 insertions(+), 8 deletions(-)
hooks/post-receive
--
MPICH primary repository
1
0