  There is an explosive growth in the size of the input and/or intermediate
data used and generated by modern and emerging applications. Unfortunately,
modern computing systems are not capable of handling large amounts of data
efficiently. Major concepts and components (e.g., the virtual memory system)
and predominant execution models (e.g., the processor-centric execution model)
used in almost all computing systems are designed without having modern
applications' overwhelming data demand in mind. As a result, accessing, moving,
and processing large amounts of data faces important challenges in today's
systems, making data a first-class concern and a prime performance and energy
bottleneck in such systems. This thesis studies the root cause of inefficiency
in modern computing systems when handling modern applications' data demand, and
aims to fundamentally address such inefficiencies, with a focus on two
directions. First, we design SIMDRAM, an end-to-end processing-using-DRAM
framework that aids the widespread adoption of processing-using-DRAM, a
data-centric computation paradigm that improves the overall performance and
efficiency of the system when computing large amounts of data by minimizing the
cost of data movement and enabling computation where the data resides. Second,
we introduce the Virtual Block Interface (VBI), a novel virtual memory
framework that 1) eliminates the inefficiencies of the conventional virtual
memory frameworks when handling the high memory demand in modern applications,
and 2) is built from the ground up to understand, convey, and exploit data
properties, to create opportunities for performance and efficiency
improvements.
