Thread Relocation: A Runtime Architecture for Tolerating Hard Errors in Chip Multiprocessors | Synapse