def test_quantitatively(sdfg, graph): A = np.random.rand(N.get()).astype(np.float64) B = np.random.rand(M.get()).astype(np.float64) C = np.random.rand(O.get()).astype(np.float64) out1_base = np.ndarray((N.get(), M.get()), np.float64) out2_base = np.ndarray((1), np.float64) out3_base = np.ndarray((N.get(), M.get(), O.get()), np.float64) out1 = np.ndarray((N.get(), M.get()), np.float64) out2 = np.ndarray((1), np.float64) out3 = np.ndarray((N.get(), M.get(), O.get()), np.float64) csdfg = sdfg.compile() csdfg(A=A, B=B, C=C, out1=out1_base, out2=out2_base, out3=out3_base, N=N, M=M, O=O) expand_reduce(sdfg, graph) expand_maps(sdfg, graph) subgraph = SubgraphView(graph, [node for node in graph.nodes()]) assert SubgraphFusion.match(sdfg, subgraph) == True fusion(sdfg, graph) sdfg.validate() csdfg = sdfg.compile() csdfg(A=A, B=B, C=C, out1=out1, out2=out2, out3=out3, N=N, M=M, O=O) assert np.allclose(out1, out1_base) assert np.allclose(out2, out2_base) assert np.allclose(out3, out3_base) print('PASS')
def test_quantitatively(sdfg): graph = sdfg.nodes()[0] A = np.random.rand(N.get()).astype(np.float64) B = np.random.rand(N.get()).astype(np.float64) C1 = np.random.rand(N.get()).astype(np.float64) C2 = np.random.rand(N.get()).astype(np.float64) D1 = np.random.rand(N.get()).astype(np.float64) D2 = np.random.rand(N.get()).astype(np.float64) csdfg = sdfg.compile() csdfg(A=A, B=B, C=C1, D=D1, N=N) subgraph = SubgraphView(graph, [node for node in graph.nodes()]) expansion = MultiExpansion() fusion = SubgraphFusion() assert expansion.match(sdfg, subgraph) == True expansion.apply(sdfg, subgraph) assert fusion.match(sdfg, subgraph) == True fusion.apply(sdfg, subgraph) csdfg = sdfg.compile() csdfg(A=A, B=B, C=C2, D=D2, N=N) assert np.allclose(C1, C2) assert np.allclose(D1, D2)
def test_p1(): N.set(20) M.set(30) O.set(50) P.set(40) Q.set(42) R.set(25) sdfg = test_program.to_sdfg() sdfg.apply_strict_transformations() state = sdfg.nodes()[0] A = np.random.rand(N.get()).astype(np.float64) B = np.random.rand(M.get()).astype(np.float64) C = np.random.rand(O.get()).astype(np.float64) D = np.random.rand(M.get()).astype(np.float64) E = np.random.rand(N.get()).astype(np.float64) F = np.random.rand(P.get()).astype(np.float64) G = np.random.rand(M.get()).astype(np.float64) H = np.random.rand(P.get()).astype(np.float64) I = np.random.rand(N.get()).astype(np.float64) J = np.random.rand(R.get()).astype(np.float64) X = np.random.rand(N.get()).astype(np.float64) Y = np.random.rand(M.get()).astype(np.float64) Z = np.random.rand(P.get()).astype(np.float64) csdfg = sdfg.compile() csdfg(A=A, B=B, C=C, D=D, E=E, F=F, G=G, H=H, I=I, J=J, X=X, Y=Y, Z=Z,\ N=N, M=M, O=O, P=P, R=R,Q=Q) subgraph = SubgraphView(state, [node for node in state.nodes()]) expansion = MultiExpansion() fusion = SubgraphFusion() assert MultiExpansion.match(sdfg, subgraph) expansion.apply(sdfg, subgraph) assert SubgraphFusion.match(sdfg, subgraph) fusion.apply(sdfg, subgraph) csdfg = sdfg.compile() csdfg(A=A, B=B, C=C, D=D, E=E, F=F, G=G, H=H, I=I, J=J, X=X, Y=Y, Z=Z,\ N=N, M=M, O=O, P=P, R=R,Q=Q) print("PASS")