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?
Disclaimer
The content of this blog is my personal opinion only. Although I am an employee - currently of Nvidia, in the past of other companies such as Iagination Technologies, MIPS, Intellectual Ventures, Intel, AMD, Motorola, and Gould - I reveal this only so that the reader may account for any possible bias I may have towards my employer's products. The statements I make here in no way represent my employer's position, nor am I authorized to speak on behalf of my employer. In fact, this posting may not even represent my personal opinion, since occasionally I play devil's advocate.
See http://docs.google.com/View?id=dcxddbtr_23cg5thdfj for photo credits.
See http://docs.google.com/View?id=dcxddbtr_23cg5thdfj for photo credits.
Tuesday, September 07, 2010
Subscribe to:
Post Comments (Atom)
3 comments:
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.
I like your two additions, David. I hope that it will be okay if I add them to the wiki.
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!
Post a Comment