memory optimized sort_vars
This commit is contained in:
parent
a0a87baeb8
commit
95033a49f6
2 changed files with 2128 additions and 2137 deletions
|
|
@ -472,13 +472,13 @@ class Stage3():
|
||||||
|
|
||||||
pass1calc = set(map(repr, self.avg1))
|
pass1calc = set(map(repr, self.avg1))
|
||||||
map (pass1calc.update, map(AveragedField.depClosure, self.avg1))
|
map (pass1calc.update, map(AveragedField.depClosure, self.avg1))
|
||||||
self.pass1 = self.sort_vars(self.dependency, pass1calc - self.primary)
|
self.pass1 = self.sort_vars_new(self.dependency, pass1calc - self.primary)
|
||||||
|
|
||||||
# self.sort_vars(self.dependency, pass1calc - self.primary -set(map(repr, self.avg1)))
|
# self.sort_vars(self.dependency, pass1calc - self.primary -set(map(repr, self.avg1)))
|
||||||
|
|
||||||
pass2calc = set(map(repr, self.avg2))
|
pass2calc = set(map(repr, self.avg2))
|
||||||
map (pass2calc.update, map(AveragedField.depClosure, self.avg2))
|
map (pass2calc.update, map(AveragedField.depClosure, self.avg2))
|
||||||
self.pass2 = self.sort_vars(self.dependency, pass2calc - self.primary)
|
self.pass2 = self.sort_vars_new(self.dependency, pass2calc - self.primary)
|
||||||
|
|
||||||
|
|
||||||
def __repr__ (self):
|
def __repr__ (self):
|
||||||
|
|
@ -498,6 +498,48 @@ class Stage3():
|
||||||
|
|
||||||
return order
|
return order
|
||||||
|
|
||||||
|
def calc_size (self, ordered, remaining):
|
||||||
|
count = 0
|
||||||
|
dep_union = set([])
|
||||||
|
|
||||||
|
g = self.dependency
|
||||||
|
|
||||||
|
for v in remaining:
|
||||||
|
dep_union |= set(g[v])
|
||||||
|
|
||||||
|
for v in ordered:
|
||||||
|
if v in dep_union:
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
return count
|
||||||
|
|
||||||
|
|
||||||
|
def sort_vars_new (self, dependency, group):
|
||||||
|
order = []
|
||||||
|
remain = list(group)
|
||||||
|
remain.sort()
|
||||||
|
|
||||||
|
while len(remain) > 0:
|
||||||
|
|
||||||
|
candidate = []
|
||||||
|
for v in remain:
|
||||||
|
if set(dependency[v]).isdisjoint(remain):
|
||||||
|
candidate.append(v)
|
||||||
|
|
||||||
|
impact = {}
|
||||||
|
|
||||||
|
size0 = self.calc_size(set(order), set(remain))
|
||||||
|
|
||||||
|
for v in candidate:
|
||||||
|
impact[v] = self.calc_size(set(order) | set([v]), set(remain) - set([v])) - size0
|
||||||
|
|
||||||
|
candidate.sort(key=impact.get)
|
||||||
|
|
||||||
|
order.append(candidate[0])
|
||||||
|
remain.remove(candidate[0])
|
||||||
|
|
||||||
|
return order
|
||||||
|
|
||||||
|
|
||||||
def print_program (self):
|
def print_program (self):
|
||||||
|
|
||||||
|
|
|
||||||
4219
code/m_terms.f90
4219
code/m_terms.f90
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue