Skip to content

Maximum recursion depth exceeded when resolving schedule from trace #9

@Oh-Afterglow

Description

@Oh-Afterglow

When simulating a design with all rewind keyword removed (#8), LightningSim throws a RecursionError before which a part of call stack (marked in the error message below) repeats 142 times:

[01:21:57] [INFO] LightningSim: Compiling project...
[01:22:04] [INFO] LightningSim: Running testbench...
[01:22:04] [INFO] LightningSim: Parsing schedule...
[01:22:04] [INFO] LightningSim: Resolving schedule from trace...
Traceback (most recent call last):
<Begin repeated call stack>
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 120, in <genexpr>
    max(process.latency.start for process in dataflow.processes)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/functools.py", line 998, in __get__
    val = self.func(instance)
          ^^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 98, in start
    return max(source.latency.end for input in scalar_inputs for source in input.sources) + 1
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 98, in <genexpr>
    return max(source.latency.end for input in scalar_inputs for source in input.sources) + 1
               ^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 128, in end
    return self.start + self.length
                        ^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/functools.py", line 998, in __get__
    val = self.func(instance)
          ^^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 120, in length
    max(process.latency.start for process in dataflow.processes)
<End repeated call stack>
<141 repetitions omitted>
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 120, in <genexpr>
    max(process.latency.start for process in dataflow.processes)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/functools.py", line 998, in __get__
    val = self.func(instance)
          ^^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 98, in start
    return max(source.latency.end for input in scalar_inputs for source in input.sources) + 1
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 98, in <genexpr>
    return max(source.latency.end for input in scalar_inputs for source in input.sources) + 1
               ^^^^^^^^^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 45, in latency
    return self.parent.instruction_latencies[self]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/hdd/liuweiran/miniconda3/envs/lightningsim/lib/python3.12/site-packages/lightningsim/model/instruction.py", line 66, in __hash__
    return hash((self.id, self.parent))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded

The design triggering the error is a 4x4 systolic array similar to the one used in #8. Setting a larger max recursion depth does not prevent the error from being thrown.

cc: @chhzh123

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions