Tuesday, September 07, 2010

Varieties of Cache - CompArch

Varieties of Cache - CompArch: "Varieties of Cache"

The basic principle of caching is to use a small, fast structure (typically an [[Array]])
improve the performance of a large slow, structure,
hopefully to approximate a large, fast, structure, without the expense.

However, the definition of "fast" may vary. And there may be other reasons to use a cache.

The most familiar caches are [[latency caches]].
E.g. an L1 data cache that may take 4 cycles to access, an L2 20 cycles, and main memory 200 cyckes.

Another useful cache is a [[bandwidth cache]], where the cache provides more bandwidth than the structure is is a cache for.
This is quite common - often latency and bandwidth caches are combined.
However, the use of caches to improve bandwidth sometimes leaves customers dispirited,
such as those on the [[High bandwidth Computing]] mailing list.

Another useful cache has many array read and write ports on the small cache, and fewer on the large structure. E.g. [[array port reduction]].
This is really a particular form of [[bandwidth cache]].

A cache is a fairly good [[read combining]] or [[write combining]] mechanism.

A [[power cache]] attempts to reduce power by keeping frequently accessed data items in the small structure.
this may be done even without an improvement in latency or bandwidth.

Finally(?), a reliability cache may keep certain items expected to have relaibility issues in the cache.
Particularly if reliability is related to frequency of access.

TBD: are there any other varieties of cache?

3 comments:

  1. I could add two thoughts:

    1. Re-ordering cache - e.g. a trace cache, which re-orders WRT original storage. You can argue this is a type of bandwidth cache, but it's a little more than just that.

    2. Transform cache - e.g. a cache that stores data in a different format (e.g. an x86 uop cache).

    I don't know if they are 'types' of caches per se, but they are certainly important attributes worth contemplating.

    ReplyDelete
  2. I like your two additions, David. I hope that it will be okay if I add them to the wiki.

    ReplyDelete
  3. David's examples could, I think, be termed as evaluation caches (i.e., caching the results of previous work/evaluation). Some metadata caching--like "This word is a pointer suitable for prefetching"--would seem to fit this category. Branch identification and prediction structures would also seem to fit this category.

    Thank you David and Andy for stirring some thought!

    ReplyDelete