cornell-zhang / heterocl

HeteroCL: A Multi-Paradigm Programming Infrastructure for Software-Defined Heterogeneous Computing
https://cornell-zhang.github.io/heterocl/
Apache License 2.0
322 stars 92 forks source link

Error Messaging Enhancement #362

Closed zzzDavid closed 1 year ago

zzzDavid commented 3 years ago

Description

Users often face difficulties when debugging HeteroCL programs: the error message does not point to the line of error, leaving users guessing it from stack trace.

Example

In a scalar add example, users might be unsure whether to use .v.

import heterocl as hcl
def test():
    hcl.init()
    A = hcl.placeholder((1,), "A")=
    def algo(A):
        A = A.v + 1 # user forgets left .v
        return A
    s = hcl.create_schedule([A], algo)
    f = hcl.build(s, name="main")

The error stack trace:

Traceback (most recent call last):
  File "heterocl_debug_example.py", line 20, in <module>
    test()
  File "heterocl_debug_example.py", line 15, in test
    f = hcl.build(s, name="main")
  File "~/heterocl/python/heterocl/api.py", line 308, in build
    new_inputs.append(i.var)
  File "~/heterocl/python/heterocl/tvm/_ffi/_ctypes/node.py", line 60, in __getattr__
    "'%s' object has no attribute '%s'" % (str(type(self)), name))
AttributeError: '<class 'heterocl.tvm.expr.Add'>' object has no attribute 'var'

Most of time the stack trace only points to hcl.build. In a more complex project, user has to find out the cause by commenting out the code until the error disappears.

More examples will be added in the future.

chhzh123 commented 1 year ago

As we have released a new version of HeteroCL that entirely moves the compilation stack to MLIR, issues related to the original HalideIR flow will be closed.