Programming in Parallel with CUDA: A Practical Guide