We present Onesweep, a least-significant digit (LSD) radix sorting algorithm for large GPU sorting problems residing in global memory. Our parallel algorithm employs a method of single-pass prefix sum that only requires ~2n global read/write operations for each digit-binning iteration. This exhibits a significant reduction in last-level memory traffic versus contemporary GPU radix sorting implementations, where each iteration of digit binning requires two passes through the dataset totaling ~3n global memory operations. On the NVIDIA A100 GPU, our approach achieves 29.4 GKey/s when sorting 256M random 32-bit keys. Compared to CUB, the current state-of-the-art GPU LSD radix sort, our approach provides a speedup of ~1.5x. For 32-bit keys with varied distributions, our approach provides more consistent performance compared to HRS, the current state-of-the-art GPU MSD radix sort, and outperforms it in almost all cases.
翻译:我们展示了用于全球记忆中的大型 GPU 分类问题的最小数字( LSD) Radex 排序算法。 我们的平行算法采用了单轴前置和只需要~ 2n 的全局读/ write 操作来进行每个数字键复制。 这显示最后一级存储量流量与当代 GPU Radx 排序执行的显著下降, 其中数字自动递增需要两次通过数据集总和~ 3n 全球存储操作的分解。 在 NVIDIA A100 GPU 中, 我们的方法在对 256M 随机32 位键进行排序时达到了29.4 GKey/ s。 与当前最先进的 GPU LSD 光学分类相比, 我们的方法提供了一种 ~1.5x 的速度。 对于具有不同分布的32 位键, 我们的方法比HRS, 即当前最先进的 GPU MSDD Radix 类比它更一致的性表现。