1 #define SMPI_DEFAULT_SPEED 100
3 #define SMPI_RAND_SEED 5
5 #define MPI_ANY_SOURCE -1
11 #define MPI_ERR_TYPE 3
12 #define MPI_ERR_REQUEST 4
13 #define MPI_ERR_INTERN 5
14 #define MPI_ERR_COUNT 6
15 #define MPI_ERR_RANK 7
20 #include <simix/simix.h>
23 struct smpi_mpi_communicator_t {
26 smx_mutex_t barrier_mutex;
27 smx_cond_t barrier_cond;
29 smx_process_t *processes;
31 typedef struct smpi_mpi_communicator_t smpi_mpi_communicator_t;
32 typedef smpi_mpi_communicator_t *MPI_Comm;
33 extern smpi_mpi_communicator_t smpi_mpi_comm_world;
34 #define MPI_COMM_WORLD (&smpi_mpi_comm_world)
37 struct smpi_mpi_status_t {
40 typedef struct smpi_mpi_status_t smpi_mpi_status_t;
41 typedef smpi_mpi_status_t MPI_Status;
42 extern smpi_mpi_status_t smpi_mpi_status_ignore;
43 #define MPI_STATUS_IGNORE (&smpi_mpi_status_ignore)
46 struct smpi_mpi_datatype_t {
49 typedef struct smpi_mpi_datatype_t smpi_mpi_datatype_t;
50 typedef smpi_mpi_datatype_t *MPI_Datatype;
51 // FIXME: add missing datatypes
52 extern smpi_mpi_datatype_t smpi_mpi_byte;
53 #define MPI_BYTE (&smpi_mpi_byte)
54 extern smpi_mpi_datatype_t smpi_mpi_int;
55 #define MPI_INT (&smpi_mpi_int)
56 extern smpi_mpi_datatype_t smpi_mpi_double;
57 #define MPI_DOUBLE (&smpi_mpi_double)
60 struct smpi_mpi_request_t {
63 smpi_mpi_datatype_t *datatype;
67 smpi_mpi_communicator_t *comm;
71 typedef struct smpi_mpi_request_t smpi_mpi_request_t;
72 typedef smpi_mpi_request_t *MPI_Request;
75 struct smpi_mpi_op_t {
76 void (*func)(void *x, void *y, void *z);
78 typedef struct smpi_mpi_op_t smpi_mpi_op_t;
79 typedef smpi_mpi_op_t *MPI_Op;
80 extern smpi_mpi_op_t smpi_mpi_land;
81 #define MPI_LAND (&smpi_mpi_land)
82 extern smpi_mpi_op_t smpi_mpi_sum;
83 #define MPI_SUM (&smpi_mpi_sum)
85 // smpi_received_message_t
86 struct smpi_received_message_t {
88 smpi_mpi_communicator_t *comm;
93 typedef struct smpi_received_message_t smpi_received_message_t;
96 extern int smpi_simulated_main(int argc, char **argv);
97 unsigned int smpi_sleep(unsigned int);