Googleが初のベクター化Quicksortを公開、std::sortの最大19倍高速

Vectorized and performance-portable Quicksort

Googleが初のベクター化Quicksortを公開、std::sortの最大19倍高速

Googleは、SIMD命令を活用したポータブルなQuicksortをオープンソースで公開した。AVX2、AVX-512、Arm NEONなど6つの命令セットに対応し、C++のstd::sortと比べて9~19倍高速。Apple M1では最大499 MB/s、Skylakeでは1120 MB/sを達成し、既存のアーキテクチャ特化型ソートをも上回る。

以前はソートは高コストと考えられていた。単一CPUコアで1 GB/sのソートが可能になることで、どのような新しいアプリケーションや機能が開拓されるのか、興味は尽きない。
  1. zX41ZdbW

    ここで見るのは奇妙だね、この記事はかなり古いよ。

    pdqsort、vqsort、glide sort以降、現在の最先端はdriftsortとipnsortだ。

    それらをClickHouseに統合した:https://github.com/ClickHouse/ClickHouse/pull/106650

  2. bee_rider

    まあ、少し前に出たものだから、ちょっとふざけてもいいかな:

    マージソートとヒープソートにはどこか美しさがある。名前が主なアイデアを教えてくれるし、仕組みもすぐに明らかだ。

    一方、クイックソートには美しさのかけらもなく、唯一の取り柄(多くの場合に速いこと)にちなんで名付けられている。

  3. minitech

    実際のタイトル:「Vectorized and performance-portable Quicksort」(2022年)。

    実際に「初」と言える点:

    > 幸いなことに、現代の命令セット(Arm SVE、RISC-V V、x86 AVX-512)には、パーティショニングに適した特別な命令が含まれている。yes/no値の別入力(要素がピボットより小さいかどうか)が与えられると、この「compress-store」命令は、対応する入力が「yes」である要素だけを連続したメモリに格納する。次にyes/no値を論理的に反転し、同じ命令を適用して要素を他のパーティションに書き込むことができる。この戦略はAVX-512固有のQuicksortで使われてきた。しかし、compress-storeを持たないAVX2などの他の命令セットはどうだろうか?先行研究では、permute命令を使ってこの命令をエミュレートする方法が示されている。

    > 我々はこれらの技術を基盤として、3つのアーキテクチャにまたがる6つの命令セットにポータブルな、初のベクター化Quicksortを実現し、実際に従来のアーキテクチャ固有のソートを上回る性能を達成した。

この日のほかの記事

2026-09-16