Skip to content

Experimental: append-only uop cache #55

@tommythorn

Description

@tommythorn

We currently allocate a fixed maximum uop block size (16) for each uop cache entry (1024, for a total of 16384 uops). If we do not fill blocks, we waste space so the current size is a compromise. With more intelligence of block selection we could make use of larger blocks. One idea to enable variable block size without waste is to allocate them in an append-only circular buffer and have the cache point to where they start. Of course as the buffer loops around we start invalidating existing entries that may still be pointed to. The simplest way to handle this is to always precede an allocated block with a tag pseudo-instruction which encodes the original address of the allocated block. Whenever we overwrite a tag, we invalidate the corresponding entry, if still valid. (The tag pseudo instruction will conveniently terminate the block, replacing the need for the current "end" instruction).

Obviously this approach will (or may?) cause more invalidations than a conventional cache, but maybe the increased capacity will make up for it?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions