A light-weight cache-based fault detection and checkpointing scheme for MPSoCs enabling relaxed execution synchronization