New
v5.0
Release 5.0 adds new API's to support sorting arrays of custom defined objects and sorting key-value pairs of arrays. We also now have AVX2 acceleration for argsort and argselect methods. Here is a gist of the new features:
- x86-simd-sort now supports an API to sort custom defined C++ objects via
object_qsort. Please refer to README file on how to use it. Its performance can vary depending on the definition of the custom class. For the sake of illustration, sorting a simplestructbased on one of its members can be up-to 4-5x faster than usingstd::sorton machines with AVX-512. Refer to the perf section for more details. - New API
keyvalue_qsortto sort a pair of arrays representing key-value pairs (32-bit and 64-bit data types). These are an order of magnitude faster when compared to scalar ways of sorting them. - AVX2 support for
argsortandargselectmethods. These have been merged into NumPy and will be available with NumPy v2.0.
What's Changed
- README.md: fix broken link by @rouault in https://github.com/intel/x86-simd-sort/pull/98
- Improve emulation of AVX2 min/max 64-bit by @r-devulap in https://github.com/intel/x86-simd-sort/pull/99
- fix numpy CI failures by @r-devulap in https://github.com/intel/x86-simd-sort/pull/100
- Add key-value sort to runtime dispatch by @r-devulap in https://github.com/intel/x86-simd-sort/pull/105
- Avoid masks when possible in AVX2 logic by @sterrettm2 in https://github.com/intel/x86-simd-sort/pull/104
- Add more benchmarks by @r-devulap in https://github.com/intel/x86-simd-sort/pull/106
- Support key-value sort for 32-bit dtypes by @r-devulap in https://github.com/intel/x86-simd-sort/pull/108
- Add API to sort array of custom objects by @r-devulap in https://github.com/intel/x86-simd-sort/pull/103
- Mark explicit template specializations inline by @r-devulap in https://github.com/intel/x86-simd-sort/pull/112
- BUG: bug fix in avx512_qsort_fp16 by @r-devulap in https://github.com/intel/x86-simd-sort/pull/113
- CI: build and test on 32-bit linux by @r-devulap in https://github.com/intel/x86-simd-sort/pull/114
- Support for AVX2 argsort/argselect/key-value sort by @sterrettm2 in https://github.com/intel/x86-simd-sort/pull/110
- Changes argsort/argselect to use generic networks by @sterrettm2 in https://github.com/intel/x86-simd-sort/pull/102
- Improve key-value sort performance by @r-devulap in https://github.com/intel/x86-simd-sort/pull/120
- Add IPP sort to benchmarks by @r-devulap in https://github.com/intel/x86-simd-sort/pull/121
- Build fix on macOS 64-bit by @r-devulap in https://github.com/intel/x86-simd-sort/pull/122
- Fix more build issues on macOS by @r-devulap in https://github.com/intel/x86-simd-sort/pull/123
- Add avx2_vector defintion for size_t on macOS by @r-devulap in https://github.com/intel/x86-simd-sort/pull/124
- [fix] update link in README.md by @icfaust in https://github.com/intel/x86-simd-sort/pull/125
- Use uint32_t instead of size_t for object sort by @r-devulap in https://github.com/intel/x86-simd-sort/pull/126
- Add simple test for objsort by @r-devulap in https://github.com/intel/x86-simd-sort/pull/128
- Update README with object_qsort by @r-devulap in https://github.com/intel/x86-simd-sort/pull/130
New Contributors
- @rouault made their first contribution in https://github.com/intel/x86-simd-sort/pull/98
- @icfaust made their first contribution in https://github.com/intel/x86-simd-sort/pull/125
Full Changelog: https://github.com/intel/x86-simd-sort/compare/v4.0...v5.0