def __init__(self, compiler, exgraph, ioinfo): self.compiler = compiler self.exgraph = exgraph self.ioinfo = ioinfo self.compatible = UnionFind() self.samplers = UnionFind() self.readFields = set() self.modifiedFields = set() self.liveInputs = set() self.liveOutputs = set() self.ioRefs = {} self.inputFields = set() self.locals = set() self.holdingCount = collections.defaultdict(lambda: 0) self.typeIDs = {} self.typeUID = 0 self.samplerGroups = {}
def __init__(self, compiler, dataflow, exgraph): TypeDispatcher.__init__(self) self.compiler = compiler self.dataflow = dataflow self.compatable = UnionFind() self.loads = [] self.stores = [] self.fields = {} self.exgraph = exgraph
def __init__(self, exgraph, ioinfo): self.exgraph = exgraph self.ioinfo = ioinfo self.poolInfos = {} self.fieldInfos = {} self.typeIDs = {} self.uid = 0 self.dirty = set() self.lut = SubpoolLUT() self.compatable = UnionFind() self.active = True
def __init__(self, compiler, prgm, exgraph): TypeDispatcher.__init__(self) self.compiler = compiler self.prgm = prgm self.compatable = UnionFind() self.loads = [] self.stores = [] self.fields = {} self.exgraph = exgraph self.ssaBroken = False
def partitionGraph(G): u = UnionFind() for node, next in G.iteritems(): u.union(node, *next) mapping = {} for node in G.iterkeys(): mapping[node] = u[node] domain = set(mapping.itervalues()) groups = setgraph(domain) for node, group in mapping.iteritems(): groups[group].add(node) for d in domain: assert d in groups return domain, groups, mapping
def __init__(self): self.unify = UnionFind() self.unifyGroups = {} self.dirty = set()
def postProcess(self): # Reconstruct field transform info from ioinfo structure. groups = collections.defaultdict(list) for field, ioname in self.ioinfo.fieldTrans.iteritems(): otherio = self.ioinfo.same[ioname] if ioname in self.liveInputs or otherio in self.liveInputs: groups[ioname].append(field) self.inputFields.add(field) #print field, ioname, otherio self.merged = UnionFind() for group in groups.itervalues(): self.merged.union(*group) # TODO only live fields are "compatible"? self.compatible.union(*group) if False: print "Compatible fields" for name, group in model.reindexUnionFind( self.compatible).iteritems(): print name for field in group: print '\t', field print print "Merged fields" for name, group in model.reindexUnionFind(self.merged).iteritems(): if len(group) > 1: print name for field in group: print '\t', field print print "Holding" for name, count in self.holdingCount.iteritems(): print name, count print # Build sampler groups uid = 0 for name, group in model.reindexUnionFind(self.samplers).iteritems(): sg = model.SamplerGroup(name, group, uid) self.samplerGroups[name] = sg uid += 1 self.volatileFields = set() self.volatileIntrinsics = set() #print "Volatile" for field in self.modifiedFields: obj = field.object if self.holdingCount[obj] > 1: if intrinsics.isIntrinsicSlot(field): #print "obj", obj self.volatileIntrinsics.add(obj) else: #print "field", field self.volatileFields.add(self.compatible[field]) #print singleCopy = 0 multiCopy = 0 singleton = 0 pool = 0 for name, count in self.holdingCount.iteritems(): if name in self.volatileIntrinsics or name in self.samplers: if count > 1: pool += 1 else: singleton += 1 else: if count > 1: multiCopy += 1 else: singleCopy += 1 print print singleCopy print multiCopy print singleton print pool print uib = UniformInterfaceBuilder(self.compiler, self) self.ioRefInfo = uib.process() return self
def __init__(self): self.group = UnionFind()
lut = {} for i, d in enumerate(order): lut[d] = i #lut = fuzzyorder.composeMappings(mapping, lut) ordereddata = fuzzyorder.translateData(data, lut) fuzzyorder.printViolations(ordereddata) print "Domains: ", fuzzyorder.mappingResultSize(lut) sys.exit() G = setgraph(domain) B = setgraph(domain) u = UnionFind() for rank, renames in data.iteritems(): for rename in renames: for k, v in rename.iteritems(): G[k].add(v) B[v].add(k) u.union(k, v) # Find the disjoint subgraphs groupmap = {} for d in domain: groupmap[d] = u[d] groupnames = set(groupmap.itervalues()) groups = setgraph(groupnames)