PIM-MMU: A Memory Management Unit for Accelerating Data Transfers in Commercial PIM Systems
<|reference_start|>PIM-MMU: A Memory Management Unit for Accelerating Data Transfers in Commercial PIM Systems: Processing-in-memory (PIM) has emerged as a promising solution for accelerating memory-intensive workloads as they provide high memory bandwidth to the processing units. This approach has drawn attention not only from the academic community but also from the industry, leading to the development of real-world commercial PIM devices. In this work, we first conduct an in-depth characterization on UPMEM's general purpose PIM system and analyze the bottlenecks caused by the data transfers across the DRAM and PIM address space. Our characterization study reveals several critical challenges associated with DRAM to/from PIM data transfers in memory bus integrated PIM systems, for instance, its high CPU core utilization, high power consumption, and low read/write throughput for both DRAM and PIM. Driven by our key findings, we introduce the PIM-MMU architecture which is a hardware/software codesign that enables energy-efficient DRAM to/from PIM transfers for PIM systems. PIM-MMU synergistically combines a hardwarebased data copy engine, a PIM-optimized memory scheduler, and a heterogeneity-aware memory mapping function, the utilization of which is supported by our PIM-MMU software stack, significantly improving the efficiency of DRAM to/from PIM data transfers. Experimental results show that PIM-MMU improves the DRAM to/from PIM data transfer throughput by an average 4.1x and enhances its energy-efficiency by 4.1x, leading to a 2.2x end-to-end speedup for real-world PIM workloads.<|reference_end|>
@article{lee2024pim-mmu:,
    title={PIM-MMU: A Memory Management Unit for Accelerating Data Transfers in
  Commercial PIM Systems},
    author={Dongjae Lee, Bongjoon Hyun, Taehun Kim, and Minsoo Rhu},
    journal={arXiv preprint arXiv:2409.06204},
    year={2024},
    archivePrefix={arXiv},
    eprint={2409.06204},
    primaryClass={cs.AR}
}