Hi CIRCT developers,
I’m Julian from TU Darmstadt, and my past and potentially future research interest is in modulo schedulers. To that end, I was wondering if a generic interface for static operation schedulers for HLS-like compile flows would fit into CIRCT.
A rough outline of what I mean is below. No code is written yet, but I wanted to ask about this early to find out if anyone else a) would be interested in this, or b) is already working on something similar.
- Operations with a graph region implement a
getOperatorType(Operation*)returns one (or more, if the scheduler shall choose) suitable operator types (see below) for each of the nested operations.
getSchedulingDependences()returns a list of precedence constraints relevant for scheduling
OperatorTypecorresponds to an item in your HLS component library, and specifies:
- latency: number of clock cycles until result is available. Example: 0 = combinatorial, > 1 multi-cycle
- blocking time: number of clock cycles until next input is accepted. Example: 1 = fully pipelined, equal to latency = not pipelined
- incoming/outgoing delay: physical propagation time in first / last cycle
- available units: if at most a fixed number of units of this operator should be instantiated
- resources: LUTs, DSPs, …, die area per operation instance
Dependencecomprises a source and destination
Operation*and an integer
distancewhich is required for pipeline scheduling (e.g.
dstdepends on the result from
srcfrom 3 iterations / samples / etc. ago).
- The SSA graph already encodes most of the dependences (e.g. operands need to be finished before their result can be used), but there can additional constraints such as enforcing an ordering of memory accesses.
- A concrete scheduler (such as the ModuloSDC algorithm) would be implemented as an analysis that can be queried for the nested operations’ start times, and optionally (if a particular algorithm computes that info), number of required operator instances, binding of operations to operator instances, initiation interval. This information would be used by a conversion from an untimed into a timed dialect like HIR.