- False sharing
In
computer science , false sharing is a performance degrading usage pattern that can arise in systems with distributed, coherent caches at the size of the smallest resource block managed by the caching mechanism. When a system participant attempts to periodically access data that will never be altered by another party, but that data shares a cache block with data that "is" altered, the caching protocol may force the first participant to reload the whole unit despite a lack of logical necessity. The caching system is unaware of activity within this block and forces the first participant to bear the caching system overhead required by true shared access of a resource.By far the most common usage of this term is in modern
multiprocessor CPU cache s, where memory is cached in lines of some smallpower of two word size (e.g., 64 aligned, contiguousbyte s). If two processors operate on independent data in the samememory address region storable in a single line, the cache coherency mechanisms in the system may force the whole line across the bus or interconnect with every data write, forcing memory stalls in addition to wasting system bandwidth. False sharing is an inherent artifact of automatically synchronized cache protocols and can also exist in environments such as distributed file system or databases, but current prevalence is limited to RAM caches.Trivial Code Example
Here,
sum_a
may need to continually re-readx
from main memory (instead of from cache) even thoughinc_b
's modification ofy
should be irrelevant. It should be noted that a moderncompiler may, despite thevolatile
keyword, optimize this example's activity in the loops to use inherently unsynchronized registers instead of repeated memory accesses, avoiding using the cache and preventing any false sharing.
Wikimedia Foundation. 2010.