如何有效地交错 8 __int16 个数字的位?
How to efficiently interleave bits from 8 __int16 numbers?
我正在为空间索引构建 Morton 数,我有 8 个无符号的 16 位数字,它们将变成 __int128 数字。效率至关重要,因此天真的解决方案(遍历所有内容)或构建单独的 8 个 128 位数字太昂贵了。
我正在使用 GCC,目标机器是 64 位但不支持 BMI2。
如何加快计算速度?
如果您的机器是 x86 且支持 SSE2,使用 movmsk
指令有一个聪明的答案。 Google SSE2 bit matrix transpose
完整代码。
我正在为空间索引构建 Morton 数,我有 8 个无符号的 16 位数字,它们将变成 __int128 数字。效率至关重要,因此天真的解决方案(遍历所有内容)或构建单独的 8 个 128 位数字太昂贵了。
我正在使用 GCC,目标机器是 64 位但不支持 BMI2。
如何加快计算速度?
如果您的机器是 x86 且支持 SSE2,使用 movmsk
指令有一个聪明的答案。 Google SSE2 bit matrix transpose
完整代码。