X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6b76ba4acd263f00d310287d7f891abfcda1c2f9..cc65d2b16b44aceb784687cf94626c7dca9423b4:/src/mc/mc_comm_pattern.h diff --git a/src/mc/mc_comm_pattern.h b/src/mc/mc_comm_pattern.h index cb45a66c87..2bb40d2540 100644 --- a/src/mc/mc_comm_pattern.h +++ b/src/mc/mc_comm_pattern.h @@ -10,6 +10,8 @@ #include #include "../simix/smx_private.h" +#include "../smpi/private.h" +#include #ifndef MC_COMM_PATTERN_H #define MC_COMM_PATTERN_H @@ -27,22 +29,38 @@ typedef struct s_mc_comm_pattern{ char *rdv; ssize_t data_size; void *data; + int tag; + int index; } s_mc_comm_pattern_t, *mc_comm_pattern_t; +typedef struct s_mc_list_comm_pattern{ + unsigned int index_comm; + xbt_dynar_t list; +}s_mc_list_comm_pattern_t, *mc_list_comm_pattern_t; + extern xbt_dynar_t initial_communications_pattern; -extern xbt_dynar_t communications_pattern; extern xbt_dynar_t incomplete_communications_pattern; -// Can we use the SIMIX syscall for this? -typedef enum mc_call_type { +typedef enum { MC_CALL_TYPE_NONE, MC_CALL_TYPE_SEND, MC_CALL_TYPE_RECV, MC_CALL_TYPE_WAIT, MC_CALL_TYPE_WAITANY, -} mc_call_type; +} e_mc_call_type_t; + +typedef enum { + NONE_DIFF, + TYPE_DIFF, + RDV_DIFF, + TAG_DIFF, + SRC_PROC_DIFF, + DST_PROC_DIFF, + DATA_SIZE_DIFF, + DATA_DIFF, +} e_mc_comm_pattern_difference_t; -static inline mc_call_type mc_get_call_type(smx_simcall_t req) +static inline e_mc_call_type_t mc_get_call_type(smx_simcall_t req) { switch(req->call) { case SIMCALL_COMM_ISEND: @@ -58,9 +76,11 @@ static inline mc_call_type mc_get_call_type(smx_simcall_t req) } } -void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, mc_call_type call_type); -void mc_update_comm_pattern(mc_call_type call_type, smx_simcall_t request, int value, xbt_dynar_t current_pattern); -void complete_comm_pattern(xbt_dynar_t list, smx_synchro_t comm); +void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, e_mc_call_type_t call_type, int backtracking); +void handle_comm_pattern(e_mc_call_type_t call_type, smx_simcall_t request, int value, xbt_dynar_t current_pattern, int backtracking); +void comm_pattern_free_voidp(void *p); +void list_comm_pattern_free_voidp(void *p); +void complete_comm_pattern(xbt_dynar_t list, smx_synchro_t comm, unsigned int issuer, int backtracking); void MC_pre_modelcheck_comm_determinism(void); void MC_modelcheck_comm_determinism(void);