Skip to content
This repository was archived by the owner on Jan 31, 2025. It is now read-only.

Commit b6a2e14

Browse files
committed
Performance fix
Turns out that generating code *every time* that a loop is called is bad for performance.
1 parent 4261d7f commit b6a2e14

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

pyop3/ir/lower.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
ReplaceAssignment,
6868
)
6969
from pyop3.log import logger
70+
from pyop3.target import compile_loopy
7071
from pyop3.utils import (
7172
PrettyTuple,
7273
UniqueNameGenerator,
@@ -327,21 +328,20 @@ def __init__(self, expr, ir, arg_replace_map):
327328
self.ir = ir
328329
self.arg_replace_map = arg_replace_map
329330

331+
self._exec = compile_loopy(self.ir)
332+
330333
@cached_property
331334
def datamap(self):
332335
return merge_dicts(e.datamap for e in self.expr)
333336

334337
def __call__(self, **kwargs):
335-
from pyop3.target import compile_loopy
336-
337338
data_args = []
338339
for kernel_arg in self.ir.default_entrypoint.args:
339340
actual_arg_name = self.arg_replace_map[kernel_arg.name]
340341
array = kwargs.get(actual_arg_name, self.datamap[actual_arg_name])
341342
data_args.append(_as_pointer(array))
342-
func = compile_loopy(self.ir)
343343
if len(data_args) > 0:
344-
func(*data_args)
344+
self._exec(*data_args)
345345

346346
def target_code(self, target):
347347
raise NotImplementedError("TODO")

0 commit comments

Comments
 (0)