CUDA by Example: An Introduction to General-Purpose GPU Programming