GPU 高速化ソート (約 1 GB のデータ) とマージ ソート (たとえば、約 100 GB のデータ — ただし、マージはストリーム アルゴリズムであるため、サイズは問題ではありません) を実行する C++ ライブラリを求めています。ライセンスは LGPL、BSD などである必要があります。私は移植性のために OpenCL を非常に好みます (ただし、CUDA ライブラリへのリンクにも興味があります)。この件に関する論文やブログ記事へのリンクを歓迎します。
いくつかの背景(間違っている場合は修正してください):
1GB の双方向マージ ソート (つまり、128 000 000 の 8 バイト エンティティ) は、約 log 2 (128 000 000)·1G = 27GB のメモリ帯域幅を消費します。これは、シーケンシャルメモリ帯域幅を備えた最新の CPU では約 1 秒です。 ~30GB/秒。(非シーケンシャル メモリ アクセスは 10 ~ 100 倍遅くなるため、マージ以外の並べ替えにはもっと長い時間がかかるようです)。
私は最新の GPU に詳しくありませんが、典型的な GPU メモリ帯域幅は AMD/ATI 58xx のように約 150GB/s であるため、1GB のマージ ソートには 0.2 秒以下かかると思います (たとえば、http://enを参照)。 .wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units#Evergreen_.28HD_5xxx.29_series )
これは、少なくとも 5 倍の高速化です。(16x PCI-E 2.0 で 1GB を転送する時間は約 0.125 秒ですが、並べ替えと並行して PCI 転送を行うことは可能と思われます。ただし、これには 1GB ではなく 2GB または 3GB のビデオカード メモリが必要になる場合があります)。
GPUに適した、2方向以上のマージソートまたは何らかのソートにより、さらに高速化されると思われます。