3

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方向以上のマージソートまたは何らかのソートにより、さらに高速化されると思われます。

4

1 に答える 1

3

スラストを見たことがありますか?

プロジェクトページから:

Thrust は、C++ 標準テンプレート ライブラリ (STL) に似た並列アルゴリズム ライブラリです。Thrust の高レベル インターフェイスは、GPU とマルチコア CPU 間のパフォーマンスの移植性を可能にしながら、開発者の生産性を大幅に向上させます。確立されたテクノロジ (CUDA、TBB、OpenMP など) との相互運用性により、既存のソフトウェアとの統合が容易になります。Thrust を使用して高性能アプリケーションを迅速に開発しましょう!

ライセンスはApacheなので、あなたに合うはずです。

于 2013-01-29T23:17:58.107 に答える