Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Everything should work at this point, but doesn't. Now for the debugging...
[simgrid.git] / src / smpi / include / smpi.h
1 #define SMPI_DEFAULT_SPEED 100
2
3 #define SMPI_RAND_SEED 5
4
5 #define MPI_ANY_SOURCE -1
6
7 // errorcodes
8 #define MPI_SUCCESS     0
9 #define MPI_ERR_COMM    1
10 #define MPI_ERR_ARG     2
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
16 #define MPI_ERR_TAG     8
17
18 #include <stdlib.h>
19
20 #include <simix/simix.h>
21
22 // MPI_Comm
23 struct smpi_mpi_communicator_t {
24   int size;
25   int barrier;
26   smx_mutex_t barrier_mutex;
27   smx_cond_t barrier_cond;
28   smx_host_t *hosts;
29   smx_process_t *processes;
30 };
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)
35
36 // MPI_Status
37 struct smpi_mpi_status_t {
38   int MPI_SOURCE;
39 };
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)
44
45 // MPI_Datatype
46 struct smpi_mpi_datatype_t {
47   size_t size;
48 };
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)
58
59 // MPI_Request
60 struct smpi_mpi_request_t {
61         smpi_mpi_communicator_t *comm;
62         int src;
63         int dst;
64         int tag;
65         void *buf;
66         int count;
67         smpi_mpi_datatype_t *datatype;
68         smx_mutex_t mutex;
69         smx_cond_t cond;
70         short int completed :1;
71         xbt_fifo_t waitlist;
72 };
73 typedef struct smpi_mpi_request_t smpi_mpi_request_t;
74 typedef smpi_mpi_request_t *MPI_Request;
75
76 // smpi_received_message_t
77 struct smpi_received_message_t {
78         smpi_mpi_communicator_t *comm;
79         int src;
80         int dst;
81         int tag;
82         void *buf;
83 };
84 typedef struct smpi_received_message_t smpi_received_message_t;
85
86 // MPI_Op
87 struct smpi_mpi_op_t {
88   void (*func)(void *x, void *y, void *z);
89 };
90 typedef struct smpi_mpi_op_t smpi_mpi_op_t;
91 typedef smpi_mpi_op_t *MPI_Op;
92 extern smpi_mpi_op_t smpi_mpi_land;
93 #define MPI_LAND (&smpi_mpi_land)
94 extern smpi_mpi_op_t smpi_mpi_sum;
95 #define MPI_SUM (&smpi_mpi_sum)
96
97
98 // smpi functions
99 extern int smpi_simulated_main(int argc, char **argv);
100 unsigned int smpi_sleep(unsigned int);
101 void smpi_exit(int);