Open Jiahui17 opened 2 months ago
This issue is related to #135
In the benchmark while_loop_2.c in #135, we see that the return value from a load can be used to trigger LSQ group allocation
while_loop_2.c
Currently, our LSQ load port does not buffer the data returned from memory. This has a deadlock risk, as depicted in the following:
Here there are two BBs (BB1, BB2, top-to-bottom), each with a load port sending requests to the LSQ. The LSQ's load queue only has 1 slot.
If there is no buffer between the load port in the first BB and the group allocation, we have the depicted deadlock situation:
Just put a buffer after the loadOp to make sure that the token can always leave the load queue.
This issue is related to #135
In the benchmark
while_loop_2.c
in #135, we see that the return value from a load can be used to trigger LSQ group allocationCurrently, our LSQ load port does not buffer the data returned from memory. This has a deadlock risk, as depicted in the following:
Here there are two BBs (BB1, BB2, top-to-bottom), each with a load port sending requests to the LSQ. The LSQ's load queue only has 1 slot.
If there is no buffer between the load port in the first BB and the group allocation, we have the depicted deadlock situation:
Solution
Just put a buffer after the loadOp to make sure that the token can always leave the load queue.