Highlight

NVL-C: Static Analysis Techniques for Efficient, Correct Programming of Non-Volatile Main Memory Systems

NVL-C System
The NVL-C compiler front end is an extension of the OpenARC compiler framework. So that the NVL-C compiler implementation might be extended to other compiler front ends and languages, the majority of the compiler analyses are implemented as an extension of the popular LLVM compiler infrastructure. NVL-C's runtime currently uses Intel’s pmem library for low-level NVM memory management and transactions. However, the interface of the runtime is encapsulated so that pmem can easily be replaced by alternate runtime implementations in the future without adjusting the compiler.

Achievement

A novel programming system that extends C with intuitive, language-level support for programming Non-Volatile Memory (NVM) as persistent, high-performance main memory.

Significance and Impact

NVM main memory hierarchies are playing an increasingly significant role in most computing systems, such as mobile, enterprise, and HPC architectures. NVL-C is designed with language features, compiler analyses, and run-time checks that guard against both software failures and hardware failures that can corrupt persistent data stored in NVM.

Research Details

  • We describe novel static analyses and transformations in LLVM to support correct and efficient code generation for an underlying memory system including NVM.
  • We evaluate NVL-C on a number of applications to show its flexibility, performance, and correctness.
  • We identify two optimizations that significantly improve performance in our test applications: NVM pointer hoisting and aggregation of transaction data.

Overview

Computer architecture experts expect that NVM hierarchies will play a more significant role in future systems including mobile, enterprise, and HPC architectures. With this expectation in mind, we present NVL-C: a novel programming system that facilitates the efficient and correct programming of NVM main memory systems. The NVL-C programming abstraction extends C with a small set of intuitive language features that target NVM main memory, and can be combined directly with traditional C memory model features for DRAM. We have designed these new features t
o enable compiler analyses and run-time checks that can improve performance and guard against a number of subtle programming errors, which, when left uncorrected, can corrupt NVM-stored data. Moreover, to enable recovery of data across application or system failures, these NVL-C features include a flexible directive for specifying NVM transactions. So that our implementation might be extended to other compiler front ends and languages, the majority of our compiler analyses are implemented in an extended version of LLVM's intermediate representation (LLVM IR). We evaluate NVL-C on a number of applications to show its flexibility, performance, and correctness.