Skip to content
Snippets Groups Projects

P2P

Open
Jammer, Timrequested to merge
p2p into main
1 file
+ 31
1
Compare changes
  • Side-by-side
  • Inline
@@ -33,7 +33,6 @@ class RecvBeforeSend(ErrorGenerator):
@@ -33,7 +33,6 @@ class RecvBeforeSend(ErrorGenerator):
reverse_msg_block.register_instruction(send, 0)
reverse_msg_block.register_instruction(send, 0)
recv = CorrectMPICallFactory.mpi_recv()
recv = CorrectMPICallFactory.mpi_recv()
recv.set_arg("source", "0")
recv.set_arg("source", "0")
recv.set_has_error()
reverse_msg_block.register_instruction(recv, 1)
reverse_msg_block.register_instruction(recv, 1)
return reverse_msg_block
return reverse_msg_block
@@ -70,6 +69,7 @@ class RecvBeforeSend(ErrorGenerator):
@@ -70,6 +69,7 @@ class RecvBeforeSend(ErrorGenerator):
# add the probe to rank 1 before the send
# add the probe to rank 1 before the send
probecall = CorrectMPICallFactory.get(probe_to_use)
probecall = CorrectMPICallFactory.get(probe_to_use)
probecall.set_arg("source", "0") # recv from 1 is the default
probecall.set_arg("source", "0") # recv from 1 is the default
 
probecall.set_has_error()
if probe_to_use == "mpi_iprobe":
if probe_to_use == "mpi_iprobe":
tm.get_block("MPICALL").insert_instruction("int flag=0;", kind=1, before_index=0)
tm.get_block("MPICALL").insert_instruction("int flag=0;", kind=1, before_index=0)
tm.get_block("MPICALL").insert_instruction("while (!flag){", kind=1, before_index=1)
tm.get_block("MPICALL").insert_instruction("while (!flag){", kind=1, before_index=1)
@@ -80,6 +80,34 @@ class RecvBeforeSend(ErrorGenerator):
@@ -80,6 +80,34 @@ class RecvBeforeSend(ErrorGenerator):
yield tm
yield tm
 
def generate_mprobe(self, probe_to_use):
 
tm = get_send_recv_template("mpi_send", "mpi_recv")
 
 
tm.get_block("alloc").register_instruction("MPI_Message msg;")
 
 
tm.set_description("CallOrdering-" + probe_to_use + "-" + "mpi_send",
 
"Call Ordering: probe for message before it is going to be send")
 
 
reverse_msg_block = self.get_reverse_msg_block()
 
tm.insert_block(reverse_msg_block, after_block_name="MPICALL")
 
 
# use mrecv instead of recv
 
reverse_msg_block.replace_instruction(CorrectMPICallFactory.mpi_mrecv(), kind=1, index=0)
 
 
# add the probe to rank 1 before the send
 
probecall = CorrectMPICallFactory.get(probe_to_use)
 
probecall.set_arg("source", "0") # recv from 1 is the default
 
probecall.set_has_error()
 
if probe_to_use == "mpi_improbe":
 
tm.get_block("MPICALL").insert_instruction("int flag=0;", kind=1, before_index=0)
 
tm.get_block("MPICALL").insert_instruction("while (!flag){", kind=1, before_index=1)
 
tm.get_block("MPICALL").insert_instruction(probecall, kind=1, before_index=2)
 
tm.get_block("MPICALL").insert_instruction("}", kind=1, before_index=3)
 
else:
 
tm.get_block("MPICALL").insert_instruction(probecall, kind=1, before_index=0)
 
 
yield tm
 
def generate(self, generate_full_set):
def generate(self, generate_full_set):
for send_func, recv_func in itertools.product(self.send_funcs, self.recv_funcs):
for send_func, recv_func in itertools.product(self.send_funcs, self.recv_funcs):
yield from self.generate_impl(send_func, "mpi_irecv")
yield from self.generate_impl(send_func, "mpi_irecv")
@@ -87,3 +115,5 @@ class RecvBeforeSend(ErrorGenerator):
@@ -87,3 +115,5 @@ class RecvBeforeSend(ErrorGenerator):
return
return
yield from self.generate_probe("mpi_probe")
yield from self.generate_probe("mpi_probe")
yield from self.generate_probe("mpi_iprobe")
yield from self.generate_probe("mpi_iprobe")
 
yield from self.generate_mprobe("mpi_mprobe")
 
yield from self.generate_mprobe("mpi_improbe")
Loading