Enabling Software Resilience in GPGPU Applications via Partial Thread Protection