recv_index = 0;
current_process++;
}
- // XBT_DEBUG("Communication-deterministic : %d, Send-deterministic : %d", initial_state_safety->comm_deterministic, initial_state_safety->send_deterministic);
}
static int complete_comm_pattern(xbt_dynar_t list, mc_comm_pattern_t pattern){
if(current_pattern->comm == pattern->comm){
if(!current_pattern->completed){
current_pattern->src_proc = pattern->comm->comm.src_proc->pid;
+ current_pattern->src_host = simcall_host_get_name(pattern->comm->comm.src_proc->smx_host);
current_pattern->dst_proc = pattern->comm->comm.dst_proc->pid;
+ current_pattern->dst_host = simcall_host_get_name(pattern->comm->comm.dst_proc->smx_host);
current_pattern->data_size = pattern->comm->comm.src_buff_size;
current_pattern->data = xbt_malloc0(current_pattern->data_size);
current_pattern->matched_comm = pattern->num;
if(call == 1){ // ISEND
pattern->comm = simcall_comm_isend__get__result(request);
pattern->type = SIMIX_COMM_SEND;
- if(pattern->comm->comm.dst_proc != NULL){
-
+ if(pattern->comm->comm.dst_proc != NULL){
pattern->matched_comm = complete_comm_pattern(list, pattern);
pattern->dst_proc = pattern->comm->comm.dst_proc->pid;
pattern->completed = 1;
+ pattern->dst_host = simcall_host_get_name(pattern->comm->comm.dst_proc->smx_host);
}
pattern->src_proc = pattern->comm->comm.src_proc->pid;
+ pattern->src_host = simcall_host_get_name(request->issuer->smx_host);
pattern->data_size = pattern->comm->comm.src_buff_size;
pattern->data=xbt_malloc0(pattern->data_size);
memcpy(pattern->data, pattern->comm->comm.src_buff, pattern->data_size);
if(pattern->comm->comm.src_proc != NULL){
pattern->matched_comm = complete_comm_pattern(list, pattern);
pattern->src_proc = pattern->comm->comm.src_proc->pid;
+ pattern->src_host = simcall_host_get_name(pattern->comm->comm.src_proc->smx_host);
pattern->completed = 1;
pattern->data_size = pattern->comm->comm.src_buff_size;
pattern->data=xbt_malloc0(pattern->data_size);
memcpy(pattern->data, pattern->comm->comm.src_buff, pattern->data_size);
}
pattern->dst_proc = pattern->comm->comm.dst_proc->pid;
+ pattern->dst_host = simcall_host_get_name(request->issuer->smx_host);
}
if(pattern->comm->comm.rdv != NULL)
pattern->rdv = strdup(pattern->comm->comm.rdv->name);
unsigned int cursor = 0;
mc_comm_pattern_t current_comm;
xbt_dynar_foreach(comms_pattern, cursor, current_comm){
- // fprintf(stderr, "%s (%d - comm %p, src : %lu, dst %lu, rdv name %s, data %p, matched with %d)\n", current_comm->type == SIMIX_COMM_SEND ? "iSend" : "iRecv", current_comm->num, current_comm->comm, current_comm->src_proc, current_comm->dst_proc, current_comm->rdv, current_comm->data, current_comm->matched_comm);
+ if(current_comm->type == SIMIX_COMM_SEND)
+ XBT_INFO("[(%lu) %s -> %s] %s ", current_comm->src_proc, current_comm->src_host, current_comm->dst_host, "iSend");
+ else
+ XBT_INFO("[(%lu) %s <- %s] %s ", current_comm->dst_proc, current_comm->dst_host, current_comm->src_host, "iRecv");
}
}
xbt_free(key);
MC_UNSET_RAW_MEM;
- if(_sg_mc_comms_determinism){
+ if(_sg_mc_comms_determinism || _sg_mc_send_determinism){
if(req->call == SIMCALL_COMM_ISEND)
comm_pattern = 1;
else if(req->call == SIMCALL_COMM_IRECV)
/* Answer the request */
SIMIX_simcall_pre(req, value); /* After this call req is no longer usefull */
- if(_sg_mc_comms_determinism){
+ if(_sg_mc_comms_determinism || _sg_mc_send_determinism){
MC_SET_RAW_MEM;
if(comm_pattern != 0){
if(!initial_state_safety->initial_communications_pattern_done)
MC_SET_RAW_MEM;
- if(_sg_mc_comms_determinism){
- if(!initial_state_safety->initial_communications_pattern_done){
- //print_communications_pattern(initial_communications_pattern);
- }else{
+ if(_sg_mc_comms_determinism || _sg_mc_send_determinism){
+ if(initial_state_safety->initial_communications_pattern_done){
if(interleave_size == 0){ /* if (interleave_size > 0), process interleaved but not enabled => "incorrect" path, determinism not evaluated */
//print_communications_pattern(communications_pattern);
deterministic_pattern(initial_communications_pattern, communications_pattern);
+ if(initial_state_safety->comm_deterministic == 0 && _sg_mc_comms_determinism){
+ XBT_INFO("****************************************************");
+ XBT_INFO("***** Non-deterministic communications pattern *****");
+ XBT_INFO("****************************************************");
+ XBT_INFO("Initial communications pattern:");
+ print_communications_pattern(initial_communications_pattern);
+ XBT_INFO("Communications pattern counter-example:");
+ print_communications_pattern(communications_pattern);
+ MC_print_statistics(mc_stats);
+ return;
+ }else if(initial_state_safety->send_deterministic == 0 && _sg_mc_send_determinism){
+ XBT_INFO("****************************************************");
+ XBT_INFO("***** Non-send-deterministic communications pattern *****");
+ XBT_INFO("****************************************************");
+ XBT_INFO("Initial communications pattern:");
+ print_communications_pattern(initial_communications_pattern);
+ XBT_INFO("Communications pattern counter-example:");
+ print_communications_pattern(communications_pattern);
+ MC_print_statistics(mc_stats);
+ return;
+ }
}
+ }else{
+ initial_state_safety->initial_communications_pattern_done = 1;
}
- initial_state_safety->initial_communications_pattern_done = 1;
}
/* Trash the current state, no longer needed */