diff --git a/test/external/external_uop_gc.py b/test/external/external_uop_gc.py index c72bacd9aa..a773ac5053 100644 --- a/test/external/external_uop_gc.py +++ b/test/external/external_uop_gc.py @@ -63,6 +63,7 @@ if __name__ == "__main__": views_to_valid_uop.cache_clear() new_uops = uops_allocated() + print_uops() gc.collect() new_uops_gc = uops_allocated() print(f"{t.__name__:30s}: {new_uops:3d} -> {new_uops_gc:3d}") diff --git a/tinygrad/uop/ops.py b/tinygrad/uop/ops.py index c3516aaa3c..cd611ffc28 100644 --- a/tinygrad/uop/ops.py +++ b/tinygrad/uop/ops.py @@ -217,8 +217,7 @@ class UOp(MathTrait, metaclass=UOpMetaClass): # determine what ranges this is in @functools.cached_property - def ranges(self) -> dict[UOp, None]: - if self.op is Ops.RANGE: return {self:None} + def _ranges(self) -> dict[UOp, None]: ret: dict[UOp, None] = {} if self.op in range_start.keys(): for s in self.src[:range_start[self.op]]: ret.update(s.ranges) @@ -228,6 +227,11 @@ class UOp(MathTrait, metaclass=UOpMetaClass): for s in self.src: ret.update(s.ranges) return ret + @property + def ranges(self) -> dict[UOp, None]: + if self.op is Ops.RANGE: return {self:None} + return self._ranges + # *** uop evaluation *** def simplify(self, tracked=False):