Allreduce ok.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6513
48e7efb5-ca39-0410-a469-
dd3cf9ba447f
void smpi_process_finalize(void);
int smpi_mpi_comm_rank(smpi_mpi_communicator_t comm);
void smpi_process_finalize(void);
int smpi_mpi_comm_rank(smpi_mpi_communicator_t comm);
+int smpi_mpi_bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm);
int smpi_mpi_barrier(smpi_mpi_communicator_t comm);
int smpi_mpi_barrier(smpi_mpi_communicator_t comm);
int smpi_mpi_isend(smpi_mpi_request_t request);
int smpi_mpi_irecv(smpi_mpi_request_t request);
int smpi_mpi_isend(smpi_mpi_request_t request);
int smpi_mpi_irecv(smpi_mpi_request_t request);
+int smpi_mpi_reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm);
int smpi_mpi_wait(smpi_mpi_request_t request, smpi_mpi_status_t * status);
int smpi_mpi_wait(smpi_mpi_request_t request, smpi_mpi_status_t * status);
-int smpi_mpi_waitall(int count, smpi_mpi_request_t requests[],
- smpi_mpi_status_t status[]);
-int smpi_mpi_waitany(int count, smpi_mpi_request_t requests[], int *index,
- smpi_mpi_status_t status[]);
+int smpi_mpi_waitall(int count, smpi_mpi_request_t requests[], smpi_mpi_status_t status[]);
+int smpi_mpi_waitany(int count, smpi_mpi_request_t requests[], int *index, smpi_mpi_status_t status[]);
+
void smpi_execute(double duration);
void smpi_start_timer(void);
double smpi_stop_timer(void);
void smpi_execute(double duration);
void smpi_start_timer(void);
double smpi_stop_timer(void);
retval = MPI_ERR_INTERN;
} else {
SIMIX_mutex_lock(request->mutex);
retval = MPI_ERR_INTERN;
} else {
SIMIX_mutex_lock(request->mutex);
#ifdef DEBUG_STEPH
print_req( request ); //@@
#endif
#ifdef DEBUG_STEPH
print_req( request ); //@@
#endif
+/**
+ * Bcast internal level
+ **/
+int smpi_mpi_bcast(void *buf, int count, MPI_Datatype datatype, int root,
+ MPI_Comm comm)
+{
+ int retval = MPI_SUCCESS;
+ //retval = flat_tree_bcast(buf, count, datatype, root, comm);
+ retval = nary_tree_bcast(buf, count, datatype, root, comm, 2 );
+ return retval;
+}
/**
* Bcast user entry point
/**
* Bcast user entry point
int retval = MPI_SUCCESS;
smpi_bench_end();
int retval = MPI_SUCCESS;
smpi_bench_end();
-
- //retval = flat_tree_bcast(buf, count, datatype, root, comm);
- retval = nary_tree_bcast(buf, count, datatype, root, comm, 2 );
-
+ smpi_mpi_bcast(buf,count,datatype,root,comm);
smpi_bench_begin();
return retval;
smpi_bench_begin();
return retval;
/**
* debugging helper function
**/
/**
* debugging helper function
**/
-int SMPI_MPI_Reduce(void *sendbuf, void *recvbuf, int count,
+int smpi_mpi_reduce(void *sendbuf, void *recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
{
int retval = MPI_SUCCESS;
MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
{
int retval = MPI_SUCCESS;
#ifdef DEBUG_REDUCE
print_buffer_int(sendbuf, count, xbt_strdup("sndbuf"), rank);
#endif
#ifdef DEBUG_REDUCE
print_buffer_int(sendbuf, count, xbt_strdup("sndbuf"), rank);
#endif
- retval =
- smpi_create_request(sendbuf, count, datatype, rank, root, tag, comm,
+ retval = smpi_create_request(sendbuf, count, datatype, rank, root, tag, comm,
&request);
smpi_mpi_isend(request);
smpi_mpi_wait(request, MPI_STATUS_IGNORE);
&request);
smpi_mpi_isend(request);
smpi_mpi_wait(request, MPI_STATUS_IGNORE);
xbt_free(requests);
xbt_free(tmpbufs);
}
xbt_free(requests);
xbt_free(tmpbufs);
}
+/**
+ * MPI_Reduce user entry point
+ **/
+int SMPI_MPI_Reduce(void *sendbuf, void *recvbuf, int count,
+ MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)
+{
+int retval = MPI_SUCCESS;
+
+ smpi_bench_end();
+
+ retval = smpi_mpi_reduce(sendbuf, recvbuf, count, datatype, op, root, comm);
+
+ smpi_bench_begin();
+ return retval;
+}
+
+
+
/**
* MPI_Allreduce
*
* Same as MPI_REDUCE except that the result appears in the receive buffer of all the group members.
**/
int SMPI_MPI_Allreduce( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
/**
* MPI_Allreduce
*
* Same as MPI_REDUCE except that the result appears in the receive buffer of all the group members.
**/
int SMPI_MPI_Allreduce( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPI_Comm comm );
-int SMPI_MPI_Allreduce( void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
- MPI_Op op, MPI_Comm comm )
+ MPI_Op op, MPI_Comm comm )
- int retval = MPI_SUCCESS;
- int root=1; // arbitrary choice
+int retval = MPI_SUCCESS;
+int root=0; // arbitrary choice
+
+ smpi_bench_end();
- //smpi_bench_end(); //FIXME: restaure after calling smpi_mpi_reduce instead
+ retval = smpi_mpi_reduce( sendbuf, recvbuf, count, datatype, op, root, comm);
+ if (MPI_SUCCESS != retval)
+ return(retval);
- DEBUG0("Reduce");
- retval = SMPI_MPI_Reduce( sendbuf, recvbuf, count, datatype, op, root, comm);
- if (MPI_SUCCESS != retval)
- return(retval);
+ retval = smpi_mpi_bcast( sendbuf, count, datatype, root, comm);
- DEBUG0("Reduce done, time to bcast");
- retval = SMPI_MPI_Bcast( sendbuf, count, datatype, root, comm);
-// smpi_bench_begin();
- return( retval );
+ smpi_bench_end();
+ return( retval );