Skip to content

Commit 57903f8

Browse files
committed
Transitive reduction of assigns. Without results restoring.
1 parent 010e341 commit 57903f8

File tree

1 file changed

+61
-11
lines changed

1 file changed

+61
-11
lines changed

cfpq_add_context/add_contexts.py

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
from cfpq_add_context.intersection import intersection
55
from cfpq_add_context.gen_automata import generate
66
from graphblas.core.dtypes import BOOL, UINT64
7-
from graphblas.core.matrix import Matrix
7+
from graphblas.core.matrix import Matrix, Vector
8+
from graphblas import op
89

910
from cfpq_matrix.block.block_matrix_space_impl import BlockMatrixSpaceImpl
1011
from cfpq_model.cnf_grammar_template import Symbol
@@ -24,6 +25,21 @@ def indexed_to_boolean_decomposition(graph, block_count):
2425
ncols=vertex_count, name = "boolean_decomposition_of_indexed")
2526
return result
2627

28+
def transitive_reduction(assigns, mask):
29+
result = Matrix(BOOL, assigns.ncols, assigns.ncols, name = "reduced_assigns")
30+
result << Matrix.mxm(mask, assigns, "land_lor")
31+
count = 1
32+
closure = Matrix(BOOL, assigns.ncols, assigns.ncols, name = "closure")
33+
unused_assigns = Matrix(BOOL, assigns.ncols, assigns.ncols, name = "unused_assigns")
34+
unused_assigns(~result.S) << assigns
35+
closure << unused_assigns
36+
while closure.nvals > 0:
37+
print ("Closure nvals = ", closure.nvals)
38+
closure << Matrix.mxm(closure, unused_assigns, "land_lor")
39+
result("lor") << Matrix.mxm(closure, mask, "land_lor")
40+
closure(~result) << closure
41+
return result
42+
2743
def to_label_decomposed_graph(graph):
2844
vertex_count = graph.nrows
2945
alloc = Matrix(BOOL, graph.ncols, graph.nrows, name = "alloc_after_intersection")
@@ -34,16 +50,6 @@ def to_label_decomposed_graph(graph):
3450
alloc_r << alloc.T
3551
print("Boolean matrix for alloc_r nvals: ", alloc_r.nvals)
3652

37-
assign = Matrix(BOOL, graph.ncols, graph.nrows, name = "assign_after_intersection")
38-
assign << graph.select(graphblas.select.select_assign)
39-
print("Boolean matrix for assign nvals: ", assign.nvals)
40-
41-
assign_r = Matrix(BOOL, graph.ncols, graph.nrows, name = "assign_r_after_intersection")
42-
assign_r << assign.T
43-
print("Boolean matrix for assign_r nvals: ", assign_r.nvals)
44-
45-
#print_matrix_to_dot(assign_r,"assign_r.dot")
46-
4753
load_i = Matrix(UINT64, graph.ncols, graph.nrows, name = "load_i_after_intersection")
4854
load_i << graph.select(graphblas.select.select_load).apply(graphblas.unary.decode_load)
4955

@@ -56,6 +62,50 @@ def to_label_decomposed_graph(graph):
5662
store_r_i = Matrix(UINT64, graph.ncols, graph.nrows, name = "store_r_i_after_intersection")
5763
store_r_i << store_i.T
5864

65+
mask_v = Vector(BOOL, graph.ncols, name = "mask_vector")
66+
mask_v(op.lor) << alloc.reduce_columnwise("lor")
67+
mask_v(op.lor) << alloc.reduce_rowwise("lor")
68+
69+
mask_v(op.lor) << load_i.reduce_columnwise("lor")
70+
mask_v(op.lor) << load_i.reduce_rowwise("lor")
71+
72+
mask_v(op.lor) << store_i.reduce_columnwise("lor")
73+
mask_v(op.lor) << store_i.reduce_rowwise("lor")
74+
75+
entrypoints = Vector(bool,graph.nrows, name="entrypoints")
76+
entrypoints << graph.reduce_columnwise(op.lor)
77+
mask_v(op.lor) << Vector.from_coo(list(set(range(0,graph.nrows)).difference(entrypoints.to_coo(values=False)[0])), values=True, dtype = BOOL)
78+
79+
assign_mask = mask_v.diag(name = "assign_mask")
80+
81+
82+
assign = Matrix(BOOL, graph.ncols, graph.nrows, name = "assign_after_intersection")
83+
assign << graph.select(graphblas.select.select_assign)
84+
print("Boolean matrix for assign nvals: ", assign.nvals)
85+
86+
87+
assign << transitive_reduction(assign, assign_mask)
88+
89+
#assign_res = Matrix(BOOL, graph.ncols, graph.nrows, name = "assign_after_transitive_reduction")
90+
#assign_1 = Matrix.mxm(assign_mask, assign, "land_lor")
91+
#print("Boolean matrix for assign of length 1 nvals: ", assign_1.nvals)
92+
#assign_to_use(~assign_1) << assign
93+
#_continue = True
94+
#while _continue:
95+
# assign_i = Matrix.mxm(assign_to_use, assign_to_use, "land_lor")
96+
# print("Boolean matrix for assign of length 1 nvals: ", assign_i.nvals)
97+
# assign_i_use = Matrix.mxm(assign_mask, assign_i, "land_lor")
98+
# assign_res("lor") << assign_i_use
99+
100+
101+
assign_r = Matrix(BOOL, graph.ncols, graph.nrows, name = "assign_r_after_intersection")
102+
assign_r << assign.T
103+
print("Boolean matrix for assign_r nvals: ", assign_r.nvals)
104+
105+
#print_matrix_to_dot(assign_r,"assign_r.dot")
106+
107+
108+
59109
store_block_count = store_i.reduce_scalar("max").get(0) + 1
60110
load_block_count = load_i.reduce_scalar("max").get(0) + 1
61111
block_count = max(store_block_count, load_block_count)

0 commit comments

Comments
 (0)