  In most modern systems, the memory subsystem is managed and accessed at
multiple different granularities at various resources. We observe that such
multi-granularity management results in significant inefficiency in the memory
subsystem. Specifically, we observe that 1) page-granularity virtual memory
unnecessarily triggers large memory operations, and 2) existing cache-line
granularity memory interface is inefficient for performing bulk data operations
and operations that exhibit poor spatial locality. To address these problems,
we present a series of techniques in this thesis.
  First, we propose page overlays, a framework augments the existing virtual
memory framework with the ability to track a new version of a subset of cache
lines within each virtual page. We show that this extension is powerful by
demonstrating its benefits on a number of applications.
  Second, we show that DRAM can be used to perform more complex operations than
just store data. We propose RowClone, a mechanism to perform bulk data copy and
initialization completely inside DRAM, and Buddy RAM, a mechanism to perform
bulk bitwise operations using DRAM. Both these techniques achieve an
order-of-magnitude improvement in the efficiency of the respective operations.
  Third, we propose Gather-Scatter DRAM, a technique that exploits DRAM
organization to effectively gather/scatter values with a power-of-2 strided
access patterns. For these access patterns, GS-DRAM achieves near-ideal
bandwidth and cache utilization, without increasing the latency of fetching
data from memory.
  Finally, we propose the Dirty-Block Index, a new way of tracking dirty
blocks. In addition to improving the efficiency of bulk data coherence, DBI has
several applications including high-performance memory scheduling, efficient
cache lookup bypassing, and enabling heterogeneous ECC.
