MPI_Fence's stupid "I might be in a fence epoch but you can't tell until
I do something else" rule screws me up again. If we're in a FENCE, but not in ACCESS | EXPOSE, put us in ACCESS|EXPOSE, as we are now known we now in a real Fence epoch. Yay silly MPI standards Refs trac:441 This commit was SVN r11865. The following Trac tickets were found above: Ticket 441 --> https://svn.open-mpi.org/trac/ompi/ticket/441
Этот коммит содержится в:
родитель
1b35e7adff
Коммит
451d362296
@ -446,10 +446,18 @@ ompi_osc_pt2pt_component_fragment_cb(ompi_osc_pt2pt_module_t *module,
|
||||
assert(module == ompi_osc_pt2pt_windx_to_module(header->hdr_windx));
|
||||
|
||||
if (!ompi_win_exposure_epoch(module->p2p_win)) {
|
||||
if (OMPI_WIN_FENCE & ompi_win_get_mode(module->p2p_win)) {
|
||||
/* well, we're definitely in an access epoch now */
|
||||
ompi_win_set_mode(module->p2p_win,
|
||||
OMPI_WIN_FENCE |
|
||||
OMPI_WIN_ACCESS_EPOCH |
|
||||
OMPI_WIN_EXPOSE_EPOCH);
|
||||
} else {
|
||||
opal_output(0, "Invalid MPI_PUT on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ret = ompi_osc_pt2pt_sendreq_recv_put(module, header, payload);
|
||||
}
|
||||
@ -473,10 +481,18 @@ ompi_osc_pt2pt_component_fragment_cb(ompi_osc_pt2pt_module_t *module,
|
||||
assert(module == ompi_osc_pt2pt_windx_to_module(header->hdr_windx));
|
||||
|
||||
if (!ompi_win_exposure_epoch(module->p2p_win)) {
|
||||
if (OMPI_WIN_FENCE & ompi_win_get_mode(module->p2p_win)) {
|
||||
/* well, we're definitely in an access epoch now */
|
||||
ompi_win_set_mode(module->p2p_win,
|
||||
OMPI_WIN_FENCE |
|
||||
OMPI_WIN_ACCESS_EPOCH |
|
||||
OMPI_WIN_EXPOSE_EPOCH);
|
||||
} else {
|
||||
opal_output(0, "Invalid MPI_ACCUMULATE on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* receive into temporary buffer */
|
||||
ret = ompi_osc_pt2pt_sendreq_recv_accum(module, header, payload);
|
||||
@ -504,10 +520,18 @@ ompi_osc_pt2pt_component_fragment_cb(ompi_osc_pt2pt_module_t *module,
|
||||
assert(module == ompi_osc_pt2pt_windx_to_module(header->hdr_windx));
|
||||
|
||||
if (!ompi_win_exposure_epoch(module->p2p_win)) {
|
||||
if (OMPI_WIN_FENCE & ompi_win_get_mode(module->p2p_win)) {
|
||||
/* well, we're definitely in an access epoch now */
|
||||
ompi_win_set_mode(module->p2p_win,
|
||||
OMPI_WIN_FENCE |
|
||||
OMPI_WIN_ACCESS_EPOCH |
|
||||
OMPI_WIN_EXPOSE_EPOCH);
|
||||
} else {
|
||||
opal_output(0, "Invalid MPI_GET on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* create or get a pointer to our datatype */
|
||||
proc = ompi_comm_peer_lookup( module->p2p_comm, header->hdr_origin );
|
||||
|
@ -468,10 +468,18 @@ ompi_osc_rdma_component_fragment_cb(struct mca_btl_base_module_t *btl,
|
||||
if (NULL == module) return;
|
||||
|
||||
if (!ompi_win_exposure_epoch(module->p2p_win)) {
|
||||
if (OMPI_WIN_FENCE & ompi_win_get_mode(module->p2p_win)) {
|
||||
/* well, we're definitely in an access epoch now */
|
||||
ompi_win_set_mode(module->p2p_win,
|
||||
OMPI_WIN_FENCE |
|
||||
OMPI_WIN_ACCESS_EPOCH |
|
||||
OMPI_WIN_EXPOSE_EPOCH);
|
||||
} else {
|
||||
opal_output(0, "Invalid MPI_PUT on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ret = ompi_osc_rdma_sendreq_recv_put(module, header, payload);
|
||||
}
|
||||
@ -497,10 +505,18 @@ ompi_osc_rdma_component_fragment_cb(struct mca_btl_base_module_t *btl,
|
||||
if (NULL == module) return;
|
||||
|
||||
if (!ompi_win_exposure_epoch(module->p2p_win)) {
|
||||
if (OMPI_WIN_FENCE & ompi_win_get_mode(module->p2p_win)) {
|
||||
/* well, we're definitely in an access epoch now */
|
||||
ompi_win_set_mode(module->p2p_win,
|
||||
OMPI_WIN_FENCE |
|
||||
OMPI_WIN_ACCESS_EPOCH |
|
||||
OMPI_WIN_EXPOSE_EPOCH);
|
||||
} else {
|
||||
opal_output(0, "Invalid MPI_ACCUMULATE on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* receive into temporary buffer */
|
||||
ret = ompi_osc_rdma_sendreq_recv_accum(module, header, payload);
|
||||
@ -530,10 +546,18 @@ ompi_osc_rdma_component_fragment_cb(struct mca_btl_base_module_t *btl,
|
||||
if (NULL == module) return;
|
||||
|
||||
if (!ompi_win_exposure_epoch(module->p2p_win)) {
|
||||
if (OMPI_WIN_FENCE & ompi_win_get_mode(module->p2p_win)) {
|
||||
/* well, we're definitely in an access epoch now */
|
||||
ompi_win_set_mode(module->p2p_win,
|
||||
OMPI_WIN_FENCE |
|
||||
OMPI_WIN_ACCESS_EPOCH |
|
||||
OMPI_WIN_EXPOSE_EPOCH);
|
||||
} else {
|
||||
opal_output(0, "Invalid MPI_GET on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* create or get a pointer to our datatype */
|
||||
proc = ompi_comm_peer_lookup( module->p2p_comm, header->hdr_origin );
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user