#include "simgrid/simix.h"
#include "smpi/smpi_interface.h"
#include "smpi/smpi.h"
-#include "smpi/smpif.h"
#include "smpi/smpi_cocci.h"
#include "instr/instr_private.h"
#define SSEND 0x40
#define PREPARED 0x80
#define FINISHED 0x100
+#define RMA 0x200
+#define ACCUMULATE 0x400
enum smpi_process_state{
#endif
} s_smpi_mpi_request_t;
+
void smpi_process_destroy(void);
void smpi_process_finalize(void);
int smpi_process_finalized(void);
int smpi_process_initialized(void);
void smpi_process_mark_as_initialized(void);
+struct s_smpi_mpi_cart_topology;
+typedef struct s_smpi_mpi_cart_topology *MPIR_Cart_Topology;
+
+struct s_smpi_mpi_graph_topology;
+typedef struct s_smpi_mpi_graph_topology *MPIR_Graph_Topology;
+
+struct s_smpi_dist_graph_topology;
+typedef struct s_smpi_dist_graph_topology *MPIR_Dist_Graph_Topology;
+
+// MPI_Topology defined in smpi.h, as it is public
+
void smpi_topo_destroy(MPI_Topology topo);
-MPI_Topology smpi_topo_create(int ndims);
+MPI_Topology smpi_topo_create(MPIR_Topo_type kind);
+void smpi_cart_topo_destroy(MPIR_Cart_Topology cart);
+MPI_Topology smpi_cart_topo_create(int ndims);
int smpi_mpi_cart_create(MPI_Comm comm_old, int ndims, int dims[],
- int periodic[], int reorder, MPI_Comm *comm_cart);
-int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp,
- int *rank_source, int *rank_dest);
-int smpi_mpi_cart_rank(MPI_Comm comm, int* coords, int* rank);
-int smpi_mpi_cart_get(MPI_Comm comm, int maxdims, int* dims, int* periods, int* coords);
+ int periods[], int reorder, MPI_Comm *comm_cart);
+int smpi_mpi_cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
int smpi_mpi_cart_coords(MPI_Comm comm, int rank, int maxdims,
int coords[]);
+int smpi_mpi_cart_get(MPI_Comm comm, int maxdims, int* dims, int* periods,
+ int* coords);
+int smpi_mpi_cart_rank(MPI_Comm comm, int* coords, int* rank);
+int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp,
+ int *rank_source, int *rank_dest);
int smpi_mpi_cartdim_get(MPI_Comm comm, int *ndims);
int smpi_mpi_dims_create(int nnodes, int ndims, int dims[]);
-int smpi_mpi_cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm);
+
smpi_process_data_t smpi_process_data(void);
smpi_process_data_t smpi_process_remote_data(int index);
void smpi_process_set_user_data(void *);
void* smpi_process_get_user_data(void);
+int smpi_process_get_win_id();
+void smpi_process_set_win_id(int);
int smpi_process_count(void);
MPI_Comm smpi_process_comm_world(void);
smx_rdv_t smpi_process_mailbox(void);
void print_request(const char *message, MPI_Request request);
+int smpi_enabled(void);
void smpi_global_init(void);
void smpi_global_destroy(void);
+int is_datatype_valid(MPI_Datatype datatype);
+
size_t smpi_datatype_size(MPI_Datatype datatype);
MPI_Aint smpi_datatype_lb(MPI_Datatype datatype);
MPI_Aint smpi_datatype_ub(MPI_Datatype datatype);
+MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype);
int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb,
MPI_Aint * extent);
MPI_Aint smpi_datatype_get_extent(MPI_Datatype datatype);
int src, int tag, MPI_Comm comm);
MPI_Request smpi_mpi_irecv(void *buf, int count, MPI_Datatype datatype,
int src, int tag, MPI_Comm comm);
+MPI_Request smpi_rma_send_init(void *buf, int count, MPI_Datatype datatype,
+ int src, int dst, int tag, MPI_Comm comm);
+MPI_Request smpi_rma_recv_init(void *buf, int count, MPI_Datatype datatype,
+ int src, int dst, int tag, MPI_Comm comm);
void smpi_mpi_recv(void *buf, int count, MPI_Datatype datatype, int src,
int tag, MPI_Comm comm, MPI_Status * status);
void smpi_mpi_send(void *buf, int count, MPI_Datatype datatype, int dst,
void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm);
+int smpi_mpi_win_free( MPI_Win* win);
+
+MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm);
+
+int smpi_mpi_win_fence( int assert, MPI_Win win);
+
+int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win);
+int smpi_mpi_put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win);
+int smpi_mpi_accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank,
+ MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win);
+
void nary_tree_bcast(void *buf, int count, MPI_Datatype datatype, int root,
MPI_Comm comm, int arity);
void nary_tree_barrier(MPI_Comm comm, int arity);
int* comm, int*intercomm, int* array_of_errcodes, int* ierr);
void mpi_comm_get_parent_ ( int*parent, int* ierr);
+
+#ifdef HAVE_TRACING
/********** Tracing **********/
/* from smpi_instr.c */
void TRACE_internal_smpi_set_category (const char *category);
void TRACE_smpi_computing_init(int rank);
void TRACE_smpi_computing_out(int rank);
void TRACE_smpi_computing_in(int rank, instr_extra_data extra);
+void TRACE_smpi_sleeping_init(int rank);
+void TRACE_smpi_sleeping_out(int rank);
+void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra);
+void TRACE_smpi_testing_out(int rank);
+void TRACE_smpi_testing_in(int rank, instr_extra_data extra);
void TRACE_smpi_alloc(void);
void TRACE_smpi_release(void);
void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation, instr_extra_data extra);
void TRACE_smpi_recv(int rank, int src, int dst);
void TRACE_smpi_init(int rank);
void TRACE_smpi_finalize(int rank);
-
+#endif
const char* encode_datatype(MPI_Datatype datatype);