Before proceeding with the associated implementation details, it is important to visit the fundamentals of GPU computing. GPUs use a single instruction multiple data paradigm for executing code and performing work. The graphics processing chip of a GPU comprises a set of execution units (streaming multiprocessors in NVIDIA terminology and compute units in AMD terminology). When programming for GPUs, the work should be organized for and mapped to threads. During code execution, the threads are assigned to execution units in batches (warps in NVIDIA terminology and wave fronts in AMD terminology). The batch sizes for NVIDIA and AMD hardware are 32 and 64, respectively. The execution units execute batches of threads by issuing the same instruction to each thread. There are different memory spaces on the GPU which are physically distinct from the CPU (or host) memory.