Heterogeneous devices are now present in almost every computing system. Programmers need to handle such a broad and diverse set of devices, such as GPUs, FPGAs, or any other hardware that is coming.