Information Technology Reference
In-Depth Information
senseamps to create zeros without actually reading anything. Depending on the outcome of
the ZIB senseamp, the rest of the byte's senseamps are either allowed to detect values on
the bit-lines (the byte is nonzero) or are forced to produce zeros (because the whole byte is
zero).
Detailed SPICE simulations of this scheme for a 16KB data cache (in a TSMC 0.25 µm
CMOS process) show an overall read latency overhead of 2 FO4 (Fan-Out 4) gates and a 26%
reduction in dynamic power (10% for instruction caches) for the SPECint95 and Mediabench
benchmark suites [ 221 ].
4.4.2 Value Compression and the Frequent Value Cache
Significance compression (suppression of strings-of-zeros or strings-of-ones) is a rudimentary
form of compression. It is a small step to go from there to a compression scheme that can be
applied to general values. However, such a scheme cannot be overly complex; no more energy
should be expended in compressing and decompressing values than the energy saved by using
them. A simple, yet effective compressor must be selected for this purpose.
One solution can be found in frequent value locality , a program property, first shown
by Zhang, Yang, and Gupta [ 248 ] and independently by Larin [ 148 ]. Frequent value locality
means that a small number of distinct values often accounts for a large portion of the value
stream that is accessed. This set of frequently occurring values changes slowly during the
execution of a program [ 130 ]. Frequent value locality motivated approaches to increase the
effective capacity of the L1 cache by packing more compressed cache lines in the cache [ 237 ]
and to reduce cache power consumption by accessing fewer bits [ 235 , 234 ]. Both approaches
achieve their goal via frequent value compression .
In frequent value compression, a dictionary is loaded with the frequent values of a program.
Every occurrence of a frequent value in the cache is then replaced by an index to the actual value
in the dictionary. By virtue of its small size the dictionary can be accessed quickly and provide
the actual value with little delay. Typical frequent values include 0, 1, -1, and program-specific
values. For example, the SPEC2000 benchmark perl very often uses the value 0x78787878 (in
the Simplescalar simulator infrastructure). Frequent values are preloaded in the dictionary by
profiling the program beforehand. Alternatively, the dictionary enters a short learning period
in the beginning of each program until it fills up with values. Dynamic directories that are
updated during run-time have been also proposed [ 130 ]. The set of useful frequent values is
small: just eight frequent values account for 48% of the memory accesses (on average) in several
of the SPEC2000 benchmarks.
Frequent value compression is important because it is simple. In terms of power, it is
one of the most efficient compression mechanisms. In terms of compression ability it goes well
Search WWH ::




Custom Search