如何在多GPU上实现Radix排序?

Rom*_*gan 1 parallel-processing concurrency cuda gpu opencl

如何在多GPU上实现基数排序 - 与在单GPU上相同,即通过拆分数据然后在单独的GPU上构建直方图,然后使用合并数据(如一堆卡)?

wnb*_*ell 5

这种方法可行,但我不认为这是最快的方法.具体地,合并每K比特(K = 4当前最佳)的直方图将需要在GPU 32/K = 8次之间交换密钥以对32位整数进行排序.由于GPU之间的内存带宽(~5GB/s)远低于GPU上的内存带宽(~150GB/s),因此会降低性能.

更好的策略是将数据拆分为多个部分,在不同的GPU上并行对每个部分进行排序,然后在末尾合并一次.这种方法只需要一次GPU间传输(上面的8次传输),因此速度要快得多.