In the earlier chapters, we’ve focused heavily on making individual kernels as fast as possible. We’ve optimized memory access, leveraged subgroups, and even built entire data structures on the GPU.