Skip to content
Snippets Groups Projects
Commit bdc5cc53 authored by Jammer, Tim's avatar Jammer, Tim
Browse files

added untested mpi_intercomm_create_from_groups case

parent 14f28f6b
No related branches found
No related tags found
1 merge request!6More Work on infrastructure IV
......@@ -225,29 +225,41 @@ def get_intercomm(comm_create_func, name):
may also contain other stack variables as needed
and the block containing all the necessary frees
"""
assert comm_create_func in ["mpi_intercomm_create", "mpi_intercom_create_from_group","mpi_intercomm_merge"]
assert comm_create_func in ["mpi_intercomm_create", "mpi_intercomm_create_from_groups", "mpi_intercomm_merge"]
assert name != "intercomm_base_comm"
if comm_create_func == "mpi_intercomm_create":
b = InstructionBlock("comm_create")
b.register_operation("MPI_Comm intercomm_base_comm;")
b.register_operation(MPICallFactory().mpi_comm_split("MPI_COMM_WORLD", "rank % 2", "rank", "&intercomm_base_comm"))
b.register_operation(
MPICallFactory().mpi_comm_split("MPI_COMM_WORLD", "rank % 2", "rank", "&intercomm_base_comm"))
b.register_operation("MPI_Comm " + name + ";")
b.register_operation(
MPICallFactory().mpi_intercomm_create("intercomm_base_comm", "0", "MPI_COMM_WORLD", "!(rank %2)", CorrectParameterFactory().get("tag"),"&" + name))
MPICallFactory().mpi_intercomm_create("intercomm_base_comm", "0", "MPI_COMM_WORLD", "!(rank %2)",
CorrectParameterFactory().get("tag"), "&" + name))
b.register_operation(MPICallFactory().mpi_comm_free("&intercomm_base_comm"))
return b
if comm_create_func == "mpi_intercom_create_from_group":
assert False and "NOT IMPLEMENTED"
if comm_create_func == "mpi_intercomm_create_from_groups":
b = InstructionBlock("comm_create")
b_free = InstructionBlock("comm_free")
b.register_operation("MPI_Comm intercomm_base_comm;")
b.register_operation(MPICallFactory().mpi_comm_split("MPI_COMM_WORLD", "rank % 2", "rank", "&intercomm_base_comm"))
b.register_operation("MPI_Group intercomm_base_comm_group;")
b.register_operation("MPI_Group world_group,even_group,odd_group;")
b.register_operation(MPICallFactory().mpi_comm_group("MPI_COMM_WORLD", "&world_group"))
b.register_operation(
MPICallFactory().mpi_comm_group("intercomm_base_comm", "&intercomm_base_comm_group"))
b.register_operation("int[3] triplet;")
b.register_operation("triplet[0] =0;")
b.register_operation("triplet[1] =size;")
b.register_operation("triplet[2] =2;")
b.register_operation(MPICallFactory().mpi_group_incl("world_group", "1","&triplet", "even_group"))
b.register_operation("triplet[0] =1;")
b.register_operation(MPICallFactory().mpi_group_incl("world_group", "1","&triplet", "odd_group"))
b.register_operation("MPI_Comm " + name + ";")
b.register_operation(
MPICallFactory().mpi_intercomm_create("mpi_intercom_create_from_group", "0", "MPI_COMM_WORLD", "1", CorrectParameterFactory().get("tag"),"&" + name),)
MPICallFactory().mpi_intercomm_create_from_groups("(rank % 2 ? even_group:odd_group)", "0",
"(!(rank % 2) ? even_group:odd_group)", "0",
CorrectParameterFactory().get("stringtag"),
CorrectParameterFactory().get("INFO"),
CorrectParameterFactory().get("errhandler"),
"&" + name), )
return b
if comm_create_func == "mpi_intercomm_merge":
b = InstructionBlock("comm_create")
......
......@@ -18,11 +18,7 @@ class InvalidCommErrorP2P(ErrorGenerator):
missmatching_comms = ["MPI_COMM_SELF", "mpi_comm_dup", "mpi_comm_dup_with_info", "mpi_comm_idup",
"mpi_comm_idup_with_info", "mpi_comm_create","mpi_comm_create_group","mpi_comm_split","mpi_comm_split_type","mpi_comm_create_from_group"
]
intercomms = ["mpi_intercomm_create","mpi_intercomm_merge"]
# TODO test with:
# 'MPI_Intercomm_create_from_groups',
# 'MPI_Intercomm_merge'
intercomms = ["mpi_intercomm_create","mpi_intercomm_merge","mpi_intercomm_create_from_groups"]
# as extended testcases
......@@ -101,9 +97,9 @@ class InvalidCommErrorP2P(ErrorGenerator):
# missmatch is between both
tm.get_block("MPICALL").get_operation(kind=0, index=0).set_has_error()
# an intercomm has only one rank (the otehr group)
# an intercomm has only one rank (the other group)
if comm_to_use in self.intercomms and not comm_to_use=="mpi_intercomm_merge":
#intercomm merge results in same comm again
#intercomm merge results in an equivalent comm again
if tm.get_block("MPICALL").get_operation(kind=0, index=0).has_arg("source"):
tm.get_block("MPICALL").get_operation(kind=0, index=0).set_arg("source","0")
if tm.get_block("MPICALL").get_operation(kind=1, index=0).has_arg("source"):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment