Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright notices
[simgrid.git] / src / mc / mc_comm_pattern.h
1 /* Copyright (c) 2007-2015. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #ifndef SIMGRID_MC_COMM_PATTERN_H
8 #define SIMGRID_MC_COMM_PATTERN_H
9
10 #include <stdint.h>
11
12 #include <simgrid_config.h>
13 #include <xbt/dynar.h>
14
15 #include "../simix/smx_private.h"
16 #include "../smpi/private.h"
17 #include <smpi/smpi.h>
18
19 #include "mc_state.h"
20
21 SG_BEGIN_DECL()
22
23 typedef struct s_mc_comm_pattern{
24   int num;
25   smx_synchro_t comm_addr;
26   e_smx_comm_type_t type;
27   unsigned long src_proc;
28   unsigned long dst_proc;
29   const char *src_host;
30   const char *dst_host;
31   char *rdv;
32   ssize_t data_size;
33   void *data;
34   int tag;
35   int index;
36 } s_mc_comm_pattern_t, *mc_comm_pattern_t;
37
38 typedef struct s_mc_list_comm_pattern{
39   unsigned int index_comm;
40   xbt_dynar_t list;
41 }s_mc_list_comm_pattern_t, *mc_list_comm_pattern_t;
42
43 /**
44  *  Type: `xbt_dynar_t<mc_list_comm_pattenr_t>`
45  */
46 extern XBT_INTERNAL xbt_dynar_t initial_communications_pattern;
47
48 /**
49  *  Type: `xbt_dynar_t<xbt_dynar_t<mc_comm_pattern_t>>`
50  */
51 extern XBT_INTERNAL xbt_dynar_t incomplete_communications_pattern;
52
53 typedef enum {
54   MC_CALL_TYPE_NONE,
55   MC_CALL_TYPE_SEND,
56   MC_CALL_TYPE_RECV,
57   MC_CALL_TYPE_WAIT,
58   MC_CALL_TYPE_WAITANY,
59 } e_mc_call_type_t;
60
61 typedef enum {
62   NONE_DIFF,
63   TYPE_DIFF,
64   RDV_DIFF,
65   TAG_DIFF,
66   SRC_PROC_DIFF,
67   DST_PROC_DIFF,
68   DATA_SIZE_DIFF,
69   DATA_DIFF,
70 } e_mc_comm_pattern_difference_t;
71
72 static inline e_mc_call_type_t MC_get_call_type(smx_simcall_t req)
73 {
74   switch(req->call) {
75   case SIMCALL_COMM_ISEND:
76     return MC_CALL_TYPE_SEND;
77   case SIMCALL_COMM_IRECV:
78     return MC_CALL_TYPE_RECV;
79   case SIMCALL_COMM_WAIT:
80     return MC_CALL_TYPE_WAIT;
81   case SIMCALL_COMM_WAITANY:
82     return MC_CALL_TYPE_WAITANY;
83   default:
84     return MC_CALL_TYPE_NONE;
85   }
86 }
87
88 XBT_INTERNAL void MC_get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, e_mc_call_type_t call_type, int backtracking);
89 XBT_INTERNAL void MC_handle_comm_pattern(e_mc_call_type_t call_type, smx_simcall_t request, int value, xbt_dynar_t current_pattern, int backtracking);
90 XBT_INTERNAL void MC_comm_pattern_free_voidp(void *p);
91 XBT_INTERNAL void MC_list_comm_pattern_free_voidp(void *p);
92 XBT_INTERNAL void MC_complete_comm_pattern(xbt_dynar_t list, smx_synchro_t comm_addr, unsigned int issuer, int backtracking);
93 void MC_modelcheck_comm_determinism(void);
94
95 XBT_INTERNAL void MC_restore_communications_pattern(mc_state_t state);
96
97 XBT_INTERNAL mc_comm_pattern_t MC_comm_pattern_dup(mc_comm_pattern_t comm);
98 XBT_INTERNAL xbt_dynar_t MC_comm_patterns_dup(xbt_dynar_t state);
99
100 XBT_INTERNAL void MC_state_copy_incomplete_communications_pattern(mc_state_t state);
101 XBT_INTERNAL void MC_state_copy_index_communications_pattern(mc_state_t state);
102
103 XBT_INTERNAL void MC_comm_pattern_free(mc_comm_pattern_t p);
104
105 SG_END_DECL()
106
107 #endif