Understanding prediction-based partial redundant threading for low-overhead, high- coverage fault tolerance