MCPcopy
hub / github.com/tinygrad/tinygrad / do_to_program

Function do_to_program

tinygrad/codegen/__init__.py:176–201  ·  view source on GitHub ↗

Transform an AST into a compiled PROGRAM. May trigger BEAM search. Args: ast: The Ops.SINK/Ops.PROGRAM rooted AST renderer: The renderer used to generate the code Returns: The Ops.PROGRAM with SINK/DEVICE/LINEAR/SOURCE/BINARY.

(ast:UOp, renderer:Renderer)

Source from the content-addressed store, hash-verified

174@track_rewrites(name=lambda ast,renderer,ret,**kwargs: TracingKey(ret.src[0].arg.name,(ret.src[0].arg.function_name, ast), ret=renderer), replay=True)
175@Context(ALLOW_DEVICE_USAGE=0)
176def do_to_program(ast:UOp, renderer:Renderer) -> UOp:
177 """
178 Transform an AST into a compiled PROGRAM. May trigger BEAM search.
179
180 Args:
181 ast: The Ops.SINK/Ops.PROGRAM rooted AST
182 renderer: The renderer used to generate the code
183
184 Returns:
185 The Ops.PROGRAM with SINK/DEVICE/LINEAR/SOURCE/BINARY.
186 """
187 if ast.op is Ops.PROGRAM: prg = ast
188 elif ast.op is Ops.SINK:
189 assert isinstance(ast.arg, KernelInfo), "requires KernelInfo on arg to to_program"
190 full_sink = full_rewrite_to_sink(ast, renderer, optimize=ast.tag is None)
191 prog_info = ProgramInfo.from_sink(full_sink)
192 # instruction selection
193 if isinstance(renderer, ISARenderer):
194 full_sink = graph_rewrite(full_sink, renderer.pre_isel_matcher, ctx=itertools.count(-1, -1), name="pre instruction selection", bottom_up=True)
195 full_sink = graph_rewrite(full_sink, renderer.isel_matcher, ctx=IselContext(full_sink), name="instruction selection", bottom_up=True)
196 prg = UOp(Ops.PROGRAM, src=(full_sink, UOp(Ops.DEVICE, arg=renderer.target.device)), arg=prog_info)
197 else: raise RuntimeError(f"can't call to_program on {ast.op}")
198 if not isinstance(prg.arg, ProgramInfo): prg = prg.replace(arg=ProgramInfo.from_sink(prg.src[0]))
199 prg = graph_rewrite(prg, pm_to_program, ctx=renderer, name="linearize/render")
200 if VIZ: graph_rewrite(prg, PatternMatcher([]), name="View Program")
201 return prg
202
203to_program_cache: dict[tuple, UOp] = {}
204def to_program(ast:UOp, renderer:Renderer) -> UOp:

Callers 5

test_replay_no_optsMethod · 0.90
test_replay_with_optMethod · 0.90
test_beamMethod · 0.90
to_programFunction · 0.85

Calls 8

replaceMethod · 0.95
graph_rewriteFunction · 0.90
IselContextClass · 0.90
UOpClass · 0.90
PatternMatcherClass · 0.90
full_rewrite_to_sinkFunction · 0.85
from_sinkMethod · 0.80
countMethod · 0.45

Tested by 4

test_replay_no_optsMethod · 0.72
test_replay_with_optMethod · 0.72
test_beamMethod · 0.72

Used in the wild real call sites across dependent graphs

searching dependent graphs…