Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Rob Latham
MPICH-BlueGene
Commits
50873835
Commit
50873835
authored
Nov 11, 2014
by
Kenneth Raffenetti
Committed by
Pavan Balaji
Nov 12, 2014
Browse files
portals4: use a separate EQ per PT
Signed-off-by:
Antonio Pena Monferrer
<
apenya@mcs.anl.gov
>
parent
a839daf8
Changes
3
Show whitespace changes
Inline
Side-by-side
src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_impl.h
View file @
50873835
...
...
@@ -19,8 +19,12 @@ extern ptl_pt_index_t MPIDI_nem_ptl_pt;
extern
ptl_pt_index_t
MPIDI_nem_ptl_get_pt
;
/* portal for gets by receiver */
extern
ptl_pt_index_t
MPIDI_nem_ptl_control_pt
;
/* portal for MPICH control messages */
extern
ptl_pt_index_t
MPIDI_nem_ptl_rpt_pt
;
/* portal for MPICH control messages */
extern
ptl_handle_eq_t
MPIDI_nem_ptl_target_eq
;
extern
ptl_handle_eq_t
MPIDI_nem_ptl_origin_eq
;
extern
ptl_handle_eq_t
MPIDI_nem_ptl_eq
;
extern
ptl_handle_eq_t
MPIDI_nem_ptl_get_eq
;
extern
ptl_handle_eq_t
MPIDI_nem_ptl_control_eq
;
extern
ptl_handle_eq_t
MPIDI_nem_ptl_origin_eq
;
extern
ptl_handle_eq_t
MPIDI_nem_ptl_rpt_eq
;
extern
ptl_handle_md_t
MPIDI_nem_ptl_global_md
;
extern
ptl_ni_limits_t
MPIDI_nem_ptl_ni_limits
;
...
...
src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_init.c
View file @
50873835
...
...
@@ -28,7 +28,9 @@ ptl_pt_index_t MPIDI_nem_ptl_pt;
ptl_pt_index_t
MPIDI_nem_ptl_get_pt
;
/* portal for gets by receiver */
ptl_pt_index_t
MPIDI_nem_ptl_control_pt
;
/* portal for MPICH control messages */
ptl_pt_index_t
MPIDI_nem_ptl_rpt_pt
;
/* portal for rportals control messages */
ptl_handle_eq_t
MPIDI_nem_ptl_target_eq
;
ptl_handle_eq_t
MPIDI_nem_ptl_eq
;
ptl_handle_eq_t
MPIDI_nem_ptl_get_eq
;
ptl_handle_eq_t
MPIDI_nem_ptl_control_eq
;
ptl_handle_eq_t
MPIDI_nem_ptl_origin_eq
;
ptl_pt_index_t
MPIDI_nem_ptl_control_rpt_pt
;
/* portal for rportals control messages */
ptl_pt_index_t
MPIDI_nem_ptl_get_rpt_pt
;
/* portal for rportals control messages */
...
...
@@ -184,7 +186,14 @@ static int ptl_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max
PTL_PID_ANY
,
&
desired
,
&
MPIDI_nem_ptl_ni_limits
,
&
MPIDI_nem_ptl_ni
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlniinit"
,
"**ptlniinit %s"
,
MPID_nem_ptl_strerror
(
ret
));
ret
=
PtlEQAlloc
(
MPIDI_nem_ptl_ni
,
MPIDI_nem_ptl_ni_limits
.
max_eqs
,
&
MPIDI_nem_ptl_target_eq
);
/* allocate EQs for each portal */
ret
=
PtlEQAlloc
(
MPIDI_nem_ptl_ni
,
MPIDI_nem_ptl_ni_limits
.
max_eqs
,
&
MPIDI_nem_ptl_eq
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptleqalloc"
,
"**ptleqalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
ret
=
PtlEQAlloc
(
MPIDI_nem_ptl_ni
,
MPIDI_nem_ptl_ni_limits
.
max_eqs
,
&
MPIDI_nem_ptl_get_eq
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptleqalloc"
,
"**ptleqalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
ret
=
PtlEQAlloc
(
MPIDI_nem_ptl_ni
,
MPIDI_nem_ptl_ni_limits
.
max_eqs
,
&
MPIDI_nem_ptl_control_eq
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptleqalloc"
,
"**ptleqalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
/* allocate a separate EQ for origin events. with this, we can implement rate-limit operations
...
...
@@ -193,32 +202,32 @@ static int ptl_init(MPIDI_PG_t *pg_p, int pg_rank, char **bc_val_p, int *val_max
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptleqalloc"
,
"**ptleqalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
/* allocate portal for matching messages */
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
target_
eq
,
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_eq
,
PTL_PT_ANY
,
&
MPIDI_nem_ptl_pt
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlptalloc"
,
"**ptlptalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
/* allocate portal for large messages where receiver does a get */
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
tar
get_eq
,
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_get_eq
,
PTL_PT_ANY
,
&
MPIDI_nem_ptl_get_pt
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlptalloc"
,
"**ptlptalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
/* allocate portal for MPICH control messages */
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
target
_eq
,
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
control
_eq
,
PTL_PT_ANY
,
&
MPIDI_nem_ptl_control_pt
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlptalloc"
,
"**ptlptalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
/* allocate portal for MPICH control messages */
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
target_
eq
,
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_eq
,
PTL_PT_ANY
,
&
MPIDI_nem_ptl_rpt_pt
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlptalloc"
,
"**ptlptalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
/* allocate portal for MPICH control messages */
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
tar
get_eq
,
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_get_eq
,
PTL_PT_ANY
,
&
MPIDI_nem_ptl_get_rpt_pt
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlptalloc"
,
"**ptlptalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
/* allocate portal for MPICH control messages */
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
target
_eq
,
ret
=
PtlPTAlloc
(
MPIDI_nem_ptl_ni
,
PTL_PT_ONLY_USE_ONCE
|
PTL_PT_ONLY_TRUNCATE
|
PTL_PT_FLOWCTRL
,
MPIDI_nem_ptl_
control
_eq
,
PTL_PT_ANY
,
&
MPIDI_nem_ptl_control_rpt_pt
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlptalloc"
,
"**ptlptalloc %s"
,
MPID_nem_ptl_strerror
(
ret
));
...
...
@@ -276,7 +285,7 @@ static int ptl_finalize(void)
{
int
mpi_errno
=
MPI_SUCCESS
;
int
ret
;
ptl_handle_eq_t
eqs
[
2
];
ptl_handle_eq_t
eqs
[
4
];
MPIDI_STATE_DECL
(
MPID_STATE_PTL_FINALIZE
);
MPIDI_FUNC_ENTER
(
MPID_STATE_PTL_FINALIZE
);
...
...
@@ -288,9 +297,11 @@ static int ptl_finalize(void)
if
(
mpi_errno
)
MPIU_ERR_POP
(
mpi_errno
);
/* shut down portals */
eqs
[
0
]
=
MPIDI_nem_ptl_target_eq
;
eqs
[
1
]
=
MPIDI_nem_ptl_origin_eq
;
ret
=
MPID_nem_ptl_rptl_drain_eq
(
2
,
eqs
);
eqs
[
0
]
=
MPIDI_nem_ptl_eq
;
eqs
[
1
]
=
MPIDI_nem_ptl_get_eq
;
eqs
[
2
]
=
MPIDI_nem_ptl_control_eq
;
eqs
[
3
]
=
MPIDI_nem_ptl_origin_eq
;
ret
=
MPID_nem_ptl_rptl_drain_eq
(
4
,
eqs
);
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptlptfree"
,
"**ptlptfree %s"
,
MPID_nem_ptl_strerror
(
ret
));
ret
=
MPID_nem_ptl_rptl_ptfini
(
MPIDI_nem_ptl_pt
);
...
...
src/mpid/ch3/channels/nemesis/netmod/portals4/ptl_poll.c
View file @
50873835
...
...
@@ -131,17 +131,27 @@ int MPID_nem_ptl_poll(int is_blocking_poll)
/* MPIDI_FUNC_ENTER(MPID_STATE_MPID_NEM_PTL_POLL); */
while
(
1
)
{
/* check
both origin and target
EQs for events */
ret
=
MPID_nem_ptl_rptl_eqget
(
MPIDI_nem_ptl_
target_
eq
,
&
event
);
/* check EQs for events */
ret
=
MPID_nem_ptl_rptl_eqget
(
MPIDI_nem_ptl_eq
,
&
event
);
MPIU_ERR_CHKANDJUMP
(
ret
==
PTL_EQ_DROPPED
,
mpi_errno
,
MPI_ERR_OTHER
,
"**eqdropped"
);
if
(
ret
==
PTL_EQ_EMPTY
)
{
ret
=
MPID_nem_ptl_rptl_eqget
(
MPIDI_nem_ptl_get_eq
,
&
event
);
MPIU_ERR_CHKANDJUMP
(
ret
==
PTL_EQ_DROPPED
,
mpi_errno
,
MPI_ERR_OTHER
,
"**eqdropped"
);
if
(
ret
==
PTL_EQ_EMPTY
)
{
ret
=
MPID_nem_ptl_rptl_eqget
(
MPIDI_nem_ptl_control_eq
,
&
event
);
MPIU_ERR_CHKANDJUMP
(
ret
==
PTL_EQ_DROPPED
,
mpi_errno
,
MPI_ERR_OTHER
,
"**eqdropped"
);
if
(
ret
==
PTL_EQ_EMPTY
)
{
ret
=
MPID_nem_ptl_rptl_eqget
(
MPIDI_nem_ptl_origin_eq
,
&
event
);
MPIU_ERR_CHKANDJUMP
(
ret
==
PTL_EQ_DROPPED
,
mpi_errno
,
MPI_ERR_OTHER
,
"**eqdropped"
);
}
/* if both queues are empty, exit the loop
*/
/* all EQs are empty
*/
if
(
ret
==
PTL_EQ_EMPTY
)
break
;
}
}
MPIU_ERR_CHKANDJUMP1
(
ret
,
mpi_errno
,
MPI_ERR_OTHER
,
"**ptleqget"
,
"**ptleqget %s"
,
MPID_nem_ptl_strerror
(
ret
));
MPIU_DBG_MSG_FMT
(
CH3_CHANNEL
,
VERBOSE
,
(
MPIU_DBG_FDEST
,
"Received event %s pt_idx=%d ni_fail=%s list=%s user_ptr=%p hdr_data=%#lx mlength=%lu rlength=%lu"
,
MPID_nem_ptl_strevent
(
&
event
),
event
.
pt_index
,
MPID_nem_ptl_strnifail
(
event
.
ni_fail_type
),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment