[Buffers] fix non-CFDFC paths having non-zero occupancy - #979
ziadomalik wants to merge 16 commits into
Conversation
chore: add constraints 10 and 15
| auto latOrFail = | ||
| timingDB.getLatency(node.op, SignalType::DATA, targetPeriod); | ||
| if (succeeded(latOrFail) && *latOrFail > 0.0) | ||
| constPart += *latOrFail; |
There was a problem hiding this comment.
Where is II in the original constraint?
|
Another thing that came across: could you generate a |
|
Not related to the PR but we should remember to check if it helps |
|
Hi, turns out I thought adding the filtering was going to be enough so I kept the style where I formulated the constraint for all channels in a CFDFC. This is bad, since we emit one global equality per path pair, instead of one per CFDFC and a path shared by two CFDFCs with different IIs needs a separate constraint under each II, and the code was disregarding that. Also good catch on missing the II division, I think it was indirectly caused by the above. Now that we do per-CFDFC we can use the entries in Also tried the setting of |
…FC occupancy LP variable.
…e backedge constraints
|
I revisited the paper, found some mistakes I had made and now made sure to be a lot more faithful to its description of the constraints. I also added more comments to clarify the way I am enumerating relevant patterns and structs to add the variables and constraints needed for LP2. Where I am covering what constraints of LP2Equation 8Computes minimum occupancy needed based on the extra latency we need to add It is implemented in Equation 9Analogous for Equation 8, we set for each unit, here Important QUESTION: What is Capacity supposed to be in C++ terms? When I initially created the variables, I assigned it to a constant, but I can not remember why we agreed to set it to that. We need to confirm how to get the unit Capacity. It is implemented in Equation 11Makes sure that for pair of reconvergent paths in a CFC, the total occupancy is identical. It is implemented in Equation 12This constraint just ensures there's no more than Important QUESTION: What do we set B as? Right now I am just assuming we're doing sequential programs, so I am hardcoding this to be 1, as per this section here in the paper: "For dataflow circuits generated from sequential programs, 𝐵 = 1" It is implemented at the very end of Equation 13Let there be two CFC's that both share a channel It is implemented at Equation 14Is the objective function that minimizes every channel max occupancy weighted with the bitwidth. It is implemented in Note on LP1Before, every simple cycle in a CFC was forced to latency exactly |
|
Thanks for addressing the comments! Regarding the questions:
|
Problem: The implementation of the FPGA24 MILP's were missing constraint (10) and (11) described in this paper, resulting in patterns that are not in CFC's have a non-zero occupancy, which makes no sense, because occupancy tries to cater for incoming tokens in a loop body. (Initiation Interval).
This PR: Adds the missing constraints and re-works the rest of the code to adapt, as well as explicitly ignore patterns in the occupancy LP that have forks that are not part of a CFC.