The right level of error detection capability varies for different cache levels. Since the L1 cache is byte-accessible and extremely latency sensitive, we use a parity bit for each byte in the L1 [27], similar to Intel’s Atom and Core processors. We use simple SECDED ECC for each line in the L2 and L3 caches. We provide this protection for both robust and non-robust lines to account for soft errors as well as voltage-dependent failures. In general, detectable errors in clean data are recoverable, but those in dirty data are not. To minimize DUE (detectable unrecoverable errors), we handle modified data differently from unmodified data.