Skip to content
Snippets Groups Projects

Basic fusion

Merged Andreas Klöckner requested to merge basic-fusion into master
Files
4
@@ -31,7 +31,7 @@ from pytools import Record, memoize_method, memoize
from grudge import sym
import grudge.symbolic.mappers as mappers
from pymbolic.primitives import Variable, Subscript
from sys import intern
from six.moves import intern
# {{{ instructions
@@ -72,11 +72,12 @@ def _make_dep_mapper(include_subscripts):
class LoopyKernelDescriptor(object):
def __init__(self, loopy_kernel, input_mappings, output_mappings,
fixed_arguments):
fixed_arguments, governing_dd):
self.loopy_kernel = loopy_kernel
self.input_mappings = input_mappings
self.output_mappings = output_mappings
self.fixed_arguments = fixed_arguments
self.governing_dd = governing_dd
@memoize_method
def scalar_args(self):
@@ -108,7 +109,12 @@ class LoopyKernelInstruction(Instruction):
if isinstance(v, (Variable, Subscript)))
def __str__(self):
knl_str = self.kernel_descriptor.loopy_kernel.stringify("di")
knl_str = "\n".join(
"%s = %s" % (insn.assignee, insn.expression)
for insn in self.kernel_descriptor.loopy_kernel.instructions)
knl_str = knl_str.replace("grdg_", "")
return "{ /* loopy */\n %s\n}" % knl_str.replace("\n", "\n ")
mapper_method = "map_insn_loopy_kernel"
@@ -277,7 +283,8 @@ def dot_dataflow_graph(code, max_node_label_length=30,
node_names[insn] = node_name
node_label = str(insn)
if max_node_label_length is not None:
if (max_node_label_length is not None
and not isinstance(insn, LoopyKernelInstruction)):
node_label = node_label[:max_node_label_length]
if label_wrap_width is not None:
@@ -852,6 +859,9 @@ class ToLoopyExpressionMapper(mappers.IdentityMapper):
"do not know how to map function '%s' into loopy"
% expr.function)
def map_ones(self, expr):
return 1
def map_node_coordinate_component(self, expr):
mapped_name = "grdg_ncc%d" % expr.axis
set_once(self.input_mappings, mapped_name, expr)
@@ -905,12 +915,18 @@ class ToLoopyInstructionMapper(object):
knl = lp.set_options(knl, return_dict=True)
knl = lp.split_iname(knl, iname, 128, outer_tag="g.0", inner_tag="l.0")
from pytools import single_valued
governing_dd = single_valued(
self.dd_inference_mapper(expr)
for expr in insn.exprs)
return LoopyKernelInstruction(
LoopyKernelDescriptor(
loopy_kernel=knl,
input_mappings=expr_mapper.input_mappings,
output_mappings=expr_mapper.output_mappings,
fixed_arguments={})
fixed_arguments={},
governing_dd=governing_dd)
)
def map_insn_assign_to_discr_scoped(self, insn):
Loading