x86 プロセッサでのほぼ 16 ビット、32 ビット、および 64 ビットの事実の種類の並べ替えに完全に基づく SIMD 用の C++ ヘッダー ファイル ライブラリ. 提供するヘッダー ファイルは、src ディレクトリにあります。 私たちは現在、AVX-512 ベースの完全にクイックソートの実装を最も簡単に埋めています。 さらに、このリポジトリには、正しいソートアルゴリズムを確認するために構築され、苦労する可能性のあるチェックスイートが含まれます。 さらに、std::kind と比較したパフォーマンスを確認するためのベンチマーク コードもあります。
アルゴリズムの重要な側面
アイデアとコードは、これら 2 つの分析論文と一致しています。と [2]。 高度な段階では、AVX-512 圧縮ストア命令の啓蒙によるクイックソート パーティショニングをベクトル化することが前提です。 配列サイズが 128 未満の場合、512 ビット レジスタで使用される Bitonic ソート ネットワークを有効にします。 正確なネットワーク定義は dtype の次元に依存し、別のファイルで定義されます: avx512-16bit-qsort.hpp
,
avx512-32bit-qsort.hpp および avx512-64bit-qsort.hpp 。 記事 [4] は、ビットニック ソーティング ネットワークのリソースとしても役立ちます。 ベクトル化された qsort 機能のコア実装 avx512_qsort( T*, int64_t) は修正版論文 [2] およびその論文に関連するソース コード [3] で提示された avx2 クイックソートの
int 致命的() {
int
; std::vector
int ii=
0; ii
gcc の啓蒙gcc critical.cpp -mavx512f -mavx512dq -O3
の啓蒙gcc critical.cpp -mavx512f -mavx512dq -O3
これがヘッダーファイルの最も単純なライブラリですまた、これをソースコードに含める際に要求される、集合時間と dawdle 時間のテストを提供しなくなりました。 このソースコードを少し修正したモデルが に寄稿されています。 NumPy
(これを求めて
実施
2 つの実行可能ファイルをビルドします:
testexe : ./tests ディレクトリに書かれた一連のテストを実行します。