Skip to content

Fix Incorrect Loop Buffer Behaviour#306

Merged
dANW34V3R merged 1 commit intodevfrom
loopBufferFix
May 19, 2023
Merged

Fix Incorrect Loop Buffer Behaviour#306
dANW34V3R merged 1 commit intodevfrom
loopBufferFix

Conversation

@dANW34V3R
Copy link
Copy Markdown
Contributor

When running Tealeaf compiled to RISC-V a series of memcpy's are performed. The main body of a memcpy is a short loop, loading from one memory location and storing to another byte by byte. As this short loop is repeated it causes the loop buffer to be filled which is then used to supply decode. On one of these calls to memcpy, the loop buffer is filled just as the loop should finish iterating.

In the original implementation when the loop buffer is in the state FILLING the fetch unit fetches the final branch of this loop. As this is at the loop boundary address the loop buffer eagerly changes state to SUPPLYING and stops fetching more instructions. It disregards the branch predictors' "not taken" prediction which should cause the instruction at pc+4 to be fetched; instead the fetch tick is completed for this cycle and in the next cycle the loop buffer supplies decode (along with the not taken prediction given when filling) which then ultimately causes an infinite loop which grows SimEngs memory until the host system memory fills and the OS kills it.

To fix this, when the loop buffer should finish filling the branch prediction is checked to determine whether the buffer should be used to supply decode or not.

@jj16791
Copy link
Copy Markdown
Contributor

jj16791 commented May 19, 2023

#rerun tests

@dANW34V3R dANW34V3R merged commit ea841e6 into dev May 19, 2023
jj16791 pushed a commit that referenced this pull request May 19, 2023
@dANW34V3R dANW34V3R deleted the loopBufferFix branch October 13, 2023 12:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants