Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : first steps for the study of MPI communications patterns
[simgrid.git] / src / mc / mc_private.h
index 52d7044..e43b409 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (c) 2007-2013 Da SimGrid Team. All rights reserved.            */
+/* Copyright (c) 2007-2013. The SimGrid Team.
+ * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -23,6 +24,7 @@
 #include "msg/msg.h"
 #include "msg/datatypes.h"
 #include "xbt/strbuff.h"
+#include "xbt/parmap.h"
 
 /****************************** Snapshots ***********************************/
 
@@ -56,6 +58,9 @@ typedef struct s_mc_global_t{
   int raw_mem_set;
   int prev_pair;
   char *prev_req;
+  int initial_communications_pattern_done;
+  int comm_deterministic;
+  int send_deterministic;
 }s_mc_global_t, *mc_global_t;
 
 typedef struct s_mc_checkpoint_ignore_region{
@@ -64,7 +69,7 @@ typedef struct s_mc_checkpoint_ignore_region{
 }s_mc_checkpoint_ignore_region_t, *mc_checkpoint_ignore_region_t;
 
 mc_snapshot_t SIMIX_pre_mc_snapshot(smx_simcall_t simcall);
-mc_snapshot_t MC_take_snapshot(void);
+mc_snapshot_t MC_take_snapshot(int num_state);
 void MC_restore_snapshot(mc_snapshot_t);
 void MC_free_snapshot(mc_snapshot_t);
 
@@ -75,6 +80,7 @@ extern xbt_dynar_t mc_checkpoint_ignore;
 extern double *mc_time;
 extern FILE *dot_output;
 extern const char* colors[13];
+extern xbt_parmap_t parmap;
 
 extern int user_max_depth_reached;
 
@@ -195,7 +201,7 @@ typedef struct s_map_region {
   void *start_addr;             /* Start address of the map */
   void *end_addr;               /* End address of the map */
   int prot;                     /* Memory protection */
-  int flags;                    /* Aditional memory flags */
+  int flags;                    /* Additional memory flags */
   void *offset;                 /* Offset in the file/whatever */
   char dev_major;               /* Major of the device */
   char dev_minor;               /* Minor of the device */
@@ -249,10 +255,10 @@ typedef struct s_mc_comparison_times{
   double hash_local_variables_comparison_time;
 }s_mc_comparison_times_t, *mc_comparison_times_t;
 
-extern mc_comparison_times_t mc_comp_times;
-extern double mc_snapshot_comparison_time;
+extern __thread mc_comparison_times_t mc_comp_times;
+extern __thread double mc_snapshot_comparison_time;
 
-int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2);
+int snapshot_compare(void *state1, void *state2);
 int SIMIX_pre_mc_compare_snapshots(smx_simcall_t simcall, mc_snapshot_t s1, mc_snapshot_t s2);
 void print_comparison_times(void);
 
@@ -296,21 +302,31 @@ extern xbt_dynar_t mc_data_bss_comparison_ignore;
 
 typedef struct s_mc_pair{
   int num;
-  int other_num; /* Dot output for */
   int search_cycle;
   mc_state_t graph_state; /* System state included */
   xbt_automaton_state_t automaton_state;
   xbt_dynar_t atomic_propositions;
   int requests;
+}s_mc_pair_t, *mc_pair_t;
+
+typedef struct s_mc_visited_pair{
+  int num;
+  int other_num; /* Dot output for */
+  int acceptance_pair;
+  mc_state_t graph_state; /* System state included */
+  xbt_automaton_state_t automaton_state;
+  xbt_dynar_t atomic_propositions;
   size_t heap_bytes_used;
   int nb_processes;
-  int stack_removed;
-  int visited_removed;
   int acceptance_removed;
-}s_mc_pair_t, *mc_pair_t;
+  int visited_removed;
+}s_mc_visited_pair_t, *mc_visited_pair_t;
 
 mc_pair_t MC_pair_new(void);
 void MC_pair_delete(mc_pair_t);
+void mc_pair_free_voidp(void *p);
+mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions);
+void MC_visited_pair_delete(mc_visited_pair_t p);
 
 void MC_ddfs_init(void);
 void MC_ddfs(void);
@@ -420,5 +436,24 @@ typedef struct s_local_variable{
   int region;
 }s_local_variable_t, *local_variable_t;
 
+/********************************* Communications pattern ***************************/
+
+typedef struct s_mc_comm_pattern{
+  int num;
+  smx_action_t comm;
+  e_smx_comm_type_t type;
+  int completed;
+  unsigned long src_proc;
+  unsigned long dst_proc;
+  char *rdv;
+  size_t data_size;
+  void *data;
+  int matched_comm;
+}s_mc_comm_pattern_t, *mc_comm_pattern_t;
+
+extern xbt_dynar_t communications_pattern;
+
+void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, int call);
+
 #endif