122 lines
3.4 KiB
Julia
122 lines
3.4 KiB
Julia
|
using metagraph_optimization
|
||
|
|
||
|
function main()
|
||
|
graph = DAG()
|
||
|
|
||
|
# s to output (exit node)
|
||
|
d_exit = make_node(DataTask(10))
|
||
|
|
||
|
# final s compute
|
||
|
s0 = make_node(ComputeTaskS2())
|
||
|
|
||
|
# data from v0 and v1 to s0
|
||
|
d_v0_s0 = make_node(DataTask(5))
|
||
|
d_v1_s0 = make_node(DataTask(5))
|
||
|
|
||
|
# v0 and v1 compute
|
||
|
v0 = make_node(ComputeTaskV())
|
||
|
v1 = make_node(ComputeTaskV())
|
||
|
|
||
|
# data from uB, uA, uBp and uAp to v0 and v1
|
||
|
d_uB_v0 = make_node(DataTask(3))
|
||
|
d_uA_v0 = make_node(DataTask(3))
|
||
|
d_uBp_v1 = make_node(DataTask(3))
|
||
|
d_uAp_v1 = make_node(DataTask(3))
|
||
|
|
||
|
# uB, uA, uBp and uAp computes
|
||
|
uB = make_node(ComputeTaskU())
|
||
|
uA = make_node(ComputeTaskU())
|
||
|
uBp = make_node(ComputeTaskU())
|
||
|
uAp = make_node(ComputeTaskU())
|
||
|
|
||
|
# data from PB, PA, PBp and PAp to uB, uA, uBp and uAp
|
||
|
d_PB_uB = make_node(DataTask(6))
|
||
|
d_PA_uA = make_node(DataTask(6))
|
||
|
d_PBp_uBp = make_node(DataTask(6))
|
||
|
d_PAp_uAp = make_node(DataTask(6))
|
||
|
|
||
|
# P computes PB, PA, PBp and PAp
|
||
|
PB = make_node(ComputeTaskP())
|
||
|
PA = make_node(ComputeTaskP())
|
||
|
PBp = make_node(ComputeTaskP())
|
||
|
PAp = make_node(ComputeTaskP())
|
||
|
|
||
|
# entry nodes getting data for P computes
|
||
|
d_PB = make_node(DataTask(4))
|
||
|
d_PA = make_node(DataTask(4))
|
||
|
d_PBp = make_node(DataTask(4))
|
||
|
d_PAp = make_node(DataTask(4))
|
||
|
|
||
|
# now insert them all
|
||
|
insert_node(graph, d_exit)
|
||
|
insert_node(graph, s0)
|
||
|
insert_node(graph, d_v0_s0)
|
||
|
insert_node(graph, d_v1_s0)
|
||
|
insert_node(graph, v0)
|
||
|
insert_node(graph, v1)
|
||
|
insert_node(graph, d_uB_v0)
|
||
|
insert_node(graph, d_uA_v0)
|
||
|
insert_node(graph, d_uBp_v1)
|
||
|
insert_node(graph, d_uAp_v1)
|
||
|
insert_node(graph, uB)
|
||
|
insert_node(graph, uA)
|
||
|
insert_node(graph, uBp)
|
||
|
insert_node(graph, uAp)
|
||
|
insert_node(graph, d_PB_uB)
|
||
|
insert_node(graph, d_PA_uA)
|
||
|
insert_node(graph, d_PBp_uBp)
|
||
|
insert_node(graph, d_PAp_uAp)
|
||
|
insert_node(graph, PB)
|
||
|
insert_node(graph, PA)
|
||
|
insert_node(graph, PBp)
|
||
|
insert_node(graph, PAp)
|
||
|
insert_node(graph, d_PB)
|
||
|
insert_node(graph, d_PA)
|
||
|
insert_node(graph, d_PBp)
|
||
|
insert_node(graph, d_PAp)
|
||
|
|
||
|
# now for all the edgese
|
||
|
insert_edge(graph, make_edge(d_PB, PB))
|
||
|
insert_edge(graph, make_edge(d_PA, PA))
|
||
|
insert_edge(graph, make_edge(d_PBp, PBp))
|
||
|
insert_edge(graph, make_edge(d_PAp, PAp))
|
||
|
|
||
|
insert_edge(graph, make_edge(PB, d_PB_uB))
|
||
|
insert_edge(graph, make_edge(PA, d_PA_uA))
|
||
|
insert_edge(graph, make_edge(PBp, d_PBp_uBp))
|
||
|
insert_edge(graph, make_edge(PAp, d_PAp_uAp))
|
||
|
|
||
|
insert_edge(graph, make_edge(d_PB_uB, uB))
|
||
|
insert_edge(graph, make_edge(d_PA_uA, uA))
|
||
|
insert_edge(graph, make_edge(d_PBp_uBp, uBp))
|
||
|
insert_edge(graph, make_edge(d_PAp_uAp, uAp))
|
||
|
|
||
|
insert_edge(graph, make_edge(uB, d_uB_v0))
|
||
|
insert_edge(graph, make_edge(uA, d_uA_v0))
|
||
|
insert_edge(graph, make_edge(uBp, d_uBp_v1))
|
||
|
insert_edge(graph, make_edge(uAp, d_uAp_v1))
|
||
|
|
||
|
insert_edge(graph, make_edge(d_uB_v0, v0))
|
||
|
insert_edge(graph, make_edge(d_uA_v0, v0))
|
||
|
insert_edge(graph, make_edge(d_uBp_v1, v1))
|
||
|
insert_edge(graph, make_edge(d_uAp_v1, v1))
|
||
|
|
||
|
insert_edge(graph, make_edge(v0, d_v0_s0))
|
||
|
insert_edge(graph, make_edge(v1, d_v1_s0))
|
||
|
|
||
|
insert_edge(graph, make_edge(d_v0_s0, s0))
|
||
|
insert_edge(graph, make_edge(d_v1_s0, s0))
|
||
|
|
||
|
insert_edge(graph, make_edge(s0, d_exit))
|
||
|
|
||
|
print(graph)
|
||
|
|
||
|
node_fusion(graph, PB, d_PB_uB, uB)
|
||
|
|
||
|
println("Same graph after node fusion")
|
||
|
print(graph)
|
||
|
|
||
|
end
|
||
|
|
||
|
main()
|