Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve performance of icache #1543

Open
veripoolbot opened this issue Oct 6, 2019 · 0 comments
Open

Improve performance of icache #1543

veripoolbot opened this issue Oct 6, 2019 · 0 comments

Comments

@veripoolbot
Copy link

@veripoolbot veripoolbot commented Oct 6, 2019


Author Name: Wilson Snyder (@wsnyder)
Original Redmine Issue: 1543 from https://www.veripool.org


Feature tracking bug.

The biggest performance cost presently is icache pressure. We should figure out techniques to improve icache performance as this has the potential for 2x performance gains.

First we need to hand-craft some experiments and possible solutions so we find a good path.

One idea is this:

One idea is to build new functions with generic input/outputs, then call those functions (basically reverse-inline). This will result in more instructions, but less code size which will typically be beneficial especially if no branches are used. One possible method:

Build a graph of common code and sights referencing that code. This will look though the existing statements and convert I/O to that statement to generic variables. The code at that point forms a potential function which references those variables generically. If the number of vars is small, hash the potential function, so we now have a function signature, and create a graph from the potential call sight to the potential function. Once the graph is built, find frequent common signatures, build a function corresponding signature, and replace the original logic with calls to that function.

Note Verilator presently has a V3Combine step that finds multiple functions with identical code and combines them into a single function, but this is very limited.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
1 participant
You can’t perform that action at this time.