parallel-radix-sort icon indicating copy to clipboard operation
parallel-radix-sort copied to clipboard

An implementation of optimized parallel radix sort

概要

OpenMP を用いて並列化した Radix Sort です. また,参考文献の論文で提案されている高速化手法である Buffer based scheme を採用しています.

キーのみのソートと,キー・値のペアのソートができます. キーとして,以下の型がとれます.

  • 符号付き整数 (char, short, int, long, long long)
  • 符号なし整数 (上のに unsigned がついたもの)
  • 浮動小数点数 (float, double)

使い方

sample.cc や measure.cc を見ると大体分かると思います.

コンパイル時に -fopenmp を付けないと並列化されないので注意してください.

性能

measure.cc で 2 億要素の int 配列のソートの時間を測ります.

実行例::

% g++ -O3 measure.cc -fopenmp % ./a.out N = 200000000 parallel_radix_sort::KeySort(0): 1.159468 sec parallel_radix_sort::KeySort(1): 0.972533 sec parallel_radix_sort::KeySort(2): 1.013231 sec std::sort(0): 19.788240 sec std::sort(1): 19.786527 sec std::sort(2): 19.858960 sec

参考文献

  • Nadathur Satish, Changkyu Kim, Jatin Chhugani, Anthony D. Nguyen, Victor W. Lee, Daehyun Kim, and Pradeep Dubey. 2010. Fast sort on CPUs and GPUs: a case for bandwidth oblivious SIMD sort. In Proceedings of the 2010 international conference on Management of data (SIGMOD '10). ACM, New York, NY, USA, 351-362. DOI=10.1145/1807167.1807207 http://doi.acm.org/10.1145/1807167.1807207