1
1

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
Этот коммит содержится в:
Brian Barrett 2006-09-28 15:11:11 +00:00
родитель 1b35e7adff
Коммит 451d362296
2 изменённых файлов: 66 добавлений и 18 удалений

Просмотреть файл

@ -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 */