今年早些时候,英特尔发布了一个利用了 AVX-512 的 x86-simd-sort 快速排序库;当 Numpy 将 x86-simd-sort 代码进行合并后发现,对于 16 位到 64 位的数据类型,排序速度提高了10~17倍。如今,英特尔软件工程师又发布了 x86-simd-sort 3.0,OpenJDK 也已经将这一修改版进行了合并。
x86-simd-sort 3.0 添加了一个新的“avx512_argselect”方法,用于计算 arg nth_element,该方法返回一个对数据数组进行分区的索引数组。x86-simd-sort 3.0 版本还对其 benchmarks 进行了改进,现在使用 __builtin_cpu_supports 而不是 querying cpuinfo,并进行了各种其他更改。
目前,x86-simd-sort 3.0 已合并至 Numpy 主分支中,它提供了 np.partition 和 np.argpartition 的 AVX-512 矢量化版本。将 np.partition 的 16 位速度提高了 25 倍,将 32 位 dtypes 的速度提高了 17 倍,将 64 位 dtypes 的速度提高了约 8 倍。与此同时,新的 avx512_argselect 方法还使 np.argpartition 的速度提高了 6.5 倍。
并入 OpenJDK 的 x86-simd-sort 是一个略有修改的版本,该版本将 32 位数据排序速度提高了 15 倍,64 位数据排序速度提高了约 7 倍。
更多详情可查看此处。