University of California, Merced Merced, United States of America
Non-volatile memory (NVM) is expected to substitute DRAM in the memory hierarchy, due to the strengths of non-volatility, high density and near-zero standby power. Compared with DRAM, however, NVM as the main memory can be challenging. First, promising NVM solutions (e.g., PCM, ReRAM and 3D XPoint), although providing faster data access speed than storage devices (e.g., hard drive and SSD), can have higher latency and lower bandwidth than DRAM. As a result, NVM is often paired with DRAM to build a heterogeneous memory system (HMS). HMS must carefully place application data to NVM and DRAM for the best performance. Second, ensuring data persistence on NVM is not trivial because other memory components (e.g., CPU cache) remain volatile and memory writes to NVM are out of order. Programmers need to use assembly instructions (e.g., clflush) to explicitly flush data from the cache to NVM, but frequent cache flushes bring considerable performance overhead to the application. My dissertation focuses on using software solutions to address the above challenges. First, I present Unimem runtime and Tahoe runtime to efficiently and effectively direct data placement on NVM-based HMS for MPI-based iterative HPC applications and task-parallel programs, respectively. Second, I introduce the Ribbon system, which is a runtime system that improves the performance of the cache-line flushing mechanism on NVM to achieve high-performance data persistence without modifying the application semantics.