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,9 +446,17 @@ 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)) {
|
||||
opal_output(0, "Invalid MPI_PUT on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
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,9 +481,17 @@ 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)) {
|
||||
opal_output(0, "Invalid MPI_ACCUMULATE on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
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 */
|
||||
@ -504,9 +520,17 @@ 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)) {
|
||||
opal_output(0, "Invalid MPI_GET on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
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 */
|
||||
|
@ -468,9 +468,17 @@ 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)) {
|
||||
opal_output(0, "Invalid MPI_PUT on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
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,9 +505,17 @@ 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)) {
|
||||
opal_output(0, "Invalid MPI_ACCUMULATE on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
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 */
|
||||
@ -530,9 +546,17 @@ 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)) {
|
||||
opal_output(0, "Invalid MPI_GET on Window %s. Window not in exposure epoch",
|
||||
module->p2p_win->w_name);
|
||||
break;
|
||||
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 */
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user