From f404df9bc233db58e6b5e3acaeb48170a271ee44 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Sun, 14 Jul 2013 19:42:59 -0400 Subject: [PATCH] Improve kernel printing: no stray "->0" target axis, print temp vars --- loopy/kernel/__init__.py | 27 ++++++++++++------ loopy/kernel/array.py | 60 ++++++++++++++++++++++++++++++++-------- loopy/kernel/data.py | 13 ++++++++- 3 files changed, 80 insertions(+), 20 deletions(-) diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py index eb3243923..2ab26ee51 100644 --- a/loopy/kernel/__init__.py +++ b/loopy/kernel/__init__.py @@ -846,22 +846,29 @@ class LoopKernel(Record): for arg_name in sorted(self.arg_dict): lines.append(str(self.arg_dict[arg_name])) lines.append(sep) + lines.append("DOMAINS:") + for dom, parents in zip(self.domains, self.all_parents_per_domain()): + lines.append(len(parents)*" " + str(dom)) + + lines.append(sep) lines.append("INAME-TO-TAG MAP:") for iname in sorted(self.all_inames()): line = "%s: %s" % (iname, self.iname_to_tag.get(iname)) lines.append(line) - lines.append(sep) - lines.append("DOMAINS:") - for dom, parents in zip(self.domains, self.all_parents_per_domain()): - lines.append(len(parents)*" " + str(dom)) - if self.substitutions: lines.append(sep) lines.append("SUBSTIUTION RULES:") for rule_name in sorted(self.substitutions.iterkeys()): lines.append(str(self.substitutions[rule_name])) + if self.temporary_variables: + lines.append(sep) + lines.append("TEMPORARIES:") + for tv in sorted(self.temporary_variables.itervalues(), + key=lambda tv: tv.name): + lines.append(str(tv)) + lines.append(sep) lines.append("INSTRUCTIONS:") loop_list_width = 35 @@ -899,11 +906,15 @@ class LoopKernel(Record): lines.extend(trailing) - lines.append(sep) - lines.append("DEPENDENCIES:") + dep_lines = [] for insn in self.instructions: if insn.insn_deps: - lines.append("%s : %s" % (insn.id, ",".join(insn.insn_deps))) + dep_lines.append("%s : %s" % (insn.id, ",".join(insn.insn_deps))) + if dep_lines: + lines.append(sep) + lines.append("DEPENDENCIES:") + lines.extend(dep_lines) + lines.append(sep) if self.schedule is not None: diff --git a/loopy/kernel/array.py b/loopy/kernel/array.py index 6f71753ba..92afb4494 100644 --- a/loopy/kernel/array.py +++ b/loopy/kernel/array.py @@ -75,8 +75,14 @@ class FixedStrideArrayDimTag(_StrideArrayDimTagBase): self.stride = stride self.target_axis = target_axis + def stringify(self, include_target_axis): + result = "stride:%s" % self.stride + if include_target_axis: + result += "->%d" % self.target_axis + return result + def __str__(self): - return "stride:%s->%d" % (self.stride, self.target_axis) + return self.stringify(True) def map_expr(self, mapper): return self.copy(stride=mapper(self.stride)) @@ -101,28 +107,43 @@ class ComputedStrideArrayDimTag(_StrideArrayDimTagBase): _StrideArrayDimTagBase.__init__(self, order=order, pad_to=pad_to, target_axis=target_axis) - def __str__(self): + def stringify(self, include_target_axis): + result = "stride:%s" % self.stride if self.pad_to is None: - return self.order + result = self.order else: - return "%s(pad=%s)" % (self.order, self.pad_to) + result = "%s(pad=%s)" % (self.order, self.pad_to) + + if include_target_axis: + result += "->%d" % self.target_axis + + return result + + def __str__(self): + return self.stringify(True) def map_expr(self, mapper): return self class SeparateArrayArrayDimTag(ArrayDimImplementationTag): - def __str__(self): + def stringify(self, include_target_axis): return "sep" + def __str__(self): + return self.stringify(True) + def map_expr(self, mapper): return self class VectorArrayDimTag(ArrayDimImplementationTag): - def __str__(self): + def stringify(self, include_target_axis): return "vec" + def __str__(self): + return self.stringify(True) + def map_expr(self, mapper): return self @@ -531,28 +552,45 @@ class ArrayBase(Record): order=order, **kwargs) - def __str__(self): + def stringify(self, include_typename): import loopy as lp - info_entries = [type(self).__name__, str(self.dtype)] + info_entries = [] + if include_typename: + info_entries.append(type(self).__name__) + + if self.dtype is lp.auto: + type_str = "" + elif self.dtype is None: + type_str = "" + else: + type_str = str(self.dtype) + + info_entries.append("type: %s" % type_str) if self.shape is None: pass elif self.shape is lp.auto: info_entries.append("shape: auto") + elif self.shape == (): + pass else: info_entries.append("shape: (%s)" - % ",".join(str(i) for i in self.shape)) + % ", ".join(str(i) for i in self.shape)) - if self.dim_tags is not None: + if self.dim_tags is not None and self.dim_tags != (): info_entries.append("dim_tags: (%s)" - % ",".join(str(i) for i in self.dim_tags)) + % ", ".join(i.stringify(self.max_target_axes > 1) + for i in self.dim_tags)) if self.offset: info_entries.append("offset: %s" % self.offset) return "%s: %s" % (self.name, ", ".join(info_entries)) + def __str__(self): + return self.stringify(include_typename=True) + def __repr__(self): return "<%s>" % self.__str__() diff --git a/loopy/kernel/data.py b/loopy/kernel/data.py index 94ae93f3f..22e1ae10f 100644 --- a/loopy/kernel/data.py +++ b/loopy/kernel/data.py @@ -223,7 +223,15 @@ class ValueArg(KernelArgument): approximately=approximately) def __str__(self): - return "%s: ValueArg, type %s" % (self.name, self.dtype) + import loopy as lp + if self.dtype is lp.auto: + type_str = "" + elif self.dtype is None: + type_str = "" + else: + type_str = str(self.dtype) + + return "%s: ValueArg, type: %s" % (self.name, type_str) def __repr__(self): return "<%s>" % self.__str__() @@ -298,6 +306,9 @@ class TemporaryVariable(ArrayBase): return temp_var_decl + def __str__(self): + return self.stringify(include_typename=False) + # }}} -- GitLab