Ejemplo n.º 1
0
def ar_testing():
	a4_0=Relation('{[s_out1,j]->[k]: k+-1inter1(j)=0}')

	#### DataPermuteTrans
	R_x0_x1 = Relation("{[sigma_in] -> [sigma_out] : sigma_out = sigma(sigma_in)}")

	a4_1 =  R_x0_x1.compose(a4_0)

	#### Loop Alignment
	T_I0_to_I1 = Relation('{[s,i] -> [s,j]: j=sigma(i)}')

	a4_2 =  a4_1.compose( T_I0_to_I1.inverse() )

	#### IterPermuteTrans
	T_I1_to_I2 = Relation("{[s,ii]->[s,j]: j = delta(ii) }")

	a4_3 =  a4_2.compose( T_I1_to_I2.inverse() )

	print a4_3
Ejemplo n.º 2
0
def ar_working():
	a4_0=Relation('{[c0,s_out1,c1,j,c2]->[k]: c0=0 and c2=0 and k+-1inter1(j)=0 and -1c1+1=0}')

	#### DataPermuteTrans
	R_x0_x1 = Relation("{[sigma_in] -> [sigma_out] : sigma_out = sigma(sigma_in)}")

	a4_1 =  R_x0_x1.compose(a4_0)

	#### Loop Alignment
	T_I0_to_I1 = Relation('{[c0, s, c0, i, c0] -> [c0, s, c0, j, c0] : c0=0 && j=sigma(i)}').union( Relation('{[c0, s, c1, ii, x] -> [c0, s, c1, ii, x] : c0=0 && c1=1}') )

	a4_2 =  a4_1.compose( T_I0_to_I1.inverse() )

	#### IterPermuteTrans
	T_I1_to_I2 = Relation("{[c0,s1,c1,i,c2] -> [c3,s2,c4,j,c5] : s1=s2 && c0=0 && c1=0 && c2=0 && c3=0 && c4=0 && c5=0 && i=j}").union( Relation("{[c6,s3,c7,ii,x] -> [c8,s4,c9,j,y] : s3=s4 && j = delta(ii) && c6=0 && c8=0 && c7=1 && c9=1 && x=y }"))

	a4_3 =  a4_2.compose( T_I1_to_I2.inverse() )

	print a4_3
Ejemplo n.º 3
0
	def testInverseConstraints(self):
		from iegen import Relation
		from iegen.parser import PresParser

		relation=Relation('{[a,b]->[c,d]:a>=n && b<5 and c+d=15}')
		prelation=PresParser.parse_relation('{[c,d]->[a,b]:b<5 and a>=n && c+d=15}')

		inverse=relation.inverse()
		inverse_res=Relation(relations=[prelation])

		self.failUnless(inverse==inverse_res,'%s!=%s'%(inverse,inverse_res))
Ejemplo n.º 4
0
	def testInverse(self):
		from iegen import Relation
		from iegen.parser import PresParser

		relation=Relation('{[a,b]->[c,d]}')
		prelation=PresParser.parse_relation('{[c,d]->[a,b]}')

		inverse=relation.inverse()
		inverse_res=Relation(relations=[prelation])

		self.failUnless(inverse==inverse_res,'%s!=%s'%(inverse,inverse_res))
Ejemplo n.º 5
0
# full iteration space
print "==== Full Iteration Space"
full_I = S1_full_I.union(S2_full_I.union(S3_full_I))
print full_I

#### Modifying the access relations so that their source is the 
#### full iteration space.

# A1, access relation for S1, targets data array x
print "==== A1, access relation for S1"
a1 = Relation("{[s,i]->[i] }")
#print a1
#PrettyPrintVisitor().visit(a1)
print "Modified a1, or a1_0"
a1_0 = a1.compose(S1_sched.inverse())
#print a1_0
#PrettyPrintVisitor().visit(a1_0)


# A4, access relation for S2, targets data array x
print "==== A4, access relation for S2"
a4 = Relation("{[s,i]->[k]: k=inter1(i)}")
#print a4
#PrettyPrintVisitor().visit(a4)
print "Modified a4, or a4_0"
a4_0 = a4.compose(S2_sched.inverse())
#print a4_0
#PrettyPrintVisitor().visit(a4_0)

# A8, access relation for S3, targets data array x
Ejemplo n.º 6
0

print
T_I0_to_I1 = Relation('{[c0, s, c0, i, c0] -> [c0, s, c0, j, c0] : c0=0 && j=sigma(i)}')
T_I0_to_I1 = T_I0_to_I1.union( Relation('{[c0, s, c1, ii, x] -> [c0, s, c1, ii, x] : c0=0 && c1=1}') )
print "\tT_I0_to_I1 = "
PrettyPrintVisitor().visit(T_I0_to_I1)
print
T_I1_to_I2 = Relation("{[c0,s,c0,i,c0] -> [c0,s,c0,i,c0] : c0=0 }")
T_I1_to_I2 = T_I1_to_I2.union( Relation("{[c0,s,c1,ii,x] -> [c7,s,c8,j,x] : j = delta(ii) && c0=0  && c1=1 }"))
print "T_I1_to_I2 = "
PrettyPrintVisitor().visit(T_I1_to_I2)


print
D_1_2 = T_I0_to_I1.compose( D_1_2.compose( T_I0_to_I1.inverse() ) )
print "\t\tD_1_2 = T_I0_to_I1 compose ( D_1_2 compose (inverse T_I0_to_I1) ) ) = ", D_1_2
PrettyPrintVisitor().visit(D_1_2)
print
D_1_2 = T_I1_to_I2.compose( D_1_2.compose( T_I1_to_I2.inverse() ) )
print "\t\tD_1_2 = T_I1_to_I2 compose ( D_1_2 compose (inverse T_I1_to_I2) ) ) =", D_1_2
PrettyPrintVisitor().visit(D_1_2)

print
print "\t\tD_1_3 = T_I0_to_I1 compose ( D_1_3 compose (inverse T_I0_to_I1) ) ) ="
D_1_3 = T_I0_to_I1.compose( D_1_3.compose( T_I0_to_I1.inverse() ) )
PrettyPrintVisitor().visit(D_1_3)
print
print "\t\tD_1_3 = T_I1_to_I2 compose ( D_1_3 compose (inverse T_I1_to_I2) ) ) ="
D_1_3 = T_I1_to_I2.compose( D_1_3.compose( T_I1_to_I2.inverse() ) )
PrettyPrintVisitor().visit(D_1_3)