- xbt_assert(r1 && r2,
- "Missing region. Did you enable SMPI privatisation? It is not compatible with state comparison.");
- struct mc_compare_state state;
-
- xbt_dynar_t variables;
- int res;
- unsigned int cursor = 0;
- dw_variable_t current_var;
-
- mc_object_info_t object_info = NULL;
- if (region_type == 2) {
- object_info = mc_binary_info;
- } else {
- object_info = mc_libsimgrid_info;
+ xbt_assert(r1 && r2, "Missing region.");
+
+#ifdef HAVE_SMPI
+ if (r1->storage_type() == simgrid::mc::StorageType::Privatized) {
+ xbt_assert(process_index >= 0);
+ if (r2->storage_type() != simgrid::mc::StorageType::Privatized) {
+ return 1;
+ }
+
+ size_t process_count = MC_smpi_process_count();
+ xbt_assert(process_count == r1->privatized_data().size()
+ && process_count == r2->privatized_data().size());
+
+ // Compare the global variables separately for each simulates process:
+ for (size_t process_index = 0; process_index < process_count; process_index++) {
+ int is_diff = compare_global_variables(object_info, process_index,
+ &r1->privatized_data()[process_index],
+ &r2->privatized_data()[process_index],
+ snapshot1, snapshot2);
+ if (is_diff) return 1;
+ }
+ return 0;