1 Introduction
For all computing systems ranging from hand-held embedded systems to massive supercomputers, memory systems play the primary role in determining their power consumption, reliability, and, unquestionably, application performance. The ever-increasing data-intensive nature of state-of-the-art applications demands significantly higher performance within the constraints of power and cost, beyond what conventional memory technologies can provide. For example, more than 100 hours of video and 250 K photos are uploaded every minute to YouTube [1] and Facebook [2], respectively. Similarly, it is expected that future extreme-scale systems will deal with several exabytes of data; using hard disk to support checkpoint/restart in these systems can degrade their performance by more than 50 percent [3]. Further, these systems will require at least 100 petabytes of main memory, which, if designed with today's DDR3 DRAM, would consume 52 MW power, which is far more than the 20 MW power budget mandated for the entire system [4], [5], [6].