gpt4 book ai didi

algorithm - 按分量排序多值 (SIMD) 数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:19 24 4
gpt4 key购买 nike

我正在尝试找到一种 O(n∙log(n)) 排序方法来同时对多个数组进行排序,以便多值数组中的元素将代表来自 4 个不同的单个元素值数组和排序方法将对多值元素进行排序。

例如:
对于给定的 4 个单值数组 AnBnCnDn,我会设置一个新数组 Qn
所以 Qᵢ = [ Aᵢ Bᵢ Cᵢ Dᵢ ]
Qᵢ 可能会在此过程中发生变化,因此 Qᵢ = [ Aaᵢ Bbᵢ Ccᵢ Ddᵢ ]
其中aᵢbᵢcᵢdᵢ是索引列表
当然 Qᵢ ≤ Qᵢ₊₁ = [ Aaᵢ₊₁ Bbᵢ₊₁ Ccᵢ₊₁ Ddᵢ₊₁ ] 使得 Aaᵢ ≤ Aaᵢ₊₁, Bbᵢ ≤ Bbᵢ₊₁ 等等。其动机当然是使用 SIMD 指令以从这种结构中获益,以分别对 4 个数组进行排序。

我尝试使用 SIMD 比较器(例如 _mm_cmplt_ps)和屏蔽交换(例如 _mm_blendv_ps)制作传统排序算法的修改版本(快速排序、堆排序、归并排序等)但我总是遇到这样的问题,即理论上决策树中似乎有 O(n∙log(n)) 个步骤。因此,一个决定,是否设置一个枢轴(快速排序)或是否将父项与其子项之一交换(堆排序)对于所有 4 个组件同时在一起是不正确的(因此,下一步 - 向右或向左 - 是不正确的)。

现在我只有 O(n²) 方法在工作。

有什么想法吗?

最佳答案

听起来好像是 sorting network是您所问问题的答案,因为比较器的位置与数据无关。 Batcher's bitonic mergesort是 O(n log2 n)。

关于algorithm - 按分量排序多值 (SIMD) 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30454766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com