我有以下代码,它正确打包 64 位 int 的每 4 位。这是一种天真的方法,我使用的是查找表和循环。我想知道是否有更快的旋转、swar/simd、并行方式来更快地做到这一点?(msb() 返回最高有效位)
def pack(X):
compact = [
0b0000, # 0
0b0001, # 1
0b0001, # 10
0b0011, # 11
0b0001, #100
0b0011, #101
0b0011, #110
0b0111, #111
0b0001, #1000
0b0011, #1001
0b0011, #1010
0b0111, #1011
0b0011, #1100
0b0111, #1101
0b0111, #1110
0b1111, #1111
]
K = 0
while X:
i = msb(X)
j = (i//4 )*4
a = (X & (0b1111 << j))>>j
K |= compact[a] << j
X = X & ~(0b1111 << j)
return K