如何有效地交错来自 8 个 __int16 数字的位?
Posted
技术标签:
【中文标题】如何有效地交错来自 8 个 __int16 数字的位?【英文标题】:How to efficiently interleave bits from 8 __int16 numbers? 【发布时间】:2017-11-17 11:14:26 【问题描述】:我正在为空间索引构建 Morton 数,我有 8 个无符号 16 位数,它们将变成 __int128 数。效率至关重要,因此天真的解决方案(循环遍历所有内容)或构建单独的 8 个 128 位数字太昂贵了。
我使用的是 GCC,目标机器是 64 位但不支持 BMI2。
如何加快计算速度?
【问题讨论】:
This 可能有一些兴趣。 @MatteoItalia 谢谢。是的,我知道这一点,不幸的是没有 BMI2,我没有 PDEP 或 PEXT 指令,我正在寻找一次计算更多代码。 【参考方案1】:如果您的机器是 x86 并且支持 SSE2,那么使用 movmsk
指令可以得到一个聪明的答案。谷歌SSE2 bit matrix transpose
获取完整代码。
【讨论】:
是的,确实如此,x86_64。这是一个聪明的主意。如果没有更快的出现,我会等待一段时间然后接受。我假设this SSE2 code 是你的?谢谢。 是的。抱歉,我是通过电话发帖,因此重定向到该文章。即使对于您狭窄的“矩阵”,该代码也将是高效的。以上是关于如何有效地交错来自 8 个 __int16 数字的位?的主要内容,如果未能解决你的问题,请参考以下文章