From aaa6fdf3478942b85c863a295ee93bb238fbb07b Mon Sep 17 00:00:00 2001 From: George Hotz <72895+geohot@users.noreply.github.com> Date: Mon, 21 Aug 2023 12:02:58 -0700 Subject: [PATCH] this was unused code (#1600) --- tinygrad/lazy.py | 4 ++-- tinygrad/ops.py | 6 ++---- tinygrad/shape/shapetracker.py | 16 +--------------- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/tinygrad/lazy.py b/tinygrad/lazy.py index 7bd654b91e..63de64be92 100644 --- a/tinygrad/lazy.py +++ b/tinygrad/lazy.py @@ -8,9 +8,9 @@ import numpy as np from tinygrad.helpers import GRAPH, DEBUG, prod, getenv, DType, dtypes, flatten, ImageDType from tinygrad.runtime.ops_cpu import RawNumpyBuffer from tinygrad.runtime.ops_disk import RawDiskBuffer -from tinygrad.shape.shapetracker import MovementOps, ShapeTracker, View, get_contraction +from tinygrad.shape.shapetracker import ShapeTracker, View, get_contraction from tinygrad.shape.symbolic import Node -from tinygrad.ops import Compiled, Interpreted, UnaryOps, BinaryOps, TernaryOps, ReduceOps, LoadOps, OpType, LazyOp +from tinygrad.ops import Compiled, Interpreted, UnaryOps, BinaryOps, TernaryOps, ReduceOps, MovementOps, LoadOps, OpType, LazyOp from tinygrad.runtime.lib import RawBufferMapped, RawConst, RawBuffer, RawBufferTransfer # lazy can recurse a lot diff --git a/tinygrad/ops.py b/tinygrad/ops.py index acc6830fdd..8bbcaf78f7 100644 --- a/tinygrad/ops.py +++ b/tinygrad/ops.py @@ -1,9 +1,8 @@ from __future__ import annotations -import functools, time +import time from enum import Enum, auto from typing import TYPE_CHECKING, Union, Type, Tuple, Any, List, Optional, Dict, Callable, cast from tinygrad.helpers import ansilen, prod, DEBUG, getenv, GlobalCounters, DType, colored, dedup, merge_dicts -from tinygrad.shape.shapetracker import MovementOps from tinygrad.shape.symbolic import Variable, sym_infer from tinygrad.runtime.lib import RawBuffer, RawConst, buf_is_kernel_arg if TYPE_CHECKING: @@ -17,6 +16,7 @@ class UnaryOps(Enum): NOOP = auto(); EXP2 = auto(); LOG2 = auto(); CAST = auto() class BinaryOps(Enum): ADD = auto(); SUB = auto(); MUL = auto(); DIV = auto(); MAX = auto(); MOD = auto(); CMPLT = auto() # noqa: E702 class ReduceOps(Enum): SUM = auto(); MAX = auto() # noqa: E702 class TernaryOps(Enum): MULACC = auto(); WHERE = auto() # noqa: E702 +class MovementOps(Enum): RESHAPE = auto(); PERMUTE = auto(); EXPAND = auto(); PAD = auto(); SHRINK = auto(); STRIDE = auto() # noqa: E702 class LoadOps(Enum): EMPTY = auto(); RAND = auto(); CONST = auto(); FROM = auto(); CONTIGUOUS = auto(); CUSTOM = auto() # noqa: E702 Op = Union[UnaryOps, BinaryOps, ReduceOps, MovementOps, LoadOps, TernaryOps] @@ -109,13 +109,11 @@ class FlopCounter: def consume_flops(self): self.flops, ret = 0, self.flops return ret -from tinygrad.shape.shapetracker import ShapeTracker shape_fxn_for_op: Dict[Op, Callable] = { UnaryOps.CAST: lambda self,arg: (self.shape, arg[0], self.consume_flops()), # cast uses no flops **{op:lambda self: (self.shape, self.dtype, self.consume_flops() + prod(self.shape)) for op in UnaryOps if op != UnaryOps.CAST}, **{op:lambda self,y: (self.shape, max(self.dtype, y.dtype), self.consume_flops() + y.consume_flops() + prod(self.shape)) for op in BinaryOps}, **{op:lambda self,new_shape: (new_shape, self.dtype, self.consume_flops() + prod(self.shape)) for op in ReduceOps}, - **{op:functools.partial(lambda mop,self,arg: (ShapeTracker(self.shape).movement_op(mop, arg).shape, self.dtype, self.consume_flops()), op) for op in MovementOps}, TernaryOps.WHERE: lambda self,y,z: (self.shape, self.dtype, self.consume_flops() + y.consume_flops() + z.consume_flops() + prod(self.shape))} InterpretedFlopCounter = Interpreted(FlopCounter, shape_fxn_for_op, lambda x: FlopCounter((x.shape, x.dtype, 0)), lambda x: x) def get_lazyop_info(ast:LazyOp) -> FlopCounter: return InterpretedFlopCounter.exec_ast(ast) diff --git a/tinygrad/shape/shapetracker.py b/tinygrad/shape/shapetracker.py index 0ecd5d6720..eba8f84511 100644 --- a/tinygrad/shape/shapetracker.py +++ b/tinygrad/shape/shapetracker.py @@ -1,14 +1,10 @@ # ShapeTracker allows movement operations to a buffer that don't require a copy to be made. from __future__ import annotations -from enum import Enum, auto import functools -from typing import Dict, Tuple, Union, List, Optional, Callable, cast, NamedTuple +from typing import Dict, Tuple, Union, List, Optional, cast, NamedTuple from tinygrad.helpers import prod, DEBUG, partition from tinygrad.shape.symbolic import Variable, MulNode, NumNode, Node, SumNode, is_sym_int -# these ops live here -class MovementOps(Enum): RESHAPE = auto(); PERMUTE = auto(); EXPAND = auto(); PAD = auto(); SHRINK = auto(); STRIDE = auto() # noqa: E702 - @functools.lru_cache(maxsize=None) def to_shape_strides(shape:Tuple[int, ...], strides:Tuple[int, ...]) -> Tuple[Tuple[int, int], ...]: assert len(shape) == len(strides) @@ -268,16 +264,6 @@ class ShapeTracker: self.views[-1] = View(new_shape, strides, self.views[-1].offset + offset, mask) return self - # *** entry point for external *** - - def movement_op(self, op: MovementOps, arg:Union[Tuple[int, ...], Tuple[Tuple[int, int], ...]]) -> ShapeTracker: - assert isinstance(arg, tuple) and (len(arg) == len(self.shape) or op == MovementOps.RESHAPE), f"arg {arg} for {op} doesn't match dim of shape {self.shape}" - dispatch[op](self, arg) - return self - -dispatch: Dict[MovementOps, Callable] = {MovementOps.RESHAPE: ShapeTracker.reshape, MovementOps.EXPAND: ShapeTracker.expand, MovementOps.PAD: ShapeTracker.pad, - MovementOps.SHRINK: ShapeTracker.shrink, MovementOps.PERMUTE: ShapeTracker.permute, MovementOps.STRIDE: ShapeTracker.stride} - # returns the axes to create new_shape if new_shape can be created by combining axis from old_shape def get_contraction(old_shape:Tuple[int, ...], new_shape:Tuple[int, ...]) -> Optional[List[List[int]]]: # Pre-allocate all groups.