有人可以解释这个 SSE BigNum 比较吗?

Posted

技术标签:

【中文标题】有人可以解释这个 SSE BigNum 比较吗?【英文标题】:can someone explain this SSE BigNum comparison? 【发布时间】:2015-01-13 18:53:25 【问题描述】:

如果您查看此answer,作者设法为存储在 2 个 SSE 寄存器中的 2 个整数 bignums 创建了一个紧凑的比较算法。我没有很好地关注它:)

到目前为止我做了什么:

如果l = a < b = a[i] < b[i] ? ~0 : 0

e = a == b = a[i] == b[i] ? ~0 : 0

然后a < b == l[3] v e[3]l[2] v e[3]e[2]l[1] v e[3]e[2]e[1]l[0]

但这似乎不是作者正在做的事情。我错过了什么?有什么需要大于比较的?

【问题讨论】:

他使用大于比较,因为它是唯一可用于 SSE 的整数比较。 否则他计算的比我用的同一个公式计算的少? @Mysticial Ahhh,我明白了,讨厌的诡计,特定于 64 位 bignums。 【参考方案1】:

我忽略了答案不是通用的,而是仅限于 64 位 bignums,由 32 位元素组成。如果你有 2 个 64 位向量 a = a0, a1b = b0, b1,那么程序计算:

a < b = ((a1 < b1) | (a0 < b0)) & ~(a1 > b1)

在我的问题中,我的目标是任意长的 BigNum,使用 SSE/AVX 寄存器实现。

【讨论】:

以上是关于有人可以解释这个 SSE BigNum 比较吗?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以解释这个简单函数中'm'字母的确切含义吗? [重复]

有人可以解释为啥会出现这个错误吗?

将高斯函数转换为 SSE

有人可以为我解释一下这个 SQL 吗?

有人可以解释这个递归函数吗? [关闭]

有人可以解释一下这个简单的python代码吗?