tinygrad 0.10.0__py3-none-any.whl → 0.10.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tinygrad/codegen/kernel.py +114 -172
- tinygrad/codegen/linearize.py +211 -81
- tinygrad/codegen/lowerer.py +30 -35
- tinygrad/codegen/{uopgraph.py → rewriter.py} +69 -59
- tinygrad/codegen/transcendental.py +12 -13
- tinygrad/device.py +170 -47
- tinygrad/dtype.py +28 -26
- tinygrad/engine/jit.py +80 -63
- tinygrad/engine/memory.py +4 -5
- tinygrad/engine/multi.py +162 -0
- tinygrad/engine/realize.py +58 -107
- tinygrad/engine/schedule.py +381 -314
- tinygrad/engine/search.py +40 -44
- tinygrad/gradient.py +70 -0
- tinygrad/helpers.py +77 -58
- tinygrad/nn/__init__.py +30 -32
- tinygrad/nn/datasets.py +1 -2
- tinygrad/nn/optim.py +22 -26
- tinygrad/nn/state.py +89 -64
- tinygrad/ops.py +562 -446
- tinygrad/renderer/__init__.py +79 -36
- tinygrad/renderer/cstyle.py +70 -84
- tinygrad/renderer/llvmir.py +32 -20
- tinygrad/renderer/ptx.py +79 -99
- tinygrad/renderer/wgsl.py +87 -0
- tinygrad/runtime/autogen/amd_gpu.py +39507 -12
- tinygrad/runtime/autogen/comgr.py +2 -0
- tinygrad/runtime/autogen/kfd.py +4 -3
- tinygrad/runtime/autogen/kgsl.py +1 -1
- tinygrad/runtime/autogen/libpciaccess.py +2023 -0
- tinygrad/runtime/autogen/llvm.py +11379 -0
- tinygrad/runtime/autogen/vfio.py +891 -0
- tinygrad/runtime/graph/cuda.py +8 -9
- tinygrad/runtime/graph/hcq.py +84 -79
- tinygrad/runtime/graph/metal.py +19 -21
- tinygrad/runtime/ops_amd.py +488 -327
- tinygrad/runtime/ops_clang.py +15 -28
- tinygrad/runtime/ops_cloud.py +34 -34
- tinygrad/runtime/ops_cuda.py +30 -27
- tinygrad/runtime/ops_disk.py +62 -63
- tinygrad/runtime/ops_dsp.py +129 -38
- tinygrad/runtime/ops_gpu.py +30 -30
- tinygrad/runtime/ops_hip.py +29 -31
- tinygrad/runtime/ops_llvm.py +45 -40
- tinygrad/runtime/ops_metal.py +93 -73
- tinygrad/runtime/ops_npy.py +2 -2
- tinygrad/runtime/ops_nv.py +232 -270
- tinygrad/runtime/ops_python.py +51 -46
- tinygrad/runtime/ops_qcom.py +129 -157
- tinygrad/runtime/ops_webgpu.py +63 -0
- tinygrad/runtime/support/allocator.py +94 -0
- tinygrad/runtime/support/am/__init__.py +0 -0
- tinygrad/runtime/support/am/amdev.py +384 -0
- tinygrad/runtime/support/am/ip.py +463 -0
- tinygrad/runtime/support/compiler_cuda.py +4 -2
- tinygrad/runtime/support/elf.py +26 -4
- tinygrad/runtime/support/hcq.py +254 -324
- tinygrad/runtime/support/llvm.py +32 -0
- tinygrad/shape/shapetracker.py +84 -53
- tinygrad/shape/view.py +103 -138
- tinygrad/spec.py +154 -0
- tinygrad/tensor.py +744 -496
- {tinygrad-0.10.0.dist-info → tinygrad-0.10.1.dist-info}/METADATA +32 -21
- tinygrad-0.10.1.dist-info/RECORD +86 -0
- {tinygrad-0.10.0.dist-info → tinygrad-0.10.1.dist-info}/WHEEL +1 -1
- tinygrad/engine/lazy.py +0 -228
- tinygrad/function.py +0 -212
- tinygrad/multi.py +0 -177
- tinygrad/runtime/graph/clang.py +0 -39
- tinygrad-0.10.0.dist-info/RECORD +0 -77
- {tinygrad-0.10.0.dist-info → tinygrad-0.10.1.dist-info}/LICENSE +0 -0
- {tinygrad-0.10.0.dist-info → tinygrad-0.10.1.dist-info}/top_level.txt +0 -0
tinygrad/multi.py
DELETED
@@ -1,177 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
from typing import Optional, Tuple, List, Dict
|
3
|
-
import functools, itertools, operator
|
4
|
-
from tinygrad.helpers import all_same, all_int, dedup, prod, DEBUG, RING, getenv
|
5
|
-
from tinygrad.dtype import DType
|
6
|
-
from tinygrad.ops import Ops, MathTrait
|
7
|
-
from tinygrad.engine.lazy import LazyBuffer
|
8
|
-
from tinygrad.shape.shapetracker import sint
|
9
|
-
|
10
|
-
def all_reduce(bop: Ops, lbs: List[LazyBuffer]) -> List[LazyBuffer]:
|
11
|
-
assert all_int(lbs[0].shape), f"does not support symbolic shape {lbs[0].shape}"
|
12
|
-
assert all_same([lb.shape[0] for lb in lbs]), "allreduce with uneven shards is undefined"
|
13
|
-
n_lbs, shape, numel = len(lbs), lbs[0].shape, prod(lbs[0].shape)
|
14
|
-
# ring allreduce doesn't provide a benefit with only 2 nodes or where number of elements is less than 256k (empirically)
|
15
|
-
# fallback to naive allreduce to save on kernel dispatch, chunking and reassembling chunks.
|
16
|
-
use_ring = (RING >= 2 or (n_lbs > 2 and numel > getenv("RING_ALLREDUCE_THRESHOLD", 256_000) and RING >= 1))
|
17
|
-
if DEBUG >= 2: print(f"{'RING ALLREDUCE' if use_ring else 'NAIVE ALLREDUCE'} {n_lbs}x{numel} | {lbs[0].dtype}")
|
18
|
-
if not use_ring: return [functools.reduce(lambda x,y: x.alu(bop, y), [x.copy_to_device(lb.device) for x in lbs]) for lb in lbs]
|
19
|
-
|
20
|
-
factor = next(f for f in [32, 16, 8, 4, 2, 1] if numel % f == 0)
|
21
|
-
base, left = (numel // factor) // n_lbs, (numel // factor) % n_lbs
|
22
|
-
chunk_sizes = [(base + 1) * factor] * left + [base * factor] * (n_lbs - left)
|
23
|
-
acc = 0
|
24
|
-
chunks = [(acc, (acc := acc + i)) for i in chunk_sizes if i > 0]
|
25
|
-
chunked = [[lb.reshape((numel,)).shrink(((s,e),)) for s,e in chunks] for lb in lbs]
|
26
|
-
|
27
|
-
# scatter-reduce
|
28
|
-
for step in range(n_lbs-1):
|
29
|
-
for i in range(len(chunks)):
|
30
|
-
src, dest = (i+step)%n_lbs, (i+step+1)%n_lbs
|
31
|
-
chunked[dest][i] = chunked[dest][i].alu(bop, chunked[src][i].copy_to_device(chunked[dest][i].device, force=True))
|
32
|
-
|
33
|
-
# allgather
|
34
|
-
for step in range(n_lbs-1):
|
35
|
-
for i in range(len(chunks)):
|
36
|
-
src, dest = (i+step-1)%n_lbs, (i+step)%n_lbs
|
37
|
-
chunked[dest][i] = chunked[src][i].copy_to_device(chunked[dest][i].device, force=True)
|
38
|
-
|
39
|
-
# assemble chunks back
|
40
|
-
pads = [((s,numel-e),) for s,e in chunks]
|
41
|
-
return [functools.reduce(operator.add, [c.pad(pad) for pad,c in zip(pads,lb_c)]).reshape(shape) for lb_c in chunked]
|
42
|
-
|
43
|
-
def to_sharded(lbs:List[LazyBuffer], axis:int, bounds: Tuple[Tuple[int, int], ...]) -> List[LazyBuffer]:
|
44
|
-
if DEBUG >= 3 and lbs[0].shape[axis] % len(lbs) != 0: print(f"multi axis uneven: {lbs[0].shape=} {axis=} {len(lbs)=}, bounds={bounds}")
|
45
|
-
return [lb.shrink(tuple((0,s) if a != axis else bound for a,s in enumerate(lb.shape))) for i, (bound, lb) in enumerate(zip(bounds, lbs))]
|
46
|
-
|
47
|
-
class MultiLazyBuffer(MathTrait):
|
48
|
-
def __init__(self, lbs:List[LazyBuffer], axis:Optional[int], real:Optional[List[bool]]=None):
|
49
|
-
assert all(isinstance(x, LazyBuffer) for x in lbs) and len(lbs), "all lbs must be LazyBuffers, and we need at least one of them"
|
50
|
-
assert all_same([x.dtype for x in lbs]), f"all multilazybuffer needs same dtype, getting {[x.dtype for x in lbs]}"
|
51
|
-
self.lbs, self.axis, self.dtype, self.device, self.real = lbs, axis, lbs[0].dtype, tuple(x.device for x in lbs), real or [True]*len(lbs)
|
52
|
-
if axis is not None:
|
53
|
-
splits = list(itertools.accumulate([lb.shape[axis] for lb in lbs], initial=0))
|
54
|
-
self.bounds = tuple(zip(splits, splits[1:]))
|
55
|
-
|
56
|
-
@property
|
57
|
-
def shape(self): return tuple(sum(y.shape[a] for y in self.real_lbs) if a == self.axis else s for a,s in enumerate(self.real_lbs[0].shape))
|
58
|
-
|
59
|
-
@property
|
60
|
-
def size(self): return sum(x.size for x in self.real_lbs)
|
61
|
-
|
62
|
-
@property
|
63
|
-
def real_lbs(self): return [lb for lb,r in zip(self.lbs, self.real) if r]
|
64
|
-
|
65
|
-
def __repr__(self): return f"<MLB {self.axis=} {self.real=} {chr(10)}{chr(10).join([f'{x.device} {x.st}' for x in self.lbs])}>"
|
66
|
-
|
67
|
-
@staticmethod
|
68
|
-
def from_sharded(lb:LazyBuffer, devices:Tuple[str, ...], axis:Optional[int], bounds:Optional[Tuple[Tuple[int, int], ...]]):
|
69
|
-
assert (axis is None) == (bounds is None), "must specify bounds iff axis is specified"
|
70
|
-
lbs = [lb] * len(devices)
|
71
|
-
sharded_lbs = [lb.copy_to_device(d) for lb,d in zip(to_sharded(lbs, axis, bounds) if axis is not None and bounds is not None else lbs, devices)]
|
72
|
-
return MultiLazyBuffer([lb if lb.is_unrealized_unmasked_const() else lb.contiguous(allow_buffer_view=False) for lb in sharded_lbs], axis)
|
73
|
-
|
74
|
-
def copy_to_device(self, device:str) -> LazyBuffer:
|
75
|
-
if self.axis is None:
|
76
|
-
# if we already have a copy on the device, return that
|
77
|
-
return next((lb for lb in self.real_lbs if lb.device == device), self.real_lbs[0].copy_to_device(device))
|
78
|
-
# copy lbs to device, pad to final shape, and sum
|
79
|
-
llbs:List[LazyBuffer] = []
|
80
|
-
for lb,real,(start,end) in zip(self.lbs, self.real, self.bounds):
|
81
|
-
if not real: continue
|
82
|
-
pad_arg = tuple((0,0) if a != self.axis else (start, self.bounds[-1][1]-end) for a in range(len(lb.shape)))
|
83
|
-
llbs.append(lb.copy_to_device(device).pad(pad_arg))
|
84
|
-
return functools.reduce(operator.add, llbs)
|
85
|
-
|
86
|
-
# passthroughs
|
87
|
-
@property
|
88
|
-
def is_realized(self) -> bool: return all(lb.base.realized is not None for lb in self.real_lbs)
|
89
|
-
def cast(self, dtype:DType, bitcast:bool=False, allow_buffer_view=True):
|
90
|
-
return MultiLazyBuffer([x.cast(dtype, bitcast, allow_buffer_view) for x in self.lbs], self.axis, self.real)
|
91
|
-
def const_like(self, b) -> MultiLazyBuffer: return MultiLazyBuffer([x.const_like(b) for x in self.lbs], self.axis, self.real)
|
92
|
-
def assign(self, x:MultiLazyBuffer): return MultiLazyBuffer([s.assign(d) for s,d in zip(self.lbs, x.lbs)], self.axis, self.real)
|
93
|
-
def contiguous(self): return MultiLazyBuffer([x.contiguous() for x in self.lbs], self.axis, self.real)
|
94
|
-
def clone(self) -> MultiLazyBuffer: return MultiLazyBuffer([lb.clone() for lb in self.lbs], self.axis, self.real)
|
95
|
-
|
96
|
-
# elementwise is simple
|
97
|
-
def alu(self, op:Ops, *in_srcs:MultiLazyBuffer) -> MultiLazyBuffer:
|
98
|
-
msrcs = (self,)+in_srcs
|
99
|
-
assert all(isinstance(x, MultiLazyBuffer) for x in msrcs), f"all buffers must be MultiLazyBuffer {msrcs}"
|
100
|
-
assert all_same([x.device for x in msrcs]), f"all buffers must have the same device {[x.device for x in msrcs]}"
|
101
|
-
|
102
|
-
# NOTE: they all have to share an axis, we always choose [-1]
|
103
|
-
axis, bounds = axes[-1] if len(axes := dedup([(x.axis, x.bounds) for x in msrcs if x.axis is not None])) else (None, None)
|
104
|
-
srcs:List[List[LazyBuffer]] = []
|
105
|
-
not_all_real = not all(all(mlb.real) for mlb in msrcs)
|
106
|
-
new_real = [all(transposed) for transposed in zip(*[mlb.real for mlb in msrcs])] if not_all_real else self.real
|
107
|
-
assert any(new_real), "output contains no real lb"
|
108
|
-
for mlb in msrcs:
|
109
|
-
if (mlb.axis == axis and (mlb.axis is None or mlb.bounds == bounds)) or not_all_real: srcs.append(mlb.lbs)
|
110
|
-
elif mlb.axis is None and axis is not None: srcs.append(to_sharded(mlb.lbs, axis, bounds))
|
111
|
-
else: srcs.append(to_sharded([mlb.copy_to_device(lb.device) for lb in mlb.lbs], axis, bounds))
|
112
|
-
new_real_lbs:Dict[int,LazyBuffer] = {i:lsrcs[0].alu(op, *lsrcs[1:]) for i,(lsrcs,r) in enumerate(zip(zip(*srcs), new_real)) if r}
|
113
|
-
# NOTE: const dtype should match real
|
114
|
-
new_dtype = next(iter(new_real_lbs.values())).dtype
|
115
|
-
return MultiLazyBuffer([new_real_lbs.get(i, lsrcs[0].const_like(0).cast(new_dtype)) for i,lsrcs in enumerate(zip(*srcs))], axis, new_real)
|
116
|
-
|
117
|
-
def r(self, op:Ops, axis:Tuple[int, ...]) -> MultiLazyBuffer:
|
118
|
-
if self.axis is not None and self.axis in axis:
|
119
|
-
# all-reduce on sharded axes
|
120
|
-
reduced_parts = [(x if r else x.const_like(0)).r(op, axis) for x,r in zip(self.lbs, self.real)]
|
121
|
-
# if all partitions are real, do all_reduce
|
122
|
-
if all(self.real): return MultiLazyBuffer(all_reduce(op, reduced_parts), None)
|
123
|
-
# only one partition is real, keep it
|
124
|
-
return MultiLazyBuffer(reduced_parts, None, self.real)
|
125
|
-
# reduce on non sharded axes, piecewise is fine. if axis is None this is also correct
|
126
|
-
return MultiLazyBuffer([x.r(op, axis) for x in self.lbs], self.axis, self.real)
|
127
|
-
|
128
|
-
# *** movement ops ***
|
129
|
-
|
130
|
-
def _shape_to_single_shard(self, shape:Tuple[sint, ...], lb:LazyBuffer) -> Tuple[sint, ...]:
|
131
|
-
return tuple(lb.shape[self.axis] if a == self.axis else s for a,s in enumerate(shape))
|
132
|
-
|
133
|
-
def reshape(self, arg:Tuple[sint, ...]):
|
134
|
-
if self.axis is None: return MultiLazyBuffer([x.reshape(arg) for x in self.lbs], None, self.real)
|
135
|
-
assert prod(self.shape) == prod(arg), "reshape must maintain prod(shape)"
|
136
|
-
arg_acc:List[sint] = list(itertools.accumulate(arg, operator.mul, initial=1))
|
137
|
-
# new_axis is the last one that preserves prod(prior to new_axis) and must not move items between shards
|
138
|
-
# todo: what to do about shrinking to self.shape[self.axis]==1 len(self.real_lbs)==1?
|
139
|
-
new_axis = len(arg_acc) - arg_acc[::-1].index(prod(self.shape[:self.axis])) - 1
|
140
|
-
assert all(prod(lb.shape[self.axis:])%prod(arg[new_axis+1:])==0 for lb in self.lbs), f"reshape cannot move items between shards {self=} {arg=}"
|
141
|
-
lbs = [x.reshape(tuple(s if a!=new_axis else prod(x.shape[self.axis:])//prod(arg[new_axis+1:]) for a,s in enumerate(arg))) for x in self.lbs]
|
142
|
-
return MultiLazyBuffer(lbs, new_axis, self.real)
|
143
|
-
|
144
|
-
def pad(self, arg:Tuple[Tuple[sint, sint], ...]):
|
145
|
-
assert self.axis is None or arg[self.axis] == (0,0) or not all(self.real), f"padding not supported for {arg=}"
|
146
|
-
# pad on shard axis -> fill others with zeros and set real to all True
|
147
|
-
if self.axis is not None and arg[self.axis] != (0,0):
|
148
|
-
# pad back to whole axis, remove real mask
|
149
|
-
assert all(arg[i] == (0, 0) for i in range(len(self.shape)) if i != self.axis), "cannot pad sharded and non-sharded axis at the same time"
|
150
|
-
dim, bound = sum(lb.shape[self.axis] for lb in self.lbs), self.bounds[self.real.index(True)]
|
151
|
-
assert arg[self.axis] == (bound[0], dim-bound[1]), "can only pad to whole axis"
|
152
|
-
return MultiLazyBuffer([x if r else x.const_like(0) for x,r in zip(self.lbs, self.real)], self.axis)
|
153
|
-
return MultiLazyBuffer([x.pad(arg) for x in self.lbs], self.axis, self.real)
|
154
|
-
|
155
|
-
def expand(self, arg:Tuple[sint, ...]):
|
156
|
-
# NOTE: this assert isn't needed, sharded axis can have dim 1
|
157
|
-
assert self.axis is None or arg[self.axis] == self.shape[self.axis], f"expand not supported on sharded axis {arg=}"
|
158
|
-
return MultiLazyBuffer([x.expand(self._shape_to_single_shard(arg, x)) for x in self.lbs], self.axis, self.real)
|
159
|
-
|
160
|
-
def permute(self, arg:Tuple[int, ...]):
|
161
|
-
# all permutes supported!
|
162
|
-
return MultiLazyBuffer([x.permute(arg) for x in self.lbs], arg.index(self.axis) if self.axis is not None else None, self.real)
|
163
|
-
|
164
|
-
def shrink(self, arg:Tuple[Tuple[sint, sint], ...]):
|
165
|
-
assert self.axis is None or arg[self.axis] == (0, self.shape[self.axis]) or arg[self.axis] in self.bounds, f"shrinking not supported for {arg=}"
|
166
|
-
if self.axis is not None and arg[self.axis] in self.bounds and arg[self.axis] != (0, self.shape[self.axis]):
|
167
|
-
assert all(arg[i] == (0, s) or i == self.axis for i,s in enumerate(self.shape)), "cannot shrink sharded and non-sharded axis at the same time"
|
168
|
-
# NOTE: shrink on the shard axis is only allowed when result is a single partition, denoted by the new real
|
169
|
-
idx = self.bounds.index(arg[self.axis])
|
170
|
-
# zero out other lbs to not create lb reference
|
171
|
-
return MultiLazyBuffer([lb if i==idx else lb.const_like(0) for i,lb in enumerate(self.lbs)], self.axis, [i==idx for i in range(len(self.lbs))])
|
172
|
-
return MultiLazyBuffer([x.shrink(tuple((0, x.shape[self.axis]) if a == self.axis else s for a,s in enumerate(arg))) for x in self.lbs],
|
173
|
-
self.axis, self.real)
|
174
|
-
|
175
|
-
def stride(self, arg:Tuple[int, ...]):
|
176
|
-
assert self.axis is None or arg[self.axis] == 1, "flipping not supported on sharded axis"
|
177
|
-
return MultiLazyBuffer([x.stride(arg) for x in self.lbs], self.axis, self.real)
|
tinygrad/runtime/graph/clang.py
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
from typing import List, Dict, cast
|
2
|
-
import ctypes
|
3
|
-
from tinygrad.helpers import dedup, cpu_time_execution, DEBUG
|
4
|
-
from tinygrad.engine.jit import GraphRunner, GraphException
|
5
|
-
from tinygrad.device import Buffer, Device
|
6
|
-
from tinygrad.engine.realize import ExecItem, CompiledRunner
|
7
|
-
from tinygrad.ops import Variable
|
8
|
-
from tinygrad.runtime.ops_clang import ClangProgram
|
9
|
-
from tinygrad.renderer.cstyle import ClangRenderer
|
10
|
-
render_dtype = ClangRenderer().render_dtype
|
11
|
-
|
12
|
-
class ClangGraph(GraphRunner):
|
13
|
-
def __init__(self, jit_cache: List[ExecItem], input_rawbuffers: List[Buffer], var_vals: Dict[Variable, int]):
|
14
|
-
super().__init__(jit_cache, input_rawbuffers, var_vals)
|
15
|
-
if not all(isinstance(ji.prg, CompiledRunner) for ji in jit_cache): raise GraphException
|
16
|
-
|
17
|
-
prgs = '\n'.join(dedup([cast(CompiledRunner, ji.prg).p.src for ji in jit_cache]))
|
18
|
-
args = [f"{render_dtype(x.dtype)}* arg{i}" for i,x in enumerate(input_rawbuffers)]
|
19
|
-
args += sorted([f"int {v.expr}" for v in var_vals])
|
20
|
-
code = ["void batched("+','.join(args)+") {"]
|
21
|
-
for ji in jit_cache:
|
22
|
-
args = []
|
23
|
-
for buf in ji.bufs:
|
24
|
-
assert buf is not None
|
25
|
-
if buf in input_rawbuffers:
|
26
|
-
args.append(f"arg{input_rawbuffers.index(buf)}")
|
27
|
-
else:
|
28
|
-
args.append(f"({render_dtype(buf.dtype)}*)0x{ctypes.addressof(buf._buf):X}")
|
29
|
-
args += [x.expr for x in cast(CompiledRunner, ji.prg).p.vars]
|
30
|
-
code.append(f" {cast(CompiledRunner, ji.prg).p.function_name}({','.join(args)});")
|
31
|
-
code.append("}")
|
32
|
-
if DEBUG >= 4: print("\n".join(code))
|
33
|
-
compiler = Device["CLANG"].compiler
|
34
|
-
assert compiler is not None
|
35
|
-
self.clprg = ClangProgram("batched", compiler.compile(prgs+"\n"+"\n".join(code))) # no point in caching the pointers
|
36
|
-
|
37
|
-
def __call__(self, rawbufs: List[Buffer], var_vals: Dict[Variable, int], wait=False):
|
38
|
-
return cpu_time_execution(
|
39
|
-
lambda: self.clprg(*[x._buf for x in rawbufs], *[x[1] for x in sorted(var_vals.items(), key=lambda x: x[0].expr)]), enable=wait)
|
tinygrad-0.10.0.dist-info/RECORD
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
tinygrad/__init__.py,sha256=2Jhg7NSWlegCi4OAfGW0iHRVHeqMx09f7446rwAmc60,587
|
2
|
-
tinygrad/device.py,sha256=8jr2SuxLHFk84e_9ky6pdh5v8MvPlT5rXsP0Ls04kNU,12513
|
3
|
-
tinygrad/dtype.py,sha256=a9WaH5bISo1WNFvPpcC_EL_fHNP9faiBIOHFrKaYl9A,9874
|
4
|
-
tinygrad/function.py,sha256=SAVRzPzh5kKyb01TSOCbFG8B02he7aer7S4uoY-XFoA,8464
|
5
|
-
tinygrad/helpers.py,sha256=yJelGLmg8SH1R9gW77bv5bkuI4RCXuTcQVnZdPlk108,17969
|
6
|
-
tinygrad/multi.py,sha256=cRy_bVA46GwB0aES_jcuLYLco6klQUuiosQcIiANBJ0,11809
|
7
|
-
tinygrad/ops.py,sha256=sckffasep4LxfWFeEBS6BeMEYpjvqoBUL2k6mMh__ME,60926
|
8
|
-
tinygrad/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
|
-
tinygrad/tensor.py,sha256=NF2UNn_Mvv1uZT9H8PYVLawQ7dEpRwQU-1wiu-cREhM,170536
|
10
|
-
tinygrad/codegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
-
tinygrad/codegen/kernel.py,sha256=WzcvbkOLBPhcC8tuPUEH1BLF_UqFzL7PZkanfefSHgQ,45406
|
12
|
-
tinygrad/codegen/linearize.py,sha256=kQ1NQE_8OThIoWRrMVCvXKqd_8uXB_4uIrB_tw_hXGc,3926
|
13
|
-
tinygrad/codegen/lowerer.py,sha256=GwFiie_j1-kLZrXELJv_HTEltSJ1DULWxsbiQDnnrT8,7725
|
14
|
-
tinygrad/codegen/transcendental.py,sha256=lZX8y_eAPQGom8gNypNLg5PpxBchrrLKG6b24CZLLkc,13155
|
15
|
-
tinygrad/codegen/uopgraph.py,sha256=bqGgqSbmE76pj77V96i5E3HucpRA67Q84MqHX0Fn3MY,28842
|
16
|
-
tinygrad/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
|
-
tinygrad/engine/jit.py,sha256=wXlTUhXa4p11ZmShCPY5nH2PGxJpDXbfCRFk7rOMGiA,15838
|
18
|
-
tinygrad/engine/lazy.py,sha256=g8i1W5Lrd5WA8rcKBBonVxLUIVVOjPO46ZIDteADIrk,13836
|
19
|
-
tinygrad/engine/memory.py,sha256=30WHQahkQR0MooGgxA2DuyLnxpLtiRu-nuF11hhzZb4,3303
|
20
|
-
tinygrad/engine/realize.py,sha256=cGVrGrryfaNgoNM9DNhvfngH7tkSm73nMLc35G_Ud6E,12922
|
21
|
-
tinygrad/engine/schedule.py,sha256=jP4F0bgGWKVDxWjzK8ozHwcntn22Kkgixvj2UAAd1B4,23495
|
22
|
-
tinygrad/engine/search.py,sha256=fJfiwttnpC0NpCfrRPwbk_9VPMLnBDXH0S1IkK3Ow6s,12473
|
23
|
-
tinygrad/nn/__init__.py,sha256=Jl7ddXj8EOhximbQWUgVzkwn_ODupNJPda_v-HJp1As,15574
|
24
|
-
tinygrad/nn/datasets.py,sha256=JyhoLwNB9Yek2IORMQ6cGRh5fnrYol5hkz1cAuTELPk,1067
|
25
|
-
tinygrad/nn/optim.py,sha256=eznleXq_eudT--oEIUD79ZMRtAOczoCssTAPWQ_t30E,6808
|
26
|
-
tinygrad/nn/state.py,sha256=XvgYNHEHksQyGvQnHmtRB4PLF1OUQi72FX7MKp_CTWI,14806
|
27
|
-
tinygrad/renderer/__init__.py,sha256=Edhs-ldaHirH0F_JAN7HrVZ9AGCjLzQdb57l1es4muE,4529
|
28
|
-
tinygrad/renderer/cstyle.py,sha256=oMIQk2TscKi1huNaUwSyJC0u-NZABvJ9xI3Ti1a7RII,31279
|
29
|
-
tinygrad/renderer/llvmir.py,sha256=k_OPni2X7xVCUugiJ5ZczXf8wYrlkFllcZXhlMt1fNc,8137
|
30
|
-
tinygrad/renderer/ptx.py,sha256=lIcMtqcvcrC9vW6SNqiSBDyobP-ytGwGahZZFQwSKTQ,16041
|
31
|
-
tinygrad/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
32
|
-
tinygrad/runtime/ops_amd.py,sha256=7ZKaqBLL6gqhYlwhB8m6n5wlN-hPs_t36MPaQR_ocBA,29860
|
33
|
-
tinygrad/runtime/ops_clang.py,sha256=kEbyFQimfLwuhOeIIKvcXUpw7R8H1Mf5YzceYPTcs4E,1758
|
34
|
-
tinygrad/runtime/ops_cloud.py,sha256=wO4CZxl2fdVwcZsk41Rr473git_IDexIMru_KZV_vno,10425
|
35
|
-
tinygrad/runtime/ops_cuda.py,sha256=TDXjERPZ8l0btVa1WRqVLd-DOAECBfxvMvLitC9Rows,6994
|
36
|
-
tinygrad/runtime/ops_disk.py,sha256=b3jwNJW_s3CtRmubUIWbHChERJFbUJrfCl_alFDtepg,6689
|
37
|
-
tinygrad/runtime/ops_dsp.py,sha256=NgOjV-hrsmwfJEtkr63KW7esuzQH2rk4yjzxjLcpuOg,10292
|
38
|
-
tinygrad/runtime/ops_gpu.py,sha256=0l2QF3EMtNjRFRE8q5rp7B6Ub88Mir_6rz0aDnLupZM,9006
|
39
|
-
tinygrad/runtime/ops_hip.py,sha256=nbYQIGKbSgAJ2PILJH3J-i3QR5AmJG8KTVMGqsbPLtE,3845
|
40
|
-
tinygrad/runtime/ops_llvm.py,sha256=mSrWSKTY1wAy1skFXTgMAJPYLgxFD_ycphEkzhfhIZo,2499
|
41
|
-
tinygrad/runtime/ops_metal.py,sha256=C_1CqWxf-VME0XyJ7i29Bzx7VURTcDUh4lH_t3QrFcw,11144
|
42
|
-
tinygrad/runtime/ops_npy.py,sha256=HSDb47vcbPvDiG3EmSGPC0W-EPO9O5R0TqlQKnYxANU,404
|
43
|
-
tinygrad/runtime/ops_nv.py,sha256=tpkmlEYFZW18k0mzHFP53esFpWx1O1mG06uv-y4GIro,38280
|
44
|
-
tinygrad/runtime/ops_python.py,sha256=R6ie1DrY8uuaffS3ZPOWg3x1FBATlBLDMkIoBVWmUZs,11156
|
45
|
-
tinygrad/runtime/ops_qcom.py,sha256=I8mXBCJk9gsDcFVwDakktgwuMwxjauHp5vub9LoKKjM,24453
|
46
|
-
tinygrad/runtime/autogen/adreno.py,sha256=u7VxIomPAlW3nFUs4gSTe-6ijam_ywkvDM9OuTLF-j8,897915
|
47
|
-
tinygrad/runtime/autogen/amd_gpu.py,sha256=blqmF-0gDby005JKnr07bNxuRSQLo5i0hpepcjUgQ_Y,2342436
|
48
|
-
tinygrad/runtime/autogen/comgr.py,sha256=mhQtuF_vGDrJZD3iyQ_38FrS_2jp3WtImNZPC4TBuAg,39793
|
49
|
-
tinygrad/runtime/autogen/cuda.py,sha256=N0QyaMvQumr_HZh7fusCHM1d4o4mYti3Wq1MN7JSKr8,243920
|
50
|
-
tinygrad/runtime/autogen/hip.py,sha256=1yUHDCwL3KkD15if2Q1Ud3GbJiR7DxsNorKZTCINw54,245532
|
51
|
-
tinygrad/runtime/autogen/hsa.py,sha256=7Hsrn17HmChyeFOSX_3Fnzl9c0COtq2Z2ExqGu5FNiU,277716
|
52
|
-
tinygrad/runtime/autogen/io_uring.py,sha256=ZIZ2YnQkLr8WIHMieBw9Dv-NZ1ar9TwdP4YBv3gJm28,59786
|
53
|
-
tinygrad/runtime/autogen/kfd.py,sha256=LQjcTZK93o4q6Qp4YlOu3aOVGL_RDlq6qDg5j0nRzQE,30815
|
54
|
-
tinygrad/runtime/autogen/kgsl.py,sha256=Dg1skDsVdwZTGb1Cg-UTts-z4rta7qm8XFmods-ZiSU,50663
|
55
|
-
tinygrad/runtime/autogen/libc.py,sha256=xKJk2hCzVpauJSc8wCQis5x3SwcXnDli7_HyRUqEGRc,197318
|
56
|
-
tinygrad/runtime/autogen/nv_gpu.py,sha256=9X2tPdv2E5JmXGZeT8i9jL19YJ4ETTsYwfU_Wn9mTwc,1679326
|
57
|
-
tinygrad/runtime/autogen/nvrtc.py,sha256=19te2-TW5suFy85KnJox3CPOmeeml5YxqIDeL-Bx_m4,23132
|
58
|
-
tinygrad/runtime/autogen/opencl.py,sha256=NL6fa8P3KC_McNZ8g2babdr3b8vrY-bFK0qzNAtL-rE,82656
|
59
|
-
tinygrad/runtime/autogen/qcom_dsp.py,sha256=jx36-zC6reTuWgfbHCrKVjOZcF4Q9fBnq3CuTbxztQk,61848
|
60
|
-
tinygrad/runtime/graph/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
|
-
tinygrad/runtime/graph/clang.py,sha256=DakBGMhEu-U5VT6xb18yL3HOuZh80BWzioZnXqTaWnE,1994
|
62
|
-
tinygrad/runtime/graph/cuda.py,sha256=MLXZbATjpfriNBGmA9OYXV5sAfqn6Q4hZ8H0Etw9HTg,5005
|
63
|
-
tinygrad/runtime/graph/hcq.py,sha256=Wqu4Ry5juXCj1HOV_BpECf6tDqCtl2_sAWp8vuBJyD8,12391
|
64
|
-
tinygrad/runtime/graph/metal.py,sha256=5HRmOrsXI8Q4eieT52zEeeNEbmjUZ1agAggefXk959U,6093
|
65
|
-
tinygrad/runtime/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
66
|
-
tinygrad/runtime/support/compiler_cuda.py,sha256=rS0XCFTy0blcdRstKVGKKRfoEU975DKzjbZKqg_YawY,5441
|
67
|
-
tinygrad/runtime/support/compiler_hip.py,sha256=fbRP82UdG4T-KCRYH_H2hEXlMFeHIJntSnY35ZWE5JY,4398
|
68
|
-
tinygrad/runtime/support/elf.py,sha256=FVoZu5r83RPk8ArBVpmOcbPDbtSz6hiv_OTCrQ9REHA,2385
|
69
|
-
tinygrad/runtime/support/hcq.py,sha256=T4pp7Co69pLHKRULnZd-jwri_uAQ2Rji_gKVxTm5oR4,26306
|
70
|
-
tinygrad/shape/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
|
-
tinygrad/shape/shapetracker.py,sha256=VFJZghI4c_bZl5ceZBxgf-ztHz0CPsXgov-XenXzWhM,5644
|
72
|
-
tinygrad/shape/view.py,sha256=E6AXLEFPnCGP0H6rG9OCJa3Hy9F68Q_xj2bClnVi7qk,19992
|
73
|
-
tinygrad-0.10.0.dist-info/LICENSE,sha256=ABRhUPEILzINYIukgazD-_rPipkUNUwslrb0RxnV6Xc,1058
|
74
|
-
tinygrad-0.10.0.dist-info/METADATA,sha256=0ytEHMHtcc-w9bbrcRp-YRDR_xQOJadcnzMbJkkkRVs,10933
|
75
|
-
tinygrad-0.10.0.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
76
|
-
tinygrad-0.10.0.dist-info/top_level.txt,sha256=vDABMCWBFQnx2kn9Azueu88FP-1klQdePoHikQhHymc,9
|
77
|
-
tinygrad-0.10.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|