A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
doc is whining +indent
[simgrid.git]
/
src
/
smpi
/
smpi_mpi_dt.c
diff --git
a/src/smpi/smpi_mpi_dt.c
b/src/smpi/smpi_mpi_dt.c
index
8be8134
..
7cb76b7
100644
(file)
--- a/
src/smpi/smpi_mpi_dt.c
+++ b/
src/smpi/smpi_mpi_dt.c
@@
-123,14
+123,18
@@
CREATE_MPI_DATATYPE_NULL(MPI_PACKED);
// Internal use only
CREATE_MPI_DATATYPE(MPI_PTR, void*);
// Internal use only
CREATE_MPI_DATATYPE(MPI_PTR, void*);
+/** Check if the datatype is usable for communications
+ */
+int is_datatype_valid(MPI_Datatype datatype) {
+ return datatype != MPI_DATATYPE_NULL
+ && (datatype->flags & DT_FLAG_COMMITED);
+}
size_t smpi_datatype_size(MPI_Datatype datatype)
{
return datatype->size;
}
size_t smpi_datatype_size(MPI_Datatype datatype)
{
return datatype->size;
}
-
-
MPI_Aint smpi_datatype_lb(MPI_Datatype datatype)
{
return datatype->lb;
MPI_Aint smpi_datatype_lb(MPI_Datatype datatype)
{
return datatype->lb;
@@
-157,7
+161,9
@@
int smpi_datatype_copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
void *recvbuf, int recvcount, MPI_Datatype recvtype)
{
int count;
void *recvbuf, int recvcount, MPI_Datatype recvtype)
{
int count;
-
+ if(smpi_privatize_global_variables){
+ switch_data_segment(smpi_process_index());
+ }
/* First check if we really have something to do */
if (recvcount > 0 && recvbuf != sendbuf) {
/* FIXME: treat packed cases */
/* First check if we really have something to do */
if (recvcount > 0 && recvbuf != sendbuf) {
/* FIXME: treat packed cases */
@@
-324,7
+330,7
@@
void smpi_datatype_free(MPI_Datatype* type){
xbt_free((*type)->substruct);
}
xbt_free(*type);
xbt_free((*type)->substruct);
}
xbt_free(*type);
-
+ *type = MPI_DATATYPE_NULL;
}
void smpi_datatype_use(MPI_Datatype type){
}
void smpi_datatype_use(MPI_Datatype type){
@@
-1489,6
+1495,11
@@
void smpi_op_destroy(MPI_Op op)
void smpi_op_apply(MPI_Op op, void *invec, void *inoutvec, int *len,
MPI_Datatype * datatype)
{
void smpi_op_apply(MPI_Op op, void *invec, void *inoutvec, int *len,
MPI_Datatype * datatype)
{
+ if(smpi_privatize_global_variables){ //we need to switch here, as the called function may silently touch global variables
+ XBT_VERB("Applying operation, switch to the right data frame ");
+ switch_data_segment(smpi_process_index());
+ }
+
if(!_xbt_replay_is_active())
op->func(invec, inoutvec, len, datatype);
}
if(!_xbt_replay_is_active())
op->func(invec, inoutvec, len, datatype);
}