Spatial Memoization: Concurrent Instruction Reuse to Correct Timing Errors in SIMD Architectures