150
|
1 import json
|
|
2 from isl import *
|
|
3
|
|
4 class Scop:
|
|
5 def __init__(self, filename):
|
|
6 f = open(filename, 'r')
|
|
7 self.json = json.load(f)
|
|
8 return
|
|
9
|
|
10 def __str__(self):
|
|
11 return json.dumps(self.json, indent=2)
|
|
12
|
|
13 def __repr__(self):
|
|
14 return str(self)
|
|
15
|
|
16 @property
|
|
17 def statements(self):
|
|
18 return self.json['statements']
|
|
19
|
|
20 class Transforms:
|
|
21 """
|
|
22 Create a map that interchanges two dimensions 'A' and 'B'
|
|
23
|
|
24 numberDimensions: The overall number of dimensions
|
|
25 dimensionA: The dimension of dimension 'A'
|
|
26 dimensionB: The dimension of dimension 'B'
|
|
27
|
|
28 getInterchange(2, 0, 1):
|
|
29 {[d0, d1] -> [d1, d0]}
|
|
30 """
|
|
31 @staticmethod
|
|
32 def getInterchange(numberDimensions, dimensionA, dimensionB):
|
|
33
|
|
34 dims = ['d' + str(i) for i in range(numberDimensions)]
|
|
35 dimString = ",".join(dims)
|
|
36
|
|
37 changedDims = dims
|
|
38 first = dims[dimensionA]
|
|
39 second = dims[dimensionB]
|
|
40 changedDims[dimensionA] = second
|
|
41 changedDims[dimensionB] = first
|
|
42 changedDimString = ",".join(changedDims)
|
|
43
|
|
44 return Map("{[%s] -> [%s]}" % (dimString, changedDimString))
|
|
45
|
|
46 """
|
|
47 Create a map that strip mines one dimension
|
|
48
|
|
49 numberDimensions: The overall number of dimensions
|
|
50 stripMineDim: The dimension to strip mine
|
|
51 factor: The strip mining factor
|
|
52
|
|
53 getStripMine(2, 1, 64):
|
|
54 {[d0, d1] -> [d0, o, d1] : o % 64 = 0 and o <= d1 <= d1 + 63}
|
|
55 """
|
|
56 @staticmethod
|
|
57 def getStripMine(numberDimensions, stripMineDim, factor):
|
|
58
|
|
59 dims = ['d' + str(i) for i in range(numberDimensions)]
|
|
60 dimString = ",".join(dims)
|
|
61
|
|
62 changedDims = dims
|
|
63 smd = dims[stripMineDim]
|
|
64 changedDims[stripMineDim] = "o,%s" % smd
|
|
65 changedDimString = ",".join(changedDims)
|
|
66 string = "{[%s] -> [%s]: o %% %i = 0 and o <= %s <= o + %i}" % \
|
|
67 (dimString, changedDimString, factor, smd, factor - 1)
|
|
68 return Map(string)
|