Cudacr: An In-Kernel Application-Level Checkpoint/Restart Scheme For Cuda Applications